Merge lp:~wgrant/launchpad/overrides-include-versions into lp:launchpad

Proposed by William Grant
Status: Merged
Merged at revision: 17127
Proposed branch: lp:~wgrant/launchpad/overrides-include-versions
Merge into: lp:launchpad
Prerequisite: lp:~wgrant/launchpad/overrides-arch-indep
Diff against target: 229 lines (+50/-25)
2 files modified
lib/lp/soyuz/adapters/overrides.py (+33/-17)
lib/lp/soyuz/adapters/tests/test_overrides.py (+17/-8)
To merge this branch: bzr merge lp:~wgrant/launchpad/overrides-include-versions
Reviewer Review Type Date Requested Status
Celso Providelo (community) Approve
Review via email: mp+227500@code.launchpad.net

Commit message

FromExistingOverridePolicy now includes the version of the ancestor it uses. archiveuploader and packagecopier need it to ensure packages don't go backwards.

Description of the change

FromExistingOverridePolicy now includes the version of the ancestor it uses. archiveuploader and packagecopier need it to ensure packages don't go backwards.

To post a comment you must log in.
Revision history for this message
Celso Providelo (cprov) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/soyuz/adapters/overrides.py'
2--- lib/lp/soyuz/adapters/overrides.py 2014-07-19 03:39:55 +0000
3+++ lib/lp/soyuz/adapters/overrides.py 2014-07-23 05:03:32 +0000
4@@ -36,6 +36,7 @@
5 from lp.soyuz.enums import PackagePublishingStatus
6 from lp.soyuz.interfaces.component import IComponentSet
7 from lp.soyuz.model.binarypackagename import BinaryPackageName
8+from lp.soyuz.model.binarypackagerelease import BinaryPackageRelease
9 from lp.soyuz.model.component import Component
10 from lp.soyuz.model.distroarchseries import DistroArchSeries
11 from lp.soyuz.model.publishing import (
12@@ -43,6 +44,7 @@
13 SourcePackagePublishingHistory,
14 )
15 from lp.soyuz.model.section import Section
16+from lp.soyuz.model.sourcepackagerelease import SourcePackageRelease
17
18
19 class IOverride(Interface):
20@@ -53,6 +55,7 @@
21
22 component = Attribute("The IComponent override")
23 section = Attribute("The ISection override")
24+ version = Attribute("The exclusive lower version limit")
25
26
27 class ISourceOverride(IOverride):
28@@ -77,9 +80,10 @@
29 class Override:
30 """See `IOverride`."""
31
32- def __init__(self, component=None, section=None):
33+ def __init__(self, component=None, section=None, version=None):
34 self.component = component
35 self.section = section
36+ self.version = version
37
38 def __ne__(self, other):
39 return not self == other
40@@ -98,12 +102,14 @@
41 def __eq__(self, other):
42 return (
43 self.component == other.component and
44- self.section == other.section)
45+ self.section == other.section and
46+ self.version == other.version)
47
48 def __repr__(self):
49 return (
50- "<%s at %x component=%r section=%r>" %
51- (self.__class__.__name__, id(self), self.component, self.section))
52+ "<%s at %x component=%r section=%r version=%r>" %
53+ (self.__class__.__name__, id(self), self.component, self.section,
54+ self.version))
55
56
57 class BinaryOverride(Override):
58@@ -111,8 +117,9 @@
59 implements(IBinaryOverride)
60
61 def __init__(self, component=None, section=None, priority=None,
62- phased_update_percentage=None):
63- super(BinaryOverride, self).__init__(component, section)
64+ phased_update_percentage=None, version=None):
65+ super(BinaryOverride, self).__init__(
66+ component=component, section=section, version=version)
67 self.priority = priority
68 self.phased_update_percentage = phased_update_percentage
69
70@@ -121,14 +128,15 @@
71 self.component == other.component and
72 self.section == other.section and
73 self.priority == other.priority and
74- self.phased_update_percentage == other.phased_update_percentage)
75+ self.phased_update_percentage == other.phased_update_percentage and
76+ self.version == other.version)
77
78 def __repr__(self):
79 return (
80 "<%s at %x component=%r section=%r priority=%r "
81- "phased_update_percentage=%r>" %
82+ "phased_update_percentage=%r version=%r>" %
83 (self.__class__.__name__, id(self), self.component, self.section,
84- self.priority, self.phased_update_percentage))
85+ self.priority, self.phased_update_percentage, self.version))
86
87
88 class IOverridePolicy(Interface):
89@@ -219,7 +227,10 @@
90 store.find(
91 (SourcePackagePublishingHistory.sourcepackagenameID,
92 SourcePackagePublishingHistory.componentID,
93- SourcePackagePublishingHistory.sectionID),
94+ SourcePackagePublishingHistory.sectionID,
95+ SourcePackageRelease.version),
96+ SourcePackageRelease.id ==
97+ SourcePackagePublishingHistory.sourcepackagereleaseID,
98 SourcePackagePublishingHistory.archiveID == archive.id,
99 SourcePackagePublishingHistory.distroseriesID ==
100 distroseries.id,
101@@ -233,11 +244,12 @@
102 ).config(
103 distinct=(
104 SourcePackagePublishingHistory.sourcepackagenameID,)),
105- id_resolver((SourcePackageName, Component, Section)),
106+ id_resolver((SourcePackageName, Component, Section, None)),
107 pre_iter_hook=eager_load)
108 return dict(
109- (name, SourceOverride(component=component, section=section))
110- for (name, component, section) in already_published)
111+ (name, SourceOverride(
112+ component=component, section=section, version=version))
113+ for (name, component, section, version) in already_published)
114
115 def calculateBinaryOverrides(self, archive, distroseries, pocket,
116 binaries, include_deleted=False):
117@@ -261,7 +273,10 @@
118 BinaryPackagePublishingHistory.distroarchseriesID,
119 BinaryPackagePublishingHistory.componentID,
120 BinaryPackagePublishingHistory.sectionID,
121- BinaryPackagePublishingHistory.priority),
122+ BinaryPackagePublishingHistory.priority,
123+ BinaryPackageRelease.version),
124+ BinaryPackageRelease.id ==
125+ BinaryPackagePublishingHistory.binarypackagereleaseID,
126 BinaryPackagePublishingHistory.status.is_in(
127 self.getExistingPublishingStatuses(include_deleted)),
128 Or(*candidates)).order_by(
129@@ -276,10 +291,10 @@
130 ),
131 id_resolver(
132 (BinaryPackageName, DistroArchSeries, Component, Section,
133- None)),
134+ None, None)),
135 pre_iter_hook=eager_load)
136 overrides = {}
137- for name, das, component, section, priority in already_published:
138+ for name, das, component, section, priority, ver in already_published:
139 # These details can always fulfill their own archtag, and may
140 # satisfy a None archtag if the DAS is nominatedarchindep.
141 matching_keys = [(name, das.architecturetag)]
142@@ -290,7 +305,8 @@
143 continue
144 overrides[key] = BinaryOverride(
145 component=component, section=section, priority=priority,
146- phased_update_percentage=self.phased_update_percentage)
147+ phased_update_percentage=self.phased_update_percentage,
148+ version=ver)
149 return overrides
150
151
152
153=== modified file 'lib/lp/soyuz/adapters/tests/test_overrides.py'
154--- lib/lp/soyuz/adapters/tests/test_overrides.py 2014-07-19 03:58:26 +0000
155+++ lib/lp/soyuz/adapters/tests/test_overrides.py 2014-07-23 05:03:32 +0000
156@@ -52,7 +52,8 @@
157 {spph.sourcepackagerelease.sourcepackagename: SourceOverride()})
158 expected = {
159 spph.sourcepackagerelease.sourcepackagename: SourceOverride(
160- component=spph.component, section=spph.section)}
161+ component=spph.component, section=spph.section,
162+ version=spph.sourcepackagerelease.version)}
163 self.assertEqual(expected, overrides)
164
165 def test_source_overrides_latest_only_is_returned(self):
166@@ -76,7 +77,8 @@
167 {spn: SourceOverride(spn)})
168 self.assertEqual(
169 {spn: SourceOverride(
170- component=spph.component, section=spph.section)},
171+ component=spph.component, section=spph.section,
172+ version=spph.sourcepackagerelease.version)},
173 overrides)
174
175 def test_source_overrides_constant_query_count(self):
176@@ -141,16 +143,19 @@
177 bpph1.distroarchseries.architecturetag):
178 BinaryOverride(
179 component=bpph1.component, section=bpph1.section,
180- priority=bpph1.priority),
181+ priority=bpph1.priority,
182+ version=bpph1.binarypackagerelease.version),
183 (bpph2.binarypackagerelease.binarypackagename,
184 bpph2.distroarchseries.architecturetag):
185 BinaryOverride(
186 component=bpph2.component, section=bpph2.section,
187- priority=bpph2.priority),
188+ priority=bpph2.priority,
189+ version=bpph2.binarypackagerelease.version),
190 (bpph2.binarypackagerelease.binarypackagename, None):
191 BinaryOverride(
192 component=bpph2.component, section=bpph2.section,
193- priority=bpph2.priority),
194+ priority=bpph2.priority,
195+ version=bpph2.binarypackagerelease.version),
196 }
197 self.assertEqual(expected, overrides)
198
199@@ -303,7 +308,9 @@
200 pocket=pocket)
201 spns.append(spph.sourcepackagerelease.sourcepackagename)
202 expected[spph.sourcepackagerelease.sourcepackagename] = (
203- SourceOverride(component=spph.component, section=spph.section))
204+ SourceOverride(
205+ component=spph.component, section=spph.section,
206+ version=spph.sourcepackagerelease.version))
207 spns.append(self.factory.makeSourcePackageName())
208 expected[spns[-1]] = SourceOverride(component=universe)
209 policy = UbuntuOverridePolicy()
210@@ -337,7 +344,8 @@
211 expected[(bpn, distroarchseries.architecturetag)] = (
212 BinaryOverride(
213 component=bpph.component, section=bpph.section,
214- priority=bpph.priority))
215+ priority=bpph.priority,
216+ version=bpph.binarypackagerelease.version))
217 for i in xrange(2):
218 distroarchseries = self.factory.makeDistroArchSeries(
219 distroseries=distroseries)
220@@ -373,7 +381,8 @@
221 bpns.append((bpn, distroarchseries.architecturetag))
222 expected[(bpn, distroarchseries.architecturetag)] = BinaryOverride(
223 component=bpph.component, section=bpph.section,
224- priority=bpph.priority, phased_update_percentage=50)
225+ priority=bpph.priority, phased_update_percentage=50,
226+ version=bpph.binarypackagerelease.version)
227 distroarchseries = self.factory.makeDistroArchSeries(
228 distroseries=distroseries)
229 bpns.append((bpn, distroarchseries.architecturetag))