← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~mwhudson/launchpad:publish-variant-build into launchpad:master

 

Michael Hudson-Doyle has proposed merging ~mwhudson/launchpad:publish-variant-build into launchpad:master with ~mwhudson/launchpad:add-distroseries-underlying-arch-model as a prerequisite.

Commit message:
support publishing variants in PPA publishing

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~mwhudson/launchpad/+git/launchpad/+merge/490643
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~mwhudson/launchpad:publish-variant-build into launchpad:master.
diff --git a/lib/lp/archivepublisher/indices.py b/lib/lp/archivepublisher/indices.py
index 05fa6ec..9bfdb26 100644
--- a/lib/lp/archivepublisher/indices.py
+++ b/lib/lp/archivepublisher/indices.py
@@ -185,10 +185,17 @@ def build_binary_stanza_fields(
     # Present 'all' in every archive index for architecture
     # independent binaries.
     if bpr.architecturespecific:
-        architecture = bpr.build.distro_arch_series.architecturetag
+        if bpr.build.distro_arch_series.underlying_architecturetag:
+            architecture = (
+                bpr.build.distro_arch_series.underlying_architecturetag
+            )
+        else:
+            architecture = bpr.build.distro_arch_series.architecturetag
     else:
         architecture = "all"
 
+    architecture_variant = bpr.getUserDefinedField("Architecture-Variant")
+
     essential = None
     if bpr.essential:
         essential = "yes"
@@ -207,6 +214,8 @@ def build_binary_stanza_fields(
     fields.append("Installed-Size", bpr.installedsize)
     fields.append("Maintainer", spr.dsc_maintainer_rfc822)
     fields.append("Architecture", architecture)
+    if architecture_variant is not None:
+        fields.append("Architecture-Variant", architecture_variant)
     fields.append("Version", bpr.version)
     fields.append("Recommends", bpr.recommends)
     fields.append("Replaces", bpr.replaces)
diff --git a/lib/lp/archivepublisher/tests/test_indices.py b/lib/lp/archivepublisher/tests/test_indices.py
index 1397ffd..9430066 100644
--- a/lib/lp/archivepublisher/tests/test_indices.py
+++ b/lib/lp/archivepublisher/tests/test_indices.py
@@ -9,6 +9,8 @@ import unittest
 
 import apt_pkg
 
+from zope.security.proxy import removeSecurityProxy
+
 from lp.archivepublisher.indices import (
     IndexStanzaFields,
     build_binary_stanza_fields,
@@ -205,6 +207,72 @@ class TestNativeArchiveIndexes(TestNativePublishingBase):
             build_bpph_stanza(pub_binary).makeOutput().splitlines(),
         )
 
+    def testBinaryStanzaArchSpecific(self):
+        das = self.factory.makeBuildableDistroArchSeries(
+            distroseries=self.distroseries, architecturetag="mips"
+        )
+        procs = list(self.distroseries.main_archive.processors)
+        procs.append(das.processor)
+        removeSecurityProxy(self.distroseries.main_archive).processors = procs
+        pub_binaries = self.getPubBinaries(
+            architecturespecific=True,
+        )
+        index_architectures = {
+            get_field(build_bpph_stanza(pub_binary), "Architecture")
+            for pub_binary in pub_binaries
+        }
+        self.assertIn("mips", index_architectures)
+
+    def testBinaryStanzaVariant(self):
+        for das in self.distroseries.architectures:
+            das.enabled = False
+        das_amd64 = self.factory.makeBuildableDistroArchSeries(
+            distroseries=self.distroseries, architecturetag="amd64"
+        )
+        procs = list(self.distroseries.main_archive.processors)
+        procs.append(das_amd64.processor)
+        self.distroseries.main_archive.setProcessors(procs)
+
+        pub_source = self.getPubSource(architecturehintlist="any")
+
+        [amd64_binary] = self.getPubBinaries(
+            pub_source=pub_source,
+        )
+
+        das_amd64v3 = self.factory.makeBuildableDistroArchSeries(
+            distroseries=self.distroseries,
+            architecturetag="amd64v3",
+            underlying_architecturetag="amd64",
+        )
+        procs.append(das_amd64v3.processor)
+        self.distroseries.main_archive.setProcessors(procs)
+
+        [amd64v3_binary] = self.getPubBinaries(
+            pub_source=pub_source,
+            user_defined_fields=[("Architecture-Variant", "amd64v3")],
+        )
+
+        architecture_fields = {
+            pub_binary.distroarchseries.architecturetag: get_field(
+                build_bpph_stanza(pub_binary), "Architecture"
+            )
+            for pub_binary in [amd64_binary, amd64v3_binary]
+        }
+        architecture_variant_fields = {
+            pub_binary.distroarchseries.architecturetag: get_field(
+                build_bpph_stanza(pub_binary), "Architecture-Variant"
+            )
+            for pub_binary in [amd64_binary, amd64v3_binary]
+        }
+        self.assertEqual(
+            {"amd64": "amd64", "amd64v3": "amd64"},
+            architecture_fields,
+        )
+        self.assertEqual(
+            {"amd64": None, "amd64v3": "amd64v3"},
+            architecture_variant_fields,
+        )
+
     def testBinaryStanzaWithCustomFields(self):
         """Check just-created binary publication Index stanza with
         custom fields (Python-Version).