launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #33138
[Merge] ~mwhudson/launchpad:no-variant-pub-unless-proc-enabled into launchpad:master
Michael Hudson-Doyle has proposed merging ~mwhudson/launchpad:no-variant-pub-unless-proc-enabled into launchpad:master.
Commit message:
do not copy unbuilt packages to variant das if processor not enabled in target
LP: #2127888
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
Related bugs:
Bug #2127888 in Launchpad itself: "amd64v3 binaries are being published in archives without it enabled"
https://bugs.launchpad.net/launchpad/+bug/2127888
For more details, see:
https://code.launchpad.net/~mwhudson/launchpad/+git/launchpad/+merge/494419
--
Your team Launchpad code reviewers is requested to review the proposed merge of ~mwhudson/launchpad:no-variant-pub-unless-proc-enabled into launchpad:master.
diff --git a/lib/lp/soyuz/model/publishing.py b/lib/lp/soyuz/model/publishing.py
index ebd26cf..16ed385 100644
--- a/lib/lp/soyuz/model/publishing.py
+++ b/lib/lp/soyuz/model/publishing.py
@@ -1394,7 +1394,7 @@ class BinaryPackagePublishingHistory(StormBase, ArchivePublisherBase):
return binary_urls
-def expand_binary_requests(distroseries, binaries):
+def expand_binary_requests(distroseries, binaries, processors):
"""Architecture-expand a dict of binary publication requests.
For architecture-independent binaries, a tuple will be returned for each
@@ -1415,7 +1415,11 @@ def expand_binary_requests(distroseries, binaries):
variant_map = {}
for arch in archs:
spf = arch.getSourceFilter()
- if spf and arch.underlying_architecturetag:
+ if (
+ spf
+ and arch.underlying_architecturetag
+ and arch.processor in processors
+ ):
variant_map.setdefault(arch.underlying_architecturetag, []).append(
(arch, spf)
)
@@ -1473,7 +1477,9 @@ class PublishingSet:
% (distroseries.distribution.name, archive.distribution.name)
)
- expanded = expand_binary_requests(distroseries, binaries)
+ expanded = expand_binary_requests(
+ distroseries, binaries, archive.processors
+ )
if len(expanded) == 0:
# The binaries are for a disabled DistroArchSeries or for
# an unsupported architecture.
diff --git a/lib/lp/soyuz/tests/test_publishing.py b/lib/lp/soyuz/tests/test_publishing.py
index 8d4be0a..91eb2e8 100644
--- a/lib/lp/soyuz/tests/test_publishing.py
+++ b/lib/lp/soyuz/tests/test_publishing.py
@@ -2138,6 +2138,11 @@ class TestPublishBinaries(TestCaseWithFactory):
bpr = self.factory.makeBinaryPackageRelease(
build=build, architecturespecific=True
)
+ archive = target_das.distroseries.main_archive
+ archive.setProcessors(
+ archive.processors + [target_variant_das.processor]
+ )
+
args = self.makeArgs([bpr], target_das.distroseries)
bpphes = list(getUtility(IPublishingSet).publishBinaries(**args))
self.assertEqual(len(bpphes), 2)
@@ -2146,6 +2151,38 @@ class TestPublishBinaries(TestCaseWithFactory):
self.assertEqual(actual_target_dases, {target_das, target_variant_das})
self.assertEqual(actual_bprs, {bpr})
+ def test_architecture_variant_processor_not_enabled(self):
+ # When a package is not built for a variant, the binaries for
+ # the underlying architecture are published to the variant
+ # DAS, unless the target archive does not have the relevant
+ # processor enabled.
+ arch_tag = self.factory.getUniqueString("arch-")
+ orig_das = self.factory.makeDistroArchSeries(architecturetag=arch_tag)
+ target_das = self.factory.makeDistroArchSeries(
+ architecturetag=arch_tag
+ )
+ target_variant_das = self.factory.makeDistroArchSeries(
+ distroseries=target_das.distroseries,
+ architecturetag=arch_tag + "v2",
+ underlying_architecturetag=arch_tag,
+ )
+ dasf = self.factory.makeDistroArchSeriesFilter(
+ distroarchseries=target_variant_das,
+ sense=DistroArchSeriesFilterSense.EXCLUDE,
+ )
+ build = self.factory.makeBinaryPackageBuild(distroarchseries=orig_das)
+ dasf.packageset.add([build.source_package_release.sourcepackagename])
+ bpr = self.factory.makeBinaryPackageRelease(
+ build=build, architecturespecific=True
+ )
+ args = self.makeArgs([bpr], target_das.distroseries)
+ bpphes = list(getUtility(IPublishingSet).publishBinaries(**args))
+ self.assertEqual(len(bpphes), 1)
+ actual_target_dases = {bpph.distroarchseries for bpph in bpphes}
+ actual_bprs = {bpph.binarypackagerelease for bpph in bpphes}
+ self.assertEqual(actual_target_dases, {target_das})
+ self.assertEqual(actual_bprs, {bpr})
+
def test_architecture_independent(self):
# Architecture-independent binaries get published to all enabled
# DASes in the series.
Follow ups