Merge lp:~cjwatson/launchpad/das-filter-honour into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 19059
Proposed branch: lp:~cjwatson/launchpad/das-filter-honour
Merge into: lp:launchpad
Prerequisite: lp:~cjwatson/launchpad/das-filter-model
Diff against target: 114 lines (+34/-2)
3 files modified
database/schema/security.cfg (+5/-0)
lib/lp/soyuz/model/binarypackagebuild.py (+2/-1)
lib/lp/soyuz/tests/test_build_set.py (+27/-1)
To merge this branch: bzr merge lp:~cjwatson/launchpad/das-filter-honour
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+372263@code.launchpad.net

Commit message

Honour DistroArchSeriesFilter rows when creating package builds.

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'database/schema/security.cfg'
2--- database/schema/security.cfg 2019-09-04 14:08:44 +0000
3+++ database/schema/security.cfg 2019-09-04 14:08:44 +0000
4@@ -912,6 +912,7 @@
5 public.distributionjob = SELECT, INSERT, DELETE
6 public.distributionsourcepackage = SELECT, INSERT, UPDATE
7 public.distributionsourcepackagecache = SELECT, INSERT, UPDATE, DELETE
8+public.distroarchseriesfilter = SELECT
9 public.distroseriesdifference = SELECT
10 public.distroseriesparent = SELECT, INSERT, UPDATE
11 public.flatpackagesetinclusion = SELECT, INSERT, UPDATE, DELETE
12@@ -970,6 +971,7 @@
13 public.componentselection = SELECT
14 public.distribution = SELECT, UPDATE
15 public.distroarchseries = SELECT, UPDATE
16+public.distroarchseriesfilter = SELECT
17 public.distroseries = SELECT, UPDATE
18 public.distroseriesparent = SELECT
19 public.emailaddress = SELECT
20@@ -1117,6 +1119,7 @@
21 public.distributionsourcepackage = SELECT, INSERT, UPDATE
22 public.distributionsourcepackagecache = SELECT, INSERT, UPDATE
23 public.distroarchseries = SELECT, INSERT
24+public.distroarchseriesfilter = SELECT
25 public.distroseries = SELECT, UPDATE
26 public.distroseriesdifference = SELECT
27 public.distroseriesdifferencemessage = SELECT, INSERT, UPDATE
28@@ -1390,6 +1393,7 @@
29 public.distributionsourcepackage = SELECT, INSERT, UPDATE
30 public.distributionsourcepackagecache = SELECT, INSERT, UPDATE
31 public.distroarchseries = SELECT
32+public.distroarchseriesfilter = SELECT
33 public.distroseries = SELECT, UPDATE
34 public.distroseriesparent = SELECT
35 public.emailaddress = SELECT, INSERT, UPDATE
36@@ -1505,6 +1509,7 @@
37 public.distributionsourcepackage = SELECT, INSERT, UPDATE
38 public.distributionsourcepackagecache = SELECT, INSERT, UPDATE
39 public.distroarchseries = SELECT
40+public.distroarchseriesfilter = SELECT
41 public.distroseries = SELECT
42 public.distroseriesdifference = SELECT
43 public.distroseriesparent = SELECT
44
45=== modified file 'lib/lp/soyuz/model/binarypackagebuild.py'
46--- lib/lp/soyuz/model/binarypackagebuild.py 2019-05-01 15:47:37 +0000
47+++ lib/lp/soyuz/model/binarypackagebuild.py 2019-09-04 14:08:44 +0000
48@@ -1337,7 +1337,8 @@
49 archive,
50 architectures_available
51 or distroseries.buildable_architectures)
52- if das.architecturetag not in skip_archtags],
53+ if das.architecturetag not in skip_archtags and
54+ das.isSourceIncluded(sourcepackagerelease.sourcepackagename)],
55 key=attrgetter('processor.id'))
56 nominated_arch_indep_tag = (
57 distroseries.nominatedarchindep.architecturetag
58
59=== modified file 'lib/lp/soyuz/tests/test_build_set.py'
60--- lib/lp/soyuz/tests/test_build_set.py 2018-02-02 03:14:35 +0000
61+++ lib/lp/soyuz/tests/test_build_set.py 2019-09-04 14:08:44 +0000
62@@ -1,4 +1,4 @@
63-# Copyright 2011-2018 Canonical Ltd. This software is licensed under the
64+# Copyright 2011-2019 Canonical Ltd. This software is licensed under the
65 # GNU Affero General Public License version 3 (see the file LICENSE).
66
67 from __future__ import absolute_import, print_function, unicode_literals
68@@ -13,6 +13,7 @@
69 from lp.registry.interfaces.pocket import PackagePublishingPocket
70 from lp.soyuz.enums import (
71 ArchivePurpose,
72+ DistroArchSeriesFilterSense,
73 SourcePackageFormat,
74 )
75 from lp.soyuz.interfaces.binarypackagebuild import (
76@@ -32,6 +33,7 @@
77 person_logged_in,
78 TestCaseWithFactory,
79 )
80+from lp.testing.dbuser import lp_dbuser
81 from lp.testing.layers import (
82 LaunchpadFunctionalLayer,
83 ZopelessDatabaseLayer,
84@@ -559,6 +561,30 @@
85 new_builds = self.createBuilds(spr, self.distroseries)
86 self.assertBuildsMatch({}, new_builds)
87
88+ def test_createForSource_honours_filters(self):
89+ # If there are DistroArchSeriesFilters for some architectures,
90+ # createForSource honours them.
91+ sprs = [
92+ self.factory.makeSourcePackageRelease(architecturehintlist='any')
93+ for _ in range(3)]
94+ with lp_dbuser():
95+ avr_filter = self.factory.makeDistroArchSeriesFilter(
96+ distroarchseries=self.distroseries2.getDistroArchSeries('avr'),
97+ sense=DistroArchSeriesFilterSense.INCLUDE)
98+ sparc_filter = self.factory.makeDistroArchSeriesFilter(
99+ distroarchseries=self.distroseries2.getDistroArchSeries(
100+ 'sparc'),
101+ sense=DistroArchSeriesFilterSense.EXCLUDE)
102+ avr_filter.packageset.add(
103+ [spr.sourcepackagename for spr in sprs[:2]])
104+ sparc_filter.packageset.add(
105+ [spr.sourcepackagename for spr in sprs[1:]])
106+ builds = [self.createBuilds(spr, self.distroseries2) for spr in sprs]
107+ self.assertBuildsMatch(
108+ {'avr': False, 'sparc': False, 'x32': True}, builds[0])
109+ self.assertBuildsMatch({'avr': False, 'x32': True}, builds[1])
110+ self.assertBuildsMatch({'x32': True}, builds[2])
111+
112
113 class TestFindBuiltOrPublishedBySourceAndArchive(TestCaseWithFactory):
114 """Tests for findBuiltOrPublishedBySourceAndArchive()."""