← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~mwhudson/launchpad:variants-vs-linux-any into launchpad:master

 

Michael Hudson-Doyle has proposed merging ~mwhudson/launchpad:variants-vs-linux-any into launchpad:master.

Commit message:
use underlying archtag when checking if a package wants to build on an arch

should enable variant builds of packages that build for Architecure: linux-any



Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~mwhudson/launchpad/+git/launchpad/+merge/493572

Had to resort to asking wgrant what was going on here!
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~mwhudson/launchpad:variants-vs-linux-any into launchpad:master.
diff --git a/lib/lp/soyuz/model/binarypackagebuild.py b/lib/lp/soyuz/model/binarypackagebuild.py
index 30e60c2..881b068 100644
--- a/lib/lp/soyuz/model/binarypackagebuild.py
+++ b/lib/lp/soyuz/model/binarypackagebuild.py
@@ -1586,14 +1586,22 @@ class BinaryPackageBuildSet(SpecificBuildFarmJobSourceMixin):
         # Create builds for the remaining architectures.
         new_builds = []
         for das in sorted(need_archs, key=attrgetter("architecturetag")):
-            if das.architecturetag not in create_tag_map:
+            if das.underlying_architecturetag is not None:
+                archtag = das.underlying_architecturetag
+            else:
+                archtag = das.architecturetag
+            if archtag not in create_tag_map:
                 continue
+            if das.underlying_architecturetag is not None:
+                indep = False
+            else:
+                indep = create_tag_map[das.architecturetag]
             build = self.new(
                 source_package_release=sourcepackagerelease,
                 distro_arch_series=das,
                 archive=archive,
                 pocket=pocket,
-                arch_indep=create_tag_map[das.architecturetag],
+                arch_indep=indep,
             )
             new_builds.append(build)
             # Create the builds in suspended mode for disabled archives.
diff --git a/lib/lp/soyuz/tests/test_build_set.py b/lib/lp/soyuz/tests/test_build_set.py
index 7f14271..a17930f 100644
--- a/lib/lp/soyuz/tests/test_build_set.py
+++ b/lib/lp/soyuz/tests/test_build_set.py
@@ -649,6 +649,32 @@ class BuildRecordCreationTests(TestNativePublishingBase):
         new_builds = self.createBuilds(spr, self.distroseries)
         self.assertBuildsMatch({}, new_builds)
 
+    def test_createForSource_linux_any(self):
+        # createForSource with a hintlist of linux-any builds for all
+        # linux architectures.
+        spr = self.factory.makeSourcePackageRelease(
+            architecturehintlist="linux-any",
+        )
+        builds = self.createBuilds(spr, self.distroseries2)
+        self.assertBuildsMatch({"sparc": False, "x32": True}, builds)
+
+    def test_createForSource_linux_any_variant(self):
+        # createForSource with a hintlist of linux-any builds for
+        # variants as well.
+        spr = self.factory.makeSourcePackageRelease(
+            architecturehintlist="linux-any",
+        )
+        self.factory.makeBuildableDistroArchSeries(
+            distroseries=self.distroseries2,
+            architecturetag="x32v2",
+            underlying_architecturetag="x32",
+            add_proc_to_archive_processors=True,
+        )
+        builds = self.createBuilds(spr, self.distroseries2)
+        self.assertBuildsMatch(
+            {"sparc": False, "x32": True, "x32v2": False}, builds
+        )
+
     def test_createForSource_honours_filters(self):
         # If there are DistroArchSeriesFilters for some architectures,
         # createForSource honours them.