launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #31118
[Merge] ~ruinedyourlife/launchpad:feat-publishing-archive-metadata-overrides into launchpad:master
Quentin Debhi has proposed merging ~ruinedyourlife/launchpad:feat-publishing-archive-metadata-overrides into launchpad:master with ~ruinedyourlife/launchpad:feat-archive-metadata-overrides as a prerequisite.
Commit message:
Apply metadata overrides in archive publishing
Utilize `metadata_overrides` for Origin, Label, and Suite during archive publishing.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~ruinedyourlife/launchpad/+git/launchpad/+merge/463914
--
Your team Launchpad code reviewers is requested to review the proposed merge of ~ruinedyourlife/launchpad:feat-publishing-archive-metadata-overrides into launchpad:master.
diff --git a/lib/lp/archivepublisher/publishing.py b/lib/lp/archivepublisher/publishing.py
index bddf01e..b2bb4c2 100644
--- a/lib/lp/archivepublisher/publishing.py
+++ b/lib/lp/archivepublisher/publishing.py
@@ -1496,10 +1496,21 @@ class Publisher:
drsummary += pocket.name.capitalize()
self.log.debug("Writing Release file for %s" % suite)
+ metadata_overrides = (
+ {}
+ if self.archive.purpose == ArchivePurpose.PRIMARY
+ else (self.archive.metadata_overrides or {})
+ )
release_file = Release()
- release_file["Origin"] = self._getOrigin()
- release_file["Label"] = self._getLabel()
- release_file["Suite"] = suite
+ release_file["Origin"] = metadata_overrides.get(
+ "Origin", self._getOrigin()
+ )
+ release_file["Label"] = metadata_overrides.get(
+ "Label", self._getLabel()
+ )
+ release_file["Suite"] = metadata_overrides.get("Suite", suite).replace(
+ "{series}", distroseries.name
+ )
release_file["Version"] = distroseries.version
release_file["Codename"] = distroseries.name
release_file["Date"] = datetime.utcnow().strftime(
@@ -1592,12 +1603,23 @@ class Publisher:
all_series_files.add(path)
all_series_files.add(os.path.join(component, arch_path, "Release"))
+ metadata_overrides = (
+ {}
+ if self.archive.purpose == ArchivePurpose.PRIMARY
+ else (self.archive.metadata_overrides or {})
+ )
release_file = Release()
- release_file["Archive"] = suite
+ release_file["Archive"] = metadata_overrides.get(
+ "Suite", suite
+ ).replace("{series}", distroseries.name)
release_file["Version"] = distroseries.version
release_file["Component"] = component
- release_file["Origin"] = self._getOrigin()
- release_file["Label"] = self._getLabel()
+ release_file["Origin"] = metadata_overrides.get(
+ "Origin", self._getOrigin()
+ )
+ release_file["Label"] = metadata_overrides.get(
+ "Label", self._getLabel()
+ )
release_file["Architecture"] = arch_name
release_path = os.path.join(suite_dir, component, arch_path, "Release")
diff --git a/lib/lp/archivepublisher/tests/test_publisher.py b/lib/lp/archivepublisher/tests/test_publisher.py
index e72b7c9..0f4256a 100644
--- a/lib/lp/archivepublisher/tests/test_publisher.py
+++ b/lib/lp/archivepublisher/tests/test_publisher.py
@@ -90,7 +90,7 @@ from lp.soyuz.enums import (
from lp.soyuz.interfaces.archive import IArchiveSet
from lp.soyuz.interfaces.archivefile import IArchiveFileSet
from lp.soyuz.tests.test_publishing import TestNativePublishingBase
-from lp.testing import TestCaseWithFactory
+from lp.testing import TestCaseWithFactory, login_person
from lp.testing.fakemethod import FakeMethod
from lp.testing.gpgkeys import gpgkeysdir
from lp.testing.keyserver import InProcessKeyServerFixture
@@ -2692,6 +2692,108 @@ class TestPublisher(TestPublisherBase):
)
self.assertTrue(file_exists(source_release))
+ def testReleaseFilePPAArchiveMetadataOverridesApplied(self):
+ cprov = getUtility(IPersonSet).getByName("cprov")
+ cprov.archive.displayname = "PPA for Celso Provid\xe8lo"
+ login_person(cprov)
+ cprov.archive.setMetadataOverrides(
+ {
+ "Origin": "test_origin",
+ "Label": "test_label",
+ }
+ )
+ archive_publisher = getPublisher(cprov.archive, [], self.logger)
+
+ self.getPubSource(filecontent=b"Hello world", archive=cprov.archive)
+ archive_publisher.A_publish(False)
+ self.layer.txn.commit()
+ archive_publisher.C_writeIndexes(False)
+ archive_publisher.D_writeReleaseFiles(False)
+
+ release = self.parseRelease(
+ os.path.join(
+ archive_publisher._config.distsroot,
+ "breezy-autotest",
+ "Release",
+ )
+ )
+
+ self.assertEqual("test_origin", release["origin"])
+ self.assertEqual("test_label", release["label"])
+
+ arch_sources_path = os.path.join(
+ archive_publisher._config.distsroot,
+ "breezy-autotest",
+ "main",
+ "source",
+ "Sources.gz",
+ )
+ with gzip.open(arch_sources_path, "rb") as arch_sources_file:
+ self.assertReleaseContentsMatch(
+ release, "main/source/Sources", arch_sources_file.read()
+ )
+
+ arch_release_path = os.path.join(
+ archive_publisher._config.distsroot,
+ "breezy-autotest",
+ "main",
+ "source",
+ "Release",
+ )
+ with open(arch_release_path, "rb") as arch_release_file:
+ self.assertReleaseContentsMatch(
+ release, "main/source/Release", arch_release_file.read()
+ )
+
+ arch_release = self.parseRelease(arch_release_path)
+ self.assertEqual("test_origin", arch_release["origin"])
+
+ def testReleaseFilePrimaryArchiveMetadataOverridesNotApplied(self):
+ publisher = Publisher(
+ self.logger,
+ self.config,
+ self.disk_pool,
+ self.ubuntutest.main_archive,
+ )
+
+ self.ubuntutest.main_archive.setMetadataOverrides(
+ {
+ "Origin": "test_origin",
+ "Label": "test_label",
+ }
+ )
+
+ self.getPubSource(filecontent=b"Hello world")
+
+ publisher.A_publish(False)
+ publisher.C_doFTPArchive(False)
+
+ self.assertIn("breezy-autotest", publisher.release_files_needed)
+
+ publisher.D_writeReleaseFiles(False)
+
+ release = self.parseRelease(
+ os.path.join(self.config.distsroot, "breezy-autotest", "Release")
+ )
+
+ self.assertEqual("ubuntutest", release["origin"])
+ self.assertEqual("ubuntutest", release["label"])
+
+ arch_release_path = os.path.join(
+ self.config.distsroot,
+ "breezy-autotest",
+ "main",
+ "source",
+ "Release",
+ )
+ with open(arch_release_path, "rb") as arch_release_file:
+ self.assertReleaseContentsMatch(
+ release, "main/source/Release", arch_release_file.read()
+ )
+
+ arch_release = self.parseRelease(arch_release_path)
+ self.assertEqual("ubuntutest", arch_release["origin"])
+
def testCreateSeriesAliasesNoAlias(self):
"""createSeriesAliases has nothing to do by default."""
publisher = Publisher(