Merge lp:~wgrant/launchpad/flatten-bfj-1-populate into lp:launchpad
- flatten-bfj-1-populate
- Merge into devel
Status: | Merged | ||||||||
---|---|---|---|---|---|---|---|---|---|
Merged at revision: | 16466 | ||||||||
Proposed branch: | lp:~wgrant/launchpad/flatten-bfj-1-populate | ||||||||
Merge into: | lp:launchpad | ||||||||
Prerequisite: | lp:~wgrant/launchpad/flatten-bfj-0-db | ||||||||
Diff against target: |
682 lines (+248/-72) 10 files modified
lib/lp/buildmaster/interfaces/packagebuild.py (+2/-10) lib/lp/buildmaster/model/buildfarmjob.py (+16/-9) lib/lp/buildmaster/model/packagebuild.py (+6/-15) lib/lp/buildmaster/tests/test_packagebuild.py (+4/-3) lib/lp/code/model/sourcepackagerecipebuild.py (+67/-10) lib/lp/soyuz/model/binarypackagebuild.py (+84/-14) lib/lp/soyuz/scripts/gina/handlers.py (+3/-3) lib/lp/soyuz/tests/test_binarypackagebuild.py (+20/-0) lib/lp/soyuz/tests/test_hasbuildrecords.py (+7/-3) lib/lp/translations/model/translationtemplatesbuild.py (+39/-5) |
||||||||
To merge this branch: | bzr merge lp:~wgrant/launchpad/flatten-bfj-1-populate | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Steve Kowalik (community) | code | Approve | |
Review via email: mp+145541@code.launchpad.net |
Commit message
Set the denormalised BPB/SPRB/TTB columns whenever the corresponding old one is set.
Description of the change
The build farm job schema is being reworked to improve performance. Columns from PackageBuild and BuildFarmJob are being merged into tables that previously delegated to them. The PackageBuild table will end up dying entirely, but BuildFarmJob will remain, a shadow of its former self, to answer questions about Archive:+builds and Builder:+history. Additionally, BinaryPackageBuild is growing new distribution, distroseries, sourcepackagename and is_distro_archive columns to make searches even faster.
This is the first non-DB component: altering the app to set the new columns on BPB/SPRB/TTB as well as the old columns on BFJ/PB. Values are still only ever read from BFJ/PB, as the new columns won't be fully populated yet.
Preview Diff
1 | === modified file 'lib/lp/buildmaster/interfaces/packagebuild.py' | |||
2 | --- lib/lp/buildmaster/interfaces/packagebuild.py 2013-01-22 08:31:09 +0000 | |||
3 | +++ lib/lp/buildmaster/interfaces/packagebuild.py 2013-02-04 02:47:23 +0000 | |||
4 | @@ -133,20 +133,12 @@ | |||
5 | 133 | class IPackageBuildSource(Interface): | 133 | class IPackageBuildSource(Interface): |
6 | 134 | """A utility of this interface used to create _things_.""" | 134 | """A utility of this interface used to create _things_.""" |
7 | 135 | 135 | ||
10 | 136 | def new(job_type, virtualized, archive, pocket, processor=None, | 136 | def new(build_farm_job, archive, pocket): |
9 | 137 | status=BuildStatus.NEEDSBUILD, dependencies=None, builder=None): | ||
11 | 138 | """Create a new `IPackageBuild`. | 137 | """Create a new `IPackageBuild`. |
12 | 139 | 138 | ||
16 | 140 | :param job_type: A `BuildFarmJobType` item. | 139 | :param build_farm_job: An `IBuildFarmJob`. |
14 | 141 | :param virtualized: A boolean indicating whether this build was | ||
15 | 142 | virtualized. | ||
17 | 143 | :param archive: An `IArchive`. | 140 | :param archive: An `IArchive`. |
18 | 144 | :param pocket: An item of `PackagePublishingPocket`. | 141 | :param pocket: An item of `PackagePublishingPocket`. |
19 | 145 | :param processor: An `IProcessor` required to run this build farm | ||
20 | 146 | job. Default is None (processor-independent). | ||
21 | 147 | :param status: A `BuildStatus` item defaulting to NEEDSBUILD. | ||
22 | 148 | :param dependencies: An optional debian-like dependency line. | ||
23 | 149 | :parma builder: An optional `IBuilder`. | ||
24 | 150 | """ | 142 | """ |
25 | 151 | 143 | ||
26 | 152 | 144 | ||
27 | 153 | 145 | ||
28 | === modified file 'lib/lp/buildmaster/model/buildfarmjob.py' | |||
29 | --- lib/lp/buildmaster/model/buildfarmjob.py 2013-01-30 07:49:52 +0000 | |||
30 | +++ lib/lp/buildmaster/model/buildfarmjob.py 2013-02-04 02:47:23 +0000 | |||
31 | @@ -196,23 +196,28 @@ | |||
32 | 196 | 196 | ||
33 | 197 | failure_count = Int(name='failure_count', allow_none=False) | 197 | failure_count = Int(name='failure_count', allow_none=False) |
34 | 198 | 198 | ||
35 | 199 | archive_id = Int(name='archive') | ||
36 | 200 | archive = Reference(archive_id, 'Archive.id') | ||
37 | 201 | |||
38 | 199 | dependencies = None | 202 | dependencies = None |
39 | 200 | 203 | ||
40 | 201 | def __init__(self, job_type, status=BuildStatus.NEEDSBUILD, | 204 | def __init__(self, job_type, status=BuildStatus.NEEDSBUILD, |
41 | 202 | processor=None, virtualized=None, date_created=None, | 205 | processor=None, virtualized=None, date_created=None, |
43 | 203 | builder=None): | 206 | builder=None, archive=None): |
44 | 204 | super(BuildFarmJob, self).__init__() | 207 | super(BuildFarmJob, self).__init__() |
45 | 205 | (self.job_type, self.status, self.processor, self.virtualized, | 208 | (self.job_type, self.status, self.processor, self.virtualized, |
47 | 206 | self.builder) = (job_type, status, processor, virtualized, builder) | 209 | self.builder, self.archive) = ( |
48 | 210 | job_type, status, processor, virtualized, builder, archive) | ||
49 | 207 | if date_created is not None: | 211 | if date_created is not None: |
50 | 208 | self.date_created = date_created | 212 | self.date_created = date_created |
51 | 209 | 213 | ||
52 | 210 | @classmethod | 214 | @classmethod |
53 | 211 | def new(cls, job_type, status=BuildStatus.NEEDSBUILD, processor=None, | 215 | def new(cls, job_type, status=BuildStatus.NEEDSBUILD, processor=None, |
55 | 212 | virtualized=None, date_created=None, builder=None): | 216 | virtualized=None, date_created=None, builder=None, archive=None): |
56 | 213 | """See `IBuildFarmJobSource`.""" | 217 | """See `IBuildFarmJobSource`.""" |
57 | 214 | build_farm_job = BuildFarmJob( | 218 | build_farm_job = BuildFarmJob( |
59 | 215 | job_type, status, processor, virtualized, date_created, builder) | 219 | job_type, status, processor, virtualized, date_created, builder, |
60 | 220 | archive) | ||
61 | 216 | store = IMasterStore(BuildFarmJob) | 221 | store = IMasterStore(BuildFarmJob) |
62 | 217 | store.add(build_farm_job) | 222 | store.add(build_farm_job) |
63 | 218 | return build_farm_job | 223 | return build_farm_job |
64 | @@ -319,29 +324,30 @@ | |||
65 | 319 | 324 | ||
66 | 320 | def setLog(self, log): | 325 | def setLog(self, log): |
67 | 321 | """See `IBuildFarmJob`.""" | 326 | """See `IBuildFarmJob`.""" |
69 | 322 | self.build_farm_job.log = log | 327 | self.build_farm_job.log = self._new_log = log |
70 | 323 | 328 | ||
71 | 324 | def updateStatus(self, status, builder=None, slave_status=None, | 329 | def updateStatus(self, status, builder=None, slave_status=None, |
72 | 325 | date_started=None, date_finished=None): | 330 | date_started=None, date_finished=None): |
73 | 326 | """See `IBuildFarmJob`.""" | 331 | """See `IBuildFarmJob`.""" |
75 | 327 | self.build_farm_job.status = status | 332 | self.build_farm_job.status = self._new_status = status |
76 | 328 | 333 | ||
77 | 329 | # If there's a builder provided, set it if we don't already have | 334 | # If there's a builder provided, set it if we don't already have |
78 | 330 | # one, or otherwise crash if it's different from the one we | 335 | # one, or otherwise crash if it's different from the one we |
79 | 331 | # expected. | 336 | # expected. |
80 | 332 | if builder is not None: | 337 | if builder is not None: |
81 | 333 | if self.builder is None: | 338 | if self.builder is None: |
83 | 334 | self.build_farm_job.builder = builder | 339 | self.build_farm_job.builder = self._new_builder = builder |
84 | 335 | else: | 340 | else: |
85 | 336 | assert self.builder == builder | 341 | assert self.builder == builder |
86 | 337 | 342 | ||
87 | 338 | # If we're starting to build, set date_started and | 343 | # If we're starting to build, set date_started and |
88 | 339 | # date_first_dispatched if required. | 344 | # date_first_dispatched if required. |
89 | 340 | if self.date_started is None and status == BuildStatus.BUILDING: | 345 | if self.date_started is None and status == BuildStatus.BUILDING: |
91 | 341 | self.build_farm_job.date_started = ( | 346 | self.build_farm_job.date_started = self._new_date_started = ( |
92 | 342 | date_started or datetime.datetime.now(pytz.UTC)) | 347 | date_started or datetime.datetime.now(pytz.UTC)) |
93 | 343 | if self.date_first_dispatched is None: | 348 | if self.date_first_dispatched is None: |
94 | 344 | self.build_farm_job.date_first_dispatched = self.date_started | 349 | self.build_farm_job.date_first_dispatched = self.date_started |
95 | 350 | self._new_date_first_dispatched = self.date_started | ||
96 | 345 | 351 | ||
97 | 346 | # If we're in a final build state (or UPLOADING, which sort of | 352 | # If we're in a final build state (or UPLOADING, which sort of |
98 | 347 | # is), set date_finished if date_started is. | 353 | # is), set date_finished if date_started is. |
99 | @@ -352,12 +358,13 @@ | |||
100 | 352 | # XXX cprov 20060615 bug=120584: Currently buildduration includes | 358 | # XXX cprov 20060615 bug=120584: Currently buildduration includes |
101 | 353 | # the scanner latency, it should really be asking the slave for | 359 | # the scanner latency, it should really be asking the slave for |
102 | 354 | # the duration spent building locally. | 360 | # the duration spent building locally. |
104 | 355 | self.build_farm_job.date_finished = ( | 361 | self.build_farm_job.date_finished = self._new_date_finished = ( |
105 | 356 | date_finished or datetime.datetime.now(pytz.UTC)) | 362 | date_finished or datetime.datetime.now(pytz.UTC)) |
106 | 357 | 363 | ||
107 | 358 | def gotFailure(self): | 364 | def gotFailure(self): |
108 | 359 | """See `IBuildFarmJob`.""" | 365 | """See `IBuildFarmJob`.""" |
109 | 360 | self.build_farm_job.failure_count += 1 | 366 | self.build_farm_job.failure_count += 1 |
110 | 367 | self._new_failure_count = self.build_farm_job.failure_count | ||
111 | 361 | 368 | ||
112 | 362 | 369 | ||
113 | 363 | class BuildFarmJobSet: | 370 | class BuildFarmJobSet: |
114 | 364 | 371 | ||
115 | === modified file 'lib/lp/buildmaster/model/packagebuild.py' | |||
116 | --- lib/lp/buildmaster/model/packagebuild.py 2013-01-30 07:49:52 +0000 | |||
117 | +++ lib/lp/buildmaster/model/packagebuild.py 2013-02-04 02:47:23 +0000 | |||
118 | @@ -84,8 +84,7 @@ | |||
119 | 84 | distribution = None | 84 | distribution = None |
120 | 85 | distro_series = None | 85 | distro_series = None |
121 | 86 | 86 | ||
124 | 87 | def __init__(self, build_farm_job, archive, pocket, | 87 | def __init__(self, build_farm_job, archive, pocket, dependencies=None): |
123 | 88 | dependencies=None): | ||
125 | 89 | """Construct a PackageBuild.""" | 88 | """Construct a PackageBuild.""" |
126 | 90 | super(PackageBuild, self).__init__() | 89 | super(PackageBuild, self).__init__() |
127 | 91 | self.build_farm_job = build_farm_job | 90 | self.build_farm_job = build_farm_job |
128 | @@ -94,18 +93,10 @@ | |||
129 | 94 | self.dependencies = dependencies | 93 | self.dependencies = dependencies |
130 | 95 | 94 | ||
131 | 96 | @classmethod | 95 | @classmethod |
135 | 97 | def new(cls, job_type, virtualized, archive, pocket, processor=None, | 96 | def new(cls, build_farm_job, archive, pocket): |
133 | 98 | status=BuildStatus.NEEDSBUILD, dependencies=None, | ||
134 | 99 | date_created=None, builder=None): | ||
136 | 100 | """See `IPackageBuildSource`.""" | 97 | """See `IPackageBuildSource`.""" |
137 | 101 | store = IMasterStore(PackageBuild) | 98 | store = IMasterStore(PackageBuild) |
145 | 102 | 99 | package_build = cls(build_farm_job, archive, pocket) | |
139 | 103 | # Create the BuildFarmJob to which the new PackageBuild | ||
140 | 104 | # will delegate. | ||
141 | 105 | build_farm_job = getUtility(IBuildFarmJobSource).new( | ||
142 | 106 | job_type, status, processor, virtualized, date_created, builder) | ||
143 | 107 | |||
144 | 108 | package_build = cls(build_farm_job, archive, pocket, dependencies) | ||
146 | 109 | store.add(package_build) | 100 | store.add(package_build) |
147 | 110 | return package_build | 101 | return package_build |
148 | 111 | 102 | ||
149 | @@ -174,10 +165,10 @@ | |||
150 | 174 | 165 | ||
151 | 175 | if (status == BuildStatus.MANUALDEPWAIT and slave_status is not None | 166 | if (status == BuildStatus.MANUALDEPWAIT and slave_status is not None |
152 | 176 | and slave_status.get('dependencies') is not None): | 167 | and slave_status.get('dependencies') is not None): |
154 | 177 | self.package_build.dependencies = ( | 168 | self.package_build.dependencies = self._new_dependencies = ( |
155 | 178 | unicode(slave_status.get('dependencies'))) | 169 | unicode(slave_status.get('dependencies'))) |
156 | 179 | else: | 170 | else: |
158 | 180 | self.package_build.dependencies = None | 171 | self.package_build.dependencies = self._new_dependencies = None |
159 | 181 | 172 | ||
160 | 182 | def verifySuccessfulUpload(self): | 173 | def verifySuccessfulUpload(self): |
161 | 183 | """See `IPackageBuild`.""" | 174 | """See `IPackageBuild`.""" |
162 | @@ -213,7 +204,7 @@ | |||
163 | 213 | """See `IPackageBuild`.""" | 204 | """See `IPackageBuild`.""" |
164 | 214 | filename = "upload_%s_log.txt" % self.id | 205 | filename = "upload_%s_log.txt" % self.id |
165 | 215 | library_file = self.createUploadLog(content, filename=filename) | 206 | library_file = self.createUploadLog(content, filename=filename) |
167 | 216 | self.package_build.upload_log = library_file | 207 | self.package_build.upload_log = self._new_upload_log = library_file |
168 | 217 | 208 | ||
169 | 218 | def notify(self, extra_info=None): | 209 | def notify(self, extra_info=None): |
170 | 219 | """See `IPackageBuild`.""" | 210 | """See `IPackageBuild`.""" |
171 | 220 | 211 | ||
172 | === modified file 'lib/lp/buildmaster/tests/test_packagebuild.py' | |||
173 | --- lib/lp/buildmaster/tests/test_packagebuild.py 2013-01-30 07:29:46 +0000 | |||
174 | +++ lib/lp/buildmaster/tests/test_packagebuild.py 2013-02-04 02:47:23 +0000 | |||
175 | @@ -16,6 +16,7 @@ | |||
176 | 16 | BuildFarmJobType, | 16 | BuildFarmJobType, |
177 | 17 | BuildStatus, | 17 | BuildStatus, |
178 | 18 | ) | 18 | ) |
179 | 19 | from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJobSource | ||
180 | 19 | from lp.buildmaster.interfaces.packagebuild import ( | 20 | from lp.buildmaster.interfaces.packagebuild import ( |
181 | 20 | IPackageBuild, | 21 | IPackageBuild, |
182 | 21 | IPackageBuildSet, | 22 | IPackageBuildSet, |
183 | @@ -46,9 +47,9 @@ | |||
184 | 46 | if archive is None: | 47 | if archive is None: |
185 | 47 | archive = self.factory.makeArchive() | 48 | archive = self.factory.makeArchive() |
186 | 48 | 49 | ||
190 | 49 | return getUtility(IPackageBuildSource).new( | 50 | bfj = getUtility(IBuildFarmJobSource).new( |
191 | 50 | job_type=job_type, virtualized=True, archive=archive, | 51 | job_type, virtualized=True, status=status) |
192 | 51 | status=status, pocket=pocket) | 52 | return getUtility(IPackageBuildSource).new(bfj, archive, pocket) |
193 | 52 | 53 | ||
194 | 53 | 54 | ||
195 | 54 | class TestPackageBuild(TestPackageBuildBase): | 55 | class TestPackageBuild(TestPackageBuildBase): |
196 | 55 | 56 | ||
197 | === modified file 'lib/lp/code/model/sourcepackagerecipebuild.py' | |||
198 | --- lib/lp/code/model/sourcepackagerecipebuild.py 2013-01-30 07:49:52 +0000 | |||
199 | +++ lib/lp/code/model/sourcepackagerecipebuild.py 2013-02-04 02:47:23 +0000 | |||
200 | @@ -15,11 +15,14 @@ | |||
201 | 15 | import logging | 15 | import logging |
202 | 16 | 16 | ||
203 | 17 | from psycopg2 import ProgrammingError | 17 | from psycopg2 import ProgrammingError |
205 | 18 | from pytz import utc | 18 | import pytz |
206 | 19 | from storm.locals import ( | 19 | from storm.locals import ( |
207 | 20 | Bool, | ||
208 | 21 | DateTime, | ||
209 | 20 | Int, | 22 | Int, |
210 | 21 | Reference, | 23 | Reference, |
211 | 22 | Storm, | 24 | Storm, |
212 | 25 | Unicode, | ||
213 | 23 | ) | 26 | ) |
214 | 24 | from storm.store import ( | 27 | from storm.store import ( |
215 | 25 | EmptyResultSet, | 28 | EmptyResultSet, |
216 | @@ -36,7 +39,12 @@ | |||
217 | 36 | BuildFarmJobType, | 39 | BuildFarmJobType, |
218 | 37 | BuildStatus, | 40 | BuildStatus, |
219 | 38 | ) | 41 | ) |
221 | 39 | from lp.buildmaster.model.buildfarmjob import BuildFarmJobOld | 42 | from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJobSource |
222 | 43 | from lp.buildmaster.interfaces.packagebuild import IPackageBuildSource | ||
223 | 44 | from lp.buildmaster.model.buildfarmjob import ( | ||
224 | 45 | BuildFarmJob, | ||
225 | 46 | BuildFarmJobOld, | ||
226 | 47 | ) | ||
227 | 40 | from lp.buildmaster.model.buildqueue import BuildQueue | 48 | from lp.buildmaster.model.buildqueue import BuildQueue |
228 | 41 | from lp.buildmaster.model.packagebuild import ( | 49 | from lp.buildmaster.model.packagebuild import ( |
229 | 42 | PackageBuild, | 50 | PackageBuild, |
230 | @@ -61,6 +69,7 @@ | |||
231 | 61 | from lp.services.database.bulk import load_related | 69 | from lp.services.database.bulk import load_related |
232 | 62 | from lp.services.database.constants import UTC_NOW | 70 | from lp.services.database.constants import UTC_NOW |
233 | 63 | from lp.services.database.decoratedresultset import DecoratedResultSet | 71 | from lp.services.database.decoratedresultset import DecoratedResultSet |
234 | 72 | from lp.services.database.enumcol import DBEnum | ||
235 | 64 | from lp.services.database.lpstorm import ( | 73 | from lp.services.database.lpstorm import ( |
236 | 65 | IMasterStore, | 74 | IMasterStore, |
237 | 66 | IStore, | 75 | IStore, |
238 | @@ -140,6 +149,45 @@ | |||
239 | 140 | requester_id = Int(name='requester', allow_none=False) | 149 | requester_id = Int(name='requester', allow_none=False) |
240 | 141 | requester = Reference(requester_id, 'Person.id') | 150 | requester = Reference(requester_id, 'Person.id') |
241 | 142 | 151 | ||
242 | 152 | # Migrating from PackageBuild | ||
243 | 153 | _new_build_farm_job_id = Int(name='build_farm_job') | ||
244 | 154 | _new_build_farm_job = Reference(_new_build_farm_job_id, BuildFarmJob.id) | ||
245 | 155 | |||
246 | 156 | _new_archive_id = Int(name='archive') | ||
247 | 157 | _new_archive = Reference(_new_archive_id, 'Archive.id') | ||
248 | 158 | |||
249 | 159 | _new_pocket = DBEnum(name='pocket', enum=PackagePublishingPocket) | ||
250 | 160 | |||
251 | 161 | _new_upload_log_id = Int(name='upload_log') | ||
252 | 162 | _new_upload_log = Reference(_new_upload_log_id, 'LibraryFileAlias.id') | ||
253 | 163 | |||
254 | 164 | _new_dependencies = Unicode(name='dependencies') | ||
255 | 165 | |||
256 | 166 | # Migrating from BuildFarmJob. | ||
257 | 167 | _new_processor_id = Int(name='processor') | ||
258 | 168 | _new_processor = Reference(_new_processor_id, 'Processor.id') | ||
259 | 169 | |||
260 | 170 | _new_virtualized = Bool(name='virtualized') | ||
261 | 171 | |||
262 | 172 | _new_date_created = DateTime(name='date_created', tzinfo=pytz.UTC) | ||
263 | 173 | |||
264 | 174 | _new_date_started = DateTime(name='date_started', tzinfo=pytz.UTC) | ||
265 | 175 | |||
266 | 176 | _new_date_finished = DateTime(name='date_finished', tzinfo=pytz.UTC) | ||
267 | 177 | |||
268 | 178 | _new_date_first_dispatched = DateTime( | ||
269 | 179 | name='date_first_dispatched', tzinfo=pytz.UTC) | ||
270 | 180 | |||
271 | 181 | _new_builder_id = Int(name='builder') | ||
272 | 182 | _new_builder = Reference(_new_builder_id, 'Builder.id') | ||
273 | 183 | |||
274 | 184 | _new_status = DBEnum(name='status', enum=BuildStatus) | ||
275 | 185 | |||
276 | 186 | _new_log_id = Int(name='log') | ||
277 | 187 | _new_log = Reference(_new_log_id, 'LibraryFileAlias.id') | ||
278 | 188 | |||
279 | 189 | _new_failure_count = Int(name='failure_count') | ||
280 | 190 | |||
281 | 143 | @property | 191 | @property |
282 | 144 | def buildqueue_record(self): | 192 | def buildqueue_record(self): |
283 | 145 | """See `IBuildFarmJob`.""" | 193 | """See `IBuildFarmJob`.""" |
284 | @@ -164,13 +212,21 @@ | |||
285 | 164 | branch_name = self.recipe.base_branch.unique_name | 212 | branch_name = self.recipe.base_branch.unique_name |
286 | 165 | return '%s recipe build' % branch_name | 213 | return '%s recipe build' % branch_name |
287 | 166 | 214 | ||
289 | 167 | def __init__(self, package_build, distroseries, recipe, requester): | 215 | def __init__(self, build_farm_job, package_build, distroseries, recipe, |
290 | 216 | requester, archive, pocket, date_created): | ||
291 | 168 | """Construct a SourcePackageRecipeBuild.""" | 217 | """Construct a SourcePackageRecipeBuild.""" |
292 | 169 | super(SourcePackageRecipeBuild, self).__init__() | 218 | super(SourcePackageRecipeBuild, self).__init__() |
293 | 219 | self._new_build_farm_job = build_farm_job | ||
294 | 170 | self.package_build = package_build | 220 | self.package_build = package_build |
295 | 171 | self.distroseries = distroseries | 221 | self.distroseries = distroseries |
296 | 172 | self.recipe = recipe | 222 | self.recipe = recipe |
297 | 173 | self.requester = requester | 223 | self.requester = requester |
298 | 224 | self._new_archive = archive | ||
299 | 225 | self._new_pocket = pocket | ||
300 | 226 | self._new_status = BuildStatus.NEEDSBUILD | ||
301 | 227 | self._new_virtualized = True | ||
302 | 228 | if date_created is not None: | ||
303 | 229 | self._new_date_created = date_created | ||
304 | 174 | 230 | ||
305 | 175 | @classmethod | 231 | @classmethod |
306 | 176 | def new(cls, distroseries, recipe, requester, archive, pocket=None, | 232 | def new(cls, distroseries, recipe, requester, archive, pocket=None, |
307 | @@ -181,13 +237,14 @@ | |||
308 | 181 | pocket = PackagePublishingPocket.RELEASE | 237 | pocket = PackagePublishingPocket.RELEASE |
309 | 182 | if date_created is None: | 238 | if date_created is None: |
310 | 183 | date_created = UTC_NOW | 239 | date_created = UTC_NOW |
313 | 184 | packagebuild = PackageBuild.new(cls.build_farm_job_type, | 240 | build_farm_job = getUtility(IBuildFarmJobSource).new( |
314 | 185 | True, archive, pocket, date_created=date_created) | 241 | cls.build_farm_job_type, BuildStatus.NEEDSBUILD, None, True, |
315 | 242 | date_created, None, archive) | ||
316 | 243 | packagebuild = getUtility(IPackageBuildSource).new( | ||
317 | 244 | build_farm_job, archive, pocket) | ||
318 | 186 | spbuild = cls( | 245 | spbuild = cls( |
323 | 187 | packagebuild, | 246 | build_farm_job, packagebuild, distroseries, recipe, requester, |
324 | 188 | distroseries, | 247 | archive, pocket, date_created) |
321 | 189 | recipe, | ||
322 | 190 | requester) | ||
325 | 191 | store.add(spbuild) | 248 | store.add(spbuild) |
326 | 192 | return spbuild | 249 | return spbuild |
327 | 193 | 250 | ||
328 | @@ -310,7 +367,7 @@ | |||
329 | 310 | def getRecentBuilds(cls, requester, recipe, distroseries, _now=None): | 367 | def getRecentBuilds(cls, requester, recipe, distroseries, _now=None): |
330 | 311 | from lp.buildmaster.model.buildfarmjob import BuildFarmJob | 368 | from lp.buildmaster.model.buildfarmjob import BuildFarmJob |
331 | 312 | if _now is None: | 369 | if _now is None: |
333 | 313 | _now = datetime.now(utc) | 370 | _now = datetime.now(pytz.UTC) |
334 | 314 | store = IMasterStore(SourcePackageRecipeBuild) | 371 | store = IMasterStore(SourcePackageRecipeBuild) |
335 | 315 | old_threshold = _now - timedelta(days=1) | 372 | old_threshold = _now - timedelta(days=1) |
336 | 316 | return store.find(cls, cls.distroseries_id == distroseries.id, | 373 | return store.find(cls, cls.distroseries_id == distroseries.id, |
337 | 317 | 374 | ||
338 | === modified file 'lib/lp/soyuz/model/binarypackagebuild.py' | |||
339 | --- lib/lp/soyuz/model/binarypackagebuild.py 2013-01-30 07:49:52 +0000 | |||
340 | +++ lib/lp/soyuz/model/binarypackagebuild.py 2013-02-04 02:47:23 +0000 | |||
341 | @@ -11,6 +11,7 @@ | |||
342 | 11 | import operator | 11 | import operator |
343 | 12 | 12 | ||
344 | 13 | import apt_pkg | 13 | import apt_pkg |
345 | 14 | import pytz | ||
346 | 14 | from sqlobject import SQLObjectNotFound | 15 | from sqlobject import SQLObjectNotFound |
347 | 15 | from storm.expr import ( | 16 | from storm.expr import ( |
348 | 16 | Desc, | 17 | Desc, |
349 | @@ -19,8 +20,11 @@ | |||
350 | 19 | SQL, | 20 | SQL, |
351 | 20 | ) | 21 | ) |
352 | 21 | from storm.locals import ( | 22 | from storm.locals import ( |
353 | 23 | Bool, | ||
354 | 24 | DateTime, | ||
355 | 22 | Int, | 25 | Int, |
356 | 23 | Reference, | 26 | Reference, |
357 | 27 | Unicode, | ||
358 | 24 | ) | 28 | ) |
359 | 25 | from storm.store import ( | 29 | from storm.store import ( |
360 | 26 | EmptyResultSet, | 30 | EmptyResultSet, |
361 | @@ -38,6 +42,7 @@ | |||
362 | 38 | BuildFarmJobType, | 42 | BuildFarmJobType, |
363 | 39 | BuildStatus, | 43 | BuildStatus, |
364 | 40 | ) | 44 | ) |
365 | 45 | from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJobSource | ||
366 | 41 | from lp.buildmaster.interfaces.packagebuild import IPackageBuildSource | 46 | from lp.buildmaster.interfaces.packagebuild import IPackageBuildSource |
367 | 42 | from lp.buildmaster.model.builder import Builder | 47 | from lp.buildmaster.model.builder import Builder |
368 | 43 | from lp.buildmaster.model.buildfarmjob import BuildFarmJob | 48 | from lp.buildmaster.model.buildfarmjob import BuildFarmJob |
369 | @@ -46,9 +51,11 @@ | |||
370 | 46 | PackageBuild, | 51 | PackageBuild, |
371 | 47 | PackageBuildMixin, | 52 | PackageBuildMixin, |
372 | 48 | ) | 53 | ) |
373 | 54 | from lp.registry.interfaces.pocket import PackagePublishingPocket | ||
374 | 49 | from lp.services.config import config | 55 | from lp.services.config import config |
375 | 50 | from lp.services.database.bulk import load_related | 56 | from lp.services.database.bulk import load_related |
376 | 51 | from lp.services.database.decoratedresultset import DecoratedResultSet | 57 | from lp.services.database.decoratedresultset import DecoratedResultSet |
377 | 58 | from lp.services.database.enumcol import DBEnum | ||
378 | 52 | from lp.services.database.interfaces import ( | 59 | from lp.services.database.interfaces import ( |
379 | 53 | DEFAULT_FLAVOR, | 60 | DEFAULT_FLAVOR, |
380 | 54 | IStoreSelector, | 61 | IStoreSelector, |
381 | @@ -110,6 +117,57 @@ | |||
382 | 110 | source_package_release = Reference( | 117 | source_package_release = Reference( |
383 | 111 | source_package_release_id, 'SourcePackageRelease.id') | 118 | source_package_release_id, 'SourcePackageRelease.id') |
384 | 112 | 119 | ||
385 | 120 | # Migrating from PackageBuild | ||
386 | 121 | _new_build_farm_job_id = Int(name='build_farm_job') | ||
387 | 122 | _new_build_farm_job = Reference(_new_build_farm_job_id, BuildFarmJob.id) | ||
388 | 123 | |||
389 | 124 | _new_archive_id = Int(name='archive') | ||
390 | 125 | _new_archive = Reference(_new_archive_id, 'Archive.id') | ||
391 | 126 | |||
392 | 127 | _new_pocket = DBEnum(name='pocket', enum=PackagePublishingPocket) | ||
393 | 128 | |||
394 | 129 | _new_upload_log_id = Int(name='upload_log') | ||
395 | 130 | _new_upload_log = Reference(_new_upload_log_id, 'LibraryFileAlias.id') | ||
396 | 131 | |||
397 | 132 | _new_dependencies = Unicode(name='dependencies') | ||
398 | 133 | |||
399 | 134 | # Migrating from BuildFarmJob. | ||
400 | 135 | _new_processor_id = Int(name='processor') | ||
401 | 136 | _new_processor = Reference(_new_processor_id, 'Processor.id') | ||
402 | 137 | |||
403 | 138 | _new_virtualized = Bool(name='virtualized') | ||
404 | 139 | |||
405 | 140 | _new_date_created = DateTime(name='date_created', tzinfo=pytz.UTC) | ||
406 | 141 | |||
407 | 142 | _new_date_started = DateTime(name='date_started', tzinfo=pytz.UTC) | ||
408 | 143 | |||
409 | 144 | _new_date_finished = DateTime(name='date_finished', tzinfo=pytz.UTC) | ||
410 | 145 | |||
411 | 146 | _new_date_first_dispatched = DateTime( | ||
412 | 147 | name='date_first_dispatched', tzinfo=pytz.UTC) | ||
413 | 148 | |||
414 | 149 | _new_builder_id = Int(name='builder') | ||
415 | 150 | _new_builder = Reference(_new_builder_id, 'Builder.id') | ||
416 | 151 | |||
417 | 152 | _new_status = DBEnum(name='status', enum=BuildStatus) | ||
418 | 153 | |||
419 | 154 | _new_log_id = Int(name='log') | ||
420 | 155 | _new_log = Reference(_new_log_id, 'LibraryFileAlias.id') | ||
421 | 156 | |||
422 | 157 | _new_failure_count = Int(name='failure_count') | ||
423 | 158 | |||
424 | 159 | _new_distribution_id = Int(name='distribution') | ||
425 | 160 | _new_distribution = Reference(_new_distribution_id, 'Distribution.id') | ||
426 | 161 | |||
427 | 162 | _new_distro_series_id = Int(name='distro_series') | ||
428 | 163 | _new_distro_series = Reference(_new_distro_series_id, 'DistroSeries.id') | ||
429 | 164 | |||
430 | 165 | _new_is_distro_archive = Bool(name='is_distro_archive') | ||
431 | 166 | |||
432 | 167 | _new_source_package_name_id = Int(name='source_package_name') | ||
433 | 168 | _new_source_package_name = Reference( | ||
434 | 169 | _new_source_package_name_id, 'SourcePackageName.id') | ||
435 | 170 | |||
436 | 113 | @property | 171 | @property |
437 | 114 | def buildqueue_record(self): | 172 | def buildqueue_record(self): |
438 | 115 | """See `IBuild`.""" | 173 | """See `IBuild`.""" |
439 | @@ -357,13 +415,13 @@ | |||
440 | 357 | def retry(self): | 415 | def retry(self): |
441 | 358 | """See `IBuild`.""" | 416 | """See `IBuild`.""" |
442 | 359 | assert self.can_be_retried, "Build %s cannot be retried" % self.id | 417 | assert self.can_be_retried, "Build %s cannot be retried" % self.id |
450 | 360 | self.build_farm_job.status = BuildStatus.NEEDSBUILD | 418 | self.build_farm_job.status = self._new_status = BuildStatus.NEEDSBUILD |
451 | 361 | self.build_farm_job.date_finished = None | 419 | self.build_farm_job.date_finished = self._new_date_finished = None |
452 | 362 | self.build_farm_job.date_started = None | 420 | self.build_farm_job.date_started = self._new_date_started = None |
453 | 363 | self.build_farm_job.builder = None | 421 | self.build_farm_job.builder = self._new_builder = None |
454 | 364 | self.build_farm_job.log = None | 422 | self.build_farm_job.log = self._new_log = None |
455 | 365 | self.package_build.upload_log = None | 423 | self.package_build.upload_log = self._new_upload_log = None |
456 | 366 | self.package_build.dependencies = None | 424 | self.package_build.dependencies = self._new_dependencies = None |
457 | 367 | self.queueBuild() | 425 | self.queueBuild() |
458 | 368 | 426 | ||
459 | 369 | def rescore(self, score): | 427 | def rescore(self, score): |
460 | @@ -513,7 +571,8 @@ | |||
461 | 513 | if not self._isDependencySatisfied(token)] | 571 | if not self._isDependencySatisfied(token)] |
462 | 514 | 572 | ||
463 | 515 | # Update dependencies line | 573 | # Update dependencies line |
465 | 516 | self.package_build.dependencies = u", ".join(remaining_deps) | 574 | self.package_build.dependencies = self._new_dependencies = ( |
466 | 575 | u", ".join(remaining_deps)) | ||
467 | 517 | 576 | ||
468 | 518 | def __getitem__(self, name): | 577 | def __getitem__(self, name): |
469 | 519 | return self.getBinaryPackageRelease(name) | 578 | return self.getBinaryPackageRelease(name) |
470 | @@ -812,17 +871,28 @@ | |||
471 | 812 | archive, pocket, status=BuildStatus.NEEDSBUILD, | 871 | archive, pocket, status=BuildStatus.NEEDSBUILD, |
472 | 813 | date_created=None, builder=None): | 872 | date_created=None, builder=None): |
473 | 814 | """See `IBinaryPackageBuildSet`.""" | 873 | """See `IBinaryPackageBuildSet`.""" |
476 | 815 | # Create the PackageBuild to which the new BinaryPackageBuild | 874 | # Create the BuildFarmJob and PackageBuild to which the new |
477 | 816 | # will delegate. | 875 | # BinaryPackageBuild will delegate. |
478 | 876 | build_farm_job = getUtility(IBuildFarmJobSource).new( | ||
479 | 877 | BinaryPackageBuild.build_farm_job_type, status, processor, | ||
480 | 878 | archive.require_virtualized, date_created, builder, archive) | ||
481 | 817 | package_build = getUtility(IPackageBuildSource).new( | 879 | package_build = getUtility(IPackageBuildSource).new( |
485 | 818 | BinaryPackageBuild.build_farm_job_type, | 880 | build_farm_job, archive, pocket) |
483 | 819 | archive.require_virtualized, archive, pocket, processor, | ||
484 | 820 | status, date_created=date_created, builder=builder) | ||
486 | 821 | 881 | ||
487 | 822 | binary_package_build = BinaryPackageBuild( | 882 | binary_package_build = BinaryPackageBuild( |
488 | 883 | _new_build_farm_job=build_farm_job, | ||
489 | 823 | package_build=package_build, | 884 | package_build=package_build, |
490 | 824 | distro_arch_series=distro_arch_series, | 885 | distro_arch_series=distro_arch_series, |
492 | 825 | source_package_release=source_package_release) | 886 | source_package_release=source_package_release, |
493 | 887 | _new_archive=archive, _new_pocket=pocket, | ||
494 | 888 | _new_status=status, _new_processor=processor, | ||
495 | 889 | _new_virtualized=archive.require_virtualized, | ||
496 | 890 | _new_builder=builder, _new_is_distro_archive=archive.is_main, | ||
497 | 891 | _new_distribution=distro_arch_series.distroseries.distribution, | ||
498 | 892 | _new_distro_series=distro_arch_series.distroseries, | ||
499 | 893 | _new_source_package_name=source_package_release.sourcepackagename) | ||
500 | 894 | if date_created is not None: | ||
501 | 895 | binary_package_build._new_date_created = date_created | ||
502 | 826 | return binary_package_build | 896 | return binary_package_build |
503 | 827 | 897 | ||
504 | 828 | def getBuildBySRAndArchtag(self, sourcepackagereleaseID, archtag): | 898 | def getBuildBySRAndArchtag(self, sourcepackagereleaseID, archtag): |
505 | 829 | 899 | ||
506 | === modified file 'lib/lp/soyuz/scripts/gina/handlers.py' | |||
507 | --- lib/lp/soyuz/scripts/gina/handlers.py 2012-08-12 09:27:55 +0000 | |||
508 | +++ lib/lp/soyuz/scripts/gina/handlers.py 2013-02-04 02:47:23 +0000 | |||
509 | @@ -890,10 +890,10 @@ | |||
510 | 890 | else: | 890 | else: |
511 | 891 | processor = distroarchinfo['processor'] | 891 | processor = distroarchinfo['processor'] |
512 | 892 | build = getUtility(IBinaryPackageBuildSet).new( | 892 | build = getUtility(IBinaryPackageBuildSet).new( |
515 | 893 | processor=processor.id, | 893 | processor=processor, |
516 | 894 | distro_arch_series=distroarchseries.id, | 894 | distro_arch_series=distroarchseries, |
517 | 895 | status=BuildStatus.FULLYBUILT, | 895 | status=BuildStatus.FULLYBUILT, |
519 | 896 | source_package_release=srcpkg.id, | 896 | source_package_release=srcpkg, |
520 | 897 | pocket=self.pocket, | 897 | pocket=self.pocket, |
521 | 898 | archive=distroarchseries.main_archive) | 898 | archive=distroarchseries.main_archive) |
522 | 899 | return build | 899 | return build |
523 | 900 | 900 | ||
524 | === modified file 'lib/lp/soyuz/tests/test_binarypackagebuild.py' | |||
525 | --- lib/lp/soyuz/tests/test_binarypackagebuild.py 2013-01-24 01:09:04 +0000 | |||
526 | +++ lib/lp/soyuz/tests/test_binarypackagebuild.py 2013-02-04 02:47:23 +0000 | |||
527 | @@ -10,6 +10,7 @@ | |||
528 | 10 | 10 | ||
529 | 11 | import pytz | 11 | import pytz |
530 | 12 | from storm.store import Store | 12 | from storm.store import Store |
531 | 13 | from testtools.matchers import MatchesStructure | ||
532 | 13 | from zope.component import getUtility | 14 | from zope.component import getUtility |
533 | 14 | from zope.security.proxy import removeSecurityProxy | 15 | from zope.security.proxy import removeSecurityProxy |
534 | 15 | 16 | ||
535 | @@ -62,6 +63,25 @@ | |||
536 | 62 | self.assertProvides(self.build, IPackageBuild) | 63 | self.assertProvides(self.build, IPackageBuild) |
537 | 63 | self.assertProvides(self.build, IBinaryPackageBuild) | 64 | self.assertProvides(self.build, IBinaryPackageBuild) |
538 | 64 | 65 | ||
539 | 66 | def test_denormed_attributes(self): | ||
540 | 67 | primary_build = self.factory.makeBinaryPackageBuild( | ||
541 | 68 | archive=self.factory.makeArchive(purpose=ArchivePurpose.PRIMARY)) | ||
542 | 69 | partner_build = self.factory.makeBinaryPackageBuild( | ||
543 | 70 | archive=self.factory.makeArchive(purpose=ArchivePurpose.PARTNER)) | ||
544 | 71 | ppa_build = self.factory.makeBinaryPackageBuild( | ||
545 | 72 | archive=self.factory.makeArchive(purpose=ArchivePurpose.PPA)) | ||
546 | 73 | scenarios = [ | ||
547 | 74 | (primary_build, True), (partner_build, True), (ppa_build, False)] | ||
548 | 75 | for build, is_distro_archive in scenarios: | ||
549 | 76 | self.assertThat( | ||
550 | 77 | removeSecurityProxy(build), | ||
551 | 78 | MatchesStructure.byEquality( | ||
552 | 79 | _new_is_distro_archive=is_distro_archive, | ||
553 | 80 | _new_distro_series=build.distro_arch_series.distroseries, | ||
554 | 81 | _new_distribution=build.distro_series.distribution, | ||
555 | 82 | _new_source_package_name= | ||
556 | 83 | build.source_package_release.sourcepackagename)) | ||
557 | 84 | |||
558 | 65 | def test_queueBuild(self): | 85 | def test_queueBuild(self): |
559 | 66 | # BinaryPackageBuild can create the queue entry for itself. | 86 | # BinaryPackageBuild can create the queue entry for itself. |
560 | 67 | bq = self.build.queueBuild() | 87 | bq = self.build.queueBuild() |
561 | 68 | 88 | ||
562 | === modified file 'lib/lp/soyuz/tests/test_hasbuildrecords.py' | |||
563 | --- lib/lp/soyuz/tests/test_hasbuildrecords.py 2013-01-24 06:05:26 +0000 | |||
564 | +++ lib/lp/soyuz/tests/test_hasbuildrecords.py 2013-02-04 02:47:23 +0000 | |||
565 | @@ -10,7 +10,10 @@ | |||
566 | 10 | BuildFarmJobType, | 10 | BuildFarmJobType, |
567 | 11 | BuildStatus, | 11 | BuildStatus, |
568 | 12 | ) | 12 | ) |
570 | 13 | from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJob | 13 | from lp.buildmaster.interfaces.buildfarmjob import ( |
571 | 14 | IBuildFarmJob, | ||
572 | 15 | IBuildFarmJobSource, | ||
573 | 16 | ) | ||
574 | 14 | from lp.buildmaster.interfaces.packagebuild import IPackageBuildSource | 17 | from lp.buildmaster.interfaces.packagebuild import IPackageBuildSource |
575 | 15 | from lp.registry.interfaces.person import IPersonSet | 18 | from lp.registry.interfaces.person import IPersonSet |
576 | 16 | from lp.registry.interfaces.pocket import PackagePublishingPocket | 19 | from lp.registry.interfaces.pocket import PackagePublishingPocket |
577 | @@ -178,9 +181,10 @@ | |||
578 | 178 | # Until we have different IBuildFarmJob types implemented, we | 181 | # Until we have different IBuildFarmJob types implemented, we |
579 | 179 | # can only test this by creating a lone PackageBuild of a | 182 | # can only test this by creating a lone PackageBuild of a |
580 | 180 | # different type. | 183 | # different type. |
581 | 184 | bfj = getUtility(IBuildFarmJobSource).new( | ||
582 | 185 | BuildFarmJobType.RECIPEBRANCHBUILD, virtualized=True) | ||
583 | 181 | getUtility(IPackageBuildSource).new( | 186 | getUtility(IPackageBuildSource).new( |
586 | 182 | job_type=BuildFarmJobType.RECIPEBRANCHBUILD, virtualized=True, | 187 | bfj, archive=self.context, pocket=PackagePublishingPocket.RELEASE) |
585 | 183 | archive=self.context, pocket=PackagePublishingPocket.RELEASE) | ||
587 | 184 | 188 | ||
588 | 185 | builds = self.context.getBuildRecords(binary_only=True) | 189 | builds = self.context.getBuildRecords(binary_only=True) |
589 | 186 | self.failUnlessEqual(3, builds.count()) | 190 | self.failUnlessEqual(3, builds.count()) |
590 | 187 | 191 | ||
591 | === modified file 'lib/lp/translations/model/translationtemplatesbuild.py' | |||
592 | --- lib/lp/translations/model/translationtemplatesbuild.py 2013-01-30 07:49:52 +0000 | |||
593 | +++ lib/lp/translations/model/translationtemplatesbuild.py 2013-02-04 02:47:23 +0000 | |||
594 | @@ -8,7 +8,10 @@ | |||
595 | 8 | 'TranslationTemplatesBuild', | 8 | 'TranslationTemplatesBuild', |
596 | 9 | ] | 9 | ] |
597 | 10 | 10 | ||
598 | 11 | import pytz | ||
599 | 11 | from storm.locals import ( | 12 | from storm.locals import ( |
600 | 13 | Bool, | ||
601 | 14 | DateTime, | ||
602 | 12 | Int, | 15 | Int, |
603 | 13 | Reference, | 16 | Reference, |
604 | 14 | Storm, | 17 | Storm, |
605 | @@ -20,7 +23,10 @@ | |||
606 | 20 | ) | 23 | ) |
607 | 21 | 24 | ||
608 | 22 | from lp.app.interfaces.launchpad import ILaunchpadCelebrities | 25 | from lp.app.interfaces.launchpad import ILaunchpadCelebrities |
610 | 23 | from lp.buildmaster.enums import BuildFarmJobType | 26 | from lp.buildmaster.enums import ( |
611 | 27 | BuildFarmJobType, | ||
612 | 28 | BuildStatus, | ||
613 | 29 | ) | ||
614 | 24 | from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJobSource | 30 | from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJobSource |
615 | 25 | from lp.buildmaster.model.buildfarmjob import BuildFarmJobMixin | 31 | from lp.buildmaster.model.buildfarmjob import BuildFarmJobMixin |
616 | 26 | from lp.code.model.branch import Branch | 32 | from lp.code.model.branch import Branch |
617 | @@ -32,6 +38,7 @@ | |||
618 | 32 | from lp.registry.model.product import Product | 38 | from lp.registry.model.product import Product |
619 | 33 | from lp.services.database.bulk import load_related | 39 | from lp.services.database.bulk import load_related |
620 | 34 | from lp.services.database.decoratedresultset import DecoratedResultSet | 40 | from lp.services.database.decoratedresultset import DecoratedResultSet |
621 | 41 | from lp.services.database.enumcol import DBEnum | ||
622 | 35 | from lp.services.database.lpstorm import IStore | 42 | from lp.services.database.lpstorm import IStore |
623 | 36 | from lp.translations.interfaces.translationtemplatesbuild import ( | 43 | from lp.translations.interfaces.translationtemplatesbuild import ( |
624 | 37 | ITranslationTemplatesBuild, | 44 | ITranslationTemplatesBuild, |
625 | @@ -56,15 +63,42 @@ | |||
626 | 56 | branch_id = Int(name='branch', allow_none=False) | 63 | branch_id = Int(name='branch', allow_none=False) |
627 | 57 | branch = Reference(branch_id, 'Branch.id') | 64 | branch = Reference(branch_id, 'Branch.id') |
628 | 58 | 65 | ||
629 | 66 | # Migrating from BuildFarmJob. | ||
630 | 67 | _new_processor_id = Int(name='processor') | ||
631 | 68 | _new_processor = Reference(_new_processor_id, 'Processor.id') | ||
632 | 69 | |||
633 | 70 | _new_virtualized = Bool(name='virtualized') | ||
634 | 71 | |||
635 | 72 | _new_date_created = DateTime(name='date_created', tzinfo=pytz.UTC) | ||
636 | 73 | |||
637 | 74 | _new_date_started = DateTime(name='date_started', tzinfo=pytz.UTC) | ||
638 | 75 | |||
639 | 76 | _new_date_finished = DateTime(name='date_finished', tzinfo=pytz.UTC) | ||
640 | 77 | |||
641 | 78 | _new_date_first_dispatched = DateTime( | ||
642 | 79 | name='date_first_dispatched', tzinfo=pytz.UTC) | ||
643 | 80 | |||
644 | 81 | _new_builder_id = Int(name='builder') | ||
645 | 82 | _new_builder = Reference(_new_builder_id, 'Builder.id') | ||
646 | 83 | |||
647 | 84 | _new_status = DBEnum(name='status', enum=BuildStatus) | ||
648 | 85 | |||
649 | 86 | _new_log_id = Int(name='log') | ||
650 | 87 | _new_log = Reference(_new_log_id, 'LibraryFileAlias.id') | ||
651 | 88 | |||
652 | 89 | _new_failure_count = Int(name='failure_count') | ||
653 | 90 | |||
654 | 59 | @property | 91 | @property |
655 | 60 | def title(self): | 92 | def title(self): |
656 | 61 | return u'Translation template build for %s' % ( | 93 | return u'Translation template build for %s' % ( |
657 | 62 | self.branch.displayname) | 94 | self.branch.displayname) |
658 | 63 | 95 | ||
660 | 64 | def __init__(self, build_farm_job, branch): | 96 | def __init__(self, build_farm_job, branch, processor): |
661 | 65 | super(TranslationTemplatesBuild, self).__init__() | 97 | super(TranslationTemplatesBuild, self).__init__() |
662 | 66 | self.build_farm_job = build_farm_job | 98 | self.build_farm_job = build_farm_job |
663 | 67 | self.branch = branch | 99 | self.branch = branch |
664 | 100 | self._new_status = BuildStatus.NEEDSBUILD | ||
665 | 101 | self._new_processor = processor | ||
666 | 68 | 102 | ||
667 | 69 | def makeJob(self): | 103 | def makeJob(self): |
668 | 70 | """See `IBuildFarmJobOld`.""" | 104 | """See `IBuildFarmJobOld`.""" |
669 | @@ -100,10 +134,10 @@ | |||
670 | 100 | @classmethod | 134 | @classmethod |
671 | 101 | def create(cls, branch): | 135 | def create(cls, branch): |
672 | 102 | """See `ITranslationTemplatesBuildSource`.""" | 136 | """See `ITranslationTemplatesBuildSource`.""" |
673 | 137 | processor = cls._getBuildArch() | ||
674 | 103 | build_farm_job = getUtility(IBuildFarmJobSource).new( | 138 | build_farm_job = getUtility(IBuildFarmJobSource).new( |
678 | 104 | BuildFarmJobType.TRANSLATIONTEMPLATESBUILD, | 139 | BuildFarmJobType.TRANSLATIONTEMPLATESBUILD, processor=processor) |
679 | 105 | processor=cls._getBuildArch()) | 140 | build = TranslationTemplatesBuild(build_farm_job, branch, processor) |
677 | 106 | build = TranslationTemplatesBuild(build_farm_job, branch) | ||
680 | 107 | store = cls._getStore() | 141 | store = cls._getStore() |
681 | 108 | store.add(build) | 142 | store.add(build) |
682 | 109 | store.flush() | 143 | store.flush() |
472 # Create the PackageBuild to which the new BinaryPackageBuild
473 # will delegate.
This comment needs updating, since you're doing more than that.