← Back to team overview

launchpad-reviewers team mailing list archive

[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(