Merge lp:~wgrant/launchpad/bfjb-from-bfj into lp:launchpad

Proposed by William Grant
Status: Merged
Approved by: Steve Kowalik
Approved revision: no longer in the source branch.
Merged at revision: 16826
Proposed branch: lp:~wgrant/launchpad/bfjb-from-bfj
Merge into: lp:launchpad
Diff against target: 859 lines (+101/-125)
19 files modified
lib/lp/archiveuploader/tests/test_uploadprocessor.py (+6/-9)
lib/lp/buildmaster/interactor.py (+2/-2)
lib/lp/buildmaster/interfaces/buildqueue.py (+4/-0)
lib/lp/buildmaster/manager.py (+3/-3)
lib/lp/buildmaster/model/builder.py (+1/-1)
lib/lp/buildmaster/model/buildfarmjobbehavior.py (+4/-8)
lib/lp/buildmaster/model/buildqueue.py (+8/-4)
lib/lp/buildmaster/tests/test_buildfarmjobbehavior.py (+3/-4)
lib/lp/buildmaster/tests/test_buildqueue.py (+2/-2)
lib/lp/buildmaster/tests/test_manager.py (+2/-2)
lib/lp/buildmaster/tests/test_queuedepth.py (+13/-13)
lib/lp/code/browser/tests/test_sourcepackagerecipebuild.py (+5/-5)
lib/lp/code/model/recipebuilder.py (+2/-6)
lib/lp/code/model/tests/test_recipebuilder.py (+7/-16)
lib/lp/soyuz/configure.zcml (+1/-1)
lib/lp/soyuz/tests/test_binarypackagebuildbehavior.py (+7/-13)
lib/lp/translations/configure.zcml (+1/-1)
lib/lp/translations/model/translationtemplatesbuildbehavior.py (+3/-3)
lib/lp/translations/tests/test_translationtemplatesbuildbehavior.py (+27/-32)
To merge this branch: bzr merge lp:~wgrant/launchpad/bfjb-from-bfj
Reviewer Review Type Date Requested Status
Steve Kowalik (community) code Approve
Review via email: mp+194805@code.launchpad.net

Commit message

IBuildFarmJobBehaviors no longer need the IBuildFarmJobOld, so just give them the IBuildFarmJob instead.

Description of the change

IBuildFarmJobBehaviors no longer need the IBuildFarmJobOld, so just give them the IBuildFarmJob instead.

This makes the TTBB tests rather awkward, but that will be resolved as part of the disposal of TTBJ.

To post a comment you must log in.
Revision history for this message
Steve Kowalik (stevenk) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/archiveuploader/tests/test_uploadprocessor.py'
2--- lib/lp/archiveuploader/tests/test_uploadprocessor.py 2013-06-25 07:40:53 +0000
3+++ lib/lp/archiveuploader/tests/test_uploadprocessor.py 2013-11-12 09:11:23 +0000
4@@ -2095,7 +2095,7 @@
5
6 # Commit so the build cookie has the right ids.
7 self.layer.txn.commit()
8- behavior = IBuildFarmJobBehavior(build.buildqueue_record.specific_job)
9+ behavior = IBuildFarmJobBehavior(build)
10 leaf_name = behavior.getUploadDirLeaf(behavior.getBuildCookie())
11 os.mkdir(os.path.join(self.incoming_folder, leaf_name))
12 self.options.context = 'buildd'
13@@ -2138,7 +2138,7 @@
14
15 # Commit so the build cookie has the right ids.
16 self.layer.txn.commit()
17- behavior = IBuildFarmJobBehavior(build.buildqueue_record.specific_job)
18+ behavior = IBuildFarmJobBehavior(build)
19 leaf_name = behavior.getUploadDirLeaf(behavior.getBuildCookie())
20 upload_dir = self.queueUpload("bar_1.0-1_binary",
21 queue_entry=leaf_name)
22@@ -2163,11 +2163,10 @@
23 distroseries=self.breezy, archive=archive,
24 requester=archive.owner)
25 self.assertEquals(archive.owner, build.requester)
26- bq = self.factory.makeSourcePackageRecipeBuildJob(recipe_build=build)
27 self.switchToUploader()
28 # Commit so the build cookie has the right ids.
29 self.layer.txn.commit()
30- behavior = IBuildFarmJobBehavior(bq.specific_job)
31+ behavior = IBuildFarmJobBehavior(build)
32 leaf_name = behavior.getUploadDirLeaf(behavior.getBuildCookie())
33 relative_path = "~%s/%s/%s/%s" % (
34 archive.owner.name, archive.name, self.breezy.distribution.name,
35@@ -2211,10 +2210,9 @@
36 archive.require_virtualized = False
37 build = self.factory.makeSourcePackageRecipeBuild(sourcename=u"bar",
38 distroseries=self.breezy, archive=archive)
39- bq = self.factory.makeSourcePackageRecipeBuildJob(recipe_build=build)
40 # Commit so the build cookie has the right ids.
41 Store.of(build).flush()
42- behavior = IBuildFarmJobBehavior(bq.specific_job)
43+ behavior = IBuildFarmJobBehavior(build)
44 leaf_name = behavior.getUploadDirLeaf(behavior.getBuildCookie())
45 os.mkdir(os.path.join(self.incoming_folder, leaf_name))
46 self.options.context = 'buildd'
47@@ -2255,11 +2253,10 @@
48 archive.require_virtualized = False
49 build = self.factory.makeSourcePackageRecipeBuild(sourcename=u"bar",
50 distroseries=self.breezy, archive=archive)
51- bq = self.factory.makeSourcePackageRecipeBuildJob(recipe_build=build)
52 self.switchToUploader()
53 # Commit so the build cookie has the right ids.
54 Store.of(build).flush()
55- behavior = IBuildFarmJobBehavior(bq.specific_job)
56+ behavior = IBuildFarmJobBehavior(build)
57 leaf_name = behavior.getUploadDirLeaf(behavior.getBuildCookie())
58 os.mkdir(os.path.join(self.incoming_folder, leaf_name))
59 self.options.context = 'buildd'
60@@ -2307,7 +2304,7 @@
61
62 # Commit so the build cookie has the right ids.
63 self.layer.txn.commit()
64- behavior = IBuildFarmJobBehavior(build.buildqueue_record.specific_job)
65+ behavior = IBuildFarmJobBehavior(build)
66 leaf_name = behavior.getUploadDirLeaf(behavior.getBuildCookie())
67 upload_dir = self.queueUpload(
68 "bar_1.0-1_binary", queue_entry=leaf_name)
69
70=== modified file 'lib/lp/buildmaster/interactor.py'
71--- lib/lp/buildmaster/interactor.py 2013-10-26 11:02:51 +0000
72+++ lib/lp/buildmaster/interactor.py 2013-11-12 09:11:23 +0000
73@@ -242,7 +242,7 @@
74 def getBuildBehavior(queue_item, builder, slave):
75 if queue_item is None:
76 return None
77- behavior = IBuildFarmJobBehavior(queue_item.specific_job)
78+ behavior = IBuildFarmJobBehavior(queue_item.specific_build)
79 behavior.setBuilder(builder, slave)
80 return behavior
81
82@@ -413,7 +413,7 @@
83
84 new_behavior = cls.getBuildBehavior(candidate, builder, slave)
85 needed_bfjb = type(removeSecurityProxy(
86- IBuildFarmJobBehavior(candidate.specific_job)))
87+ IBuildFarmJobBehavior(candidate.specific_build)))
88 if not zope_isinstance(new_behavior, needed_bfjb):
89 raise AssertionError(
90 "Inappropriate IBuildFarmJobBehavior: %r is not a %r" %
91
92=== modified file 'lib/lp/buildmaster/interfaces/buildqueue.py'
93--- lib/lp/buildmaster/interfaces/buildqueue.py 2013-09-02 08:11:58 +0000
94+++ lib/lp/buildmaster/interfaces/buildqueue.py 2013-11-12 09:11:23 +0000
95@@ -101,6 +101,10 @@
96 IBuildFarmJob, title=_("Job"),
97 description=_("Data and operations common to all build farm jobs."))
98
99+ specific_build = Reference(
100+ IBuildFarmJob, title=_("Build farm job"),
101+ description=_("Concrete build farm job object."))
102+
103 date_started = Datetime(
104 title=_('Start time'),
105 description=_('Time when the job started.'))
106
107=== modified file 'lib/lp/buildmaster/manager.py'
108--- lib/lp/buildmaster/manager.py 2013-10-26 11:02:51 +0000
109+++ lib/lp/buildmaster/manager.py 2013-11-12 09:11:23 +0000
110@@ -143,7 +143,7 @@
111 if current_job is None:
112 job_failure_count = 0
113 else:
114- job_failure_count = current_job.specific_job.build.failure_count
115+ job_failure_count = current_job.specific_build.failure_count
116
117 if builder.failure_count == job_failure_count and current_job is not None:
118 # If the failure count for the builder is the same as the
119@@ -186,7 +186,7 @@
120 # have already caused any relevant slave data to be stored
121 # on the build record so don't worry about that here.
122 builder.resetFailureCount()
123- build_job = current_job.specific_job.build
124+ build_job = current_job.specific_build
125 build_job.updateStatus(BuildStatus.FAILEDTOBUILD)
126 builder.currentjob.destroySelf()
127
128@@ -333,7 +333,7 @@
129 if vitals.build_queue is None:
130 self.date_cancel = None
131 defer.returnValue(False)
132- build = vitals.build_queue.specific_job.build
133+ build = vitals.build_queue.specific_build
134 if build.status != BuildStatus.CANCELLING:
135 self.date_cancel = None
136 defer.returnValue(False)
137
138=== modified file 'lib/lp/buildmaster/model/builder.py'
139--- lib/lp/buildmaster/model/builder.py 2013-11-11 07:18:55 +0000
140+++ lib/lp/buildmaster/model/builder.py 2013-11-12 09:11:23 +0000
141@@ -236,7 +236,7 @@
142 """See IBuilder."""
143 self.gotFailure()
144 if self.currentjob is not None:
145- build_farm_job = self.currentjob.specific_job.build
146+ build_farm_job = self.currentjob.specific_build
147 build_farm_job.gotFailure()
148 logger.info(
149 "Builder %s failure count: %s, job '%s' failure count: %s" % (
150
151=== modified file 'lib/lp/buildmaster/model/buildfarmjobbehavior.py'
152--- lib/lp/buildmaster/model/buildfarmjobbehavior.py 2013-10-08 11:56:24 +0000
153+++ lib/lp/buildmaster/model/buildfarmjobbehavior.py 2013-11-12 09:11:23 +0000
154@@ -39,15 +39,11 @@
155 All build-farm job behaviors should inherit from this.
156 """
157
158- def __init__(self, buildfarmjob):
159+ def __init__(self, build):
160 """Store a reference to the job_type with which we were created."""
161- self.buildfarmjob = buildfarmjob
162+ self.build = build
163 self._builder = None
164
165- @property
166- def build(self):
167- return self.buildfarmjob.build
168-
169 def setBuilder(self, builder, slave):
170 """The builder should be set once and not changed."""
171 self._builder = builder
172@@ -157,7 +153,7 @@
173 logger.info(
174 'Processing finished %s build %s (%s) from builder %s'
175 % (status, self.getBuildCookie(),
176- self.build.buildqueue_record.specific_job.build.title,
177+ self.build.buildqueue_record.specific_build.title,
178 self.build.buildqueue_record.builder.name))
179 d = method(slave_status, logger, notify)
180 return d
181@@ -176,7 +172,7 @@
182 # If this is a binary package build, discard it if its source is
183 # no longer published.
184 if build.job_type == BuildFarmJobType.PACKAGEBUILD:
185- build = build.buildqueue_record.specific_job.build
186+ build = build.buildqueue_record.specific_build
187 if not build.current_source_publication:
188 yield self._slave.clean()
189 build.updateStatus(BuildStatus.SUPERSEDED)
190
191=== modified file 'lib/lp/buildmaster/model/buildqueue.py'
192--- lib/lp/buildmaster/model/buildqueue.py 2013-11-12 00:12:53 +0000
193+++ lib/lp/buildmaster/model/buildqueue.py 2013-11-12 09:11:23 +0000
194@@ -111,6 +111,10 @@
195 processor = ForeignKey(dbName='processor', foreignKey='Processor')
196 virtualized = BoolCol(dbName='virtualized')
197
198+ @property
199+ def specific_build(self):
200+ return self.specific_job.build
201+
202 @cachedproperty
203 def specific_job(self):
204 """See `IBuildQueue`."""
205@@ -180,14 +184,14 @@
206 return
207 # Allow the `IBuildFarmJob` instance with the data/logic specific to
208 # the job at hand to calculate the score as appropriate.
209- self.lastscore = self.specific_job.build.calculateScore()
210+ self.lastscore = self.specific_build.calculateScore()
211
212 def markAsBuilding(self, builder):
213 """See `IBuildQueue`."""
214 self.builder = builder
215 if self.job.status != JobStatus.RUNNING:
216 self.job.start()
217- self.specific_job.build.updateStatus(BuildStatus.BUILDING)
218+ self.specific_build.updateStatus(BuildStatus.BUILDING)
219 if builder is not None:
220 del get_property_cache(builder).currentjob
221
222@@ -200,13 +204,13 @@
223 self.job.date_started = None
224 self.job.date_finished = None
225 self.logtail = None
226- self.specific_job.build.updateStatus(BuildStatus.NEEDSBUILD)
227+ self.specific_build.updateStatus(BuildStatus.NEEDSBUILD)
228 if builder is not None:
229 del get_property_cache(builder).currentjob
230
231 def cancel(self):
232 """See `IBuildQueue`."""
233- self.specific_job.build.updateStatus(BuildStatus.CANCELLED)
234+ self.specific_build.updateStatus(BuildStatus.CANCELLED)
235 self.destroySelf()
236
237 def getEstimatedJobStartTime(self, now=None):
238
239=== modified file 'lib/lp/buildmaster/tests/test_buildfarmjobbehavior.py'
240--- lib/lp/buildmaster/tests/test_buildfarmjobbehavior.py 2013-10-01 00:32:26 +0000
241+++ lib/lp/buildmaster/tests/test_buildfarmjobbehavior.py 2013-11-12 09:11:23 +0000
242@@ -69,9 +69,8 @@
243 distroarchseries=distroarchseries, pocket=pocket, archive=archive)
244
245 def test_getBuildCookie(self):
246- buildfarmjob = self.factory.makeTranslationTemplatesBuildJob()
247- build = buildfarmjob.build
248- behavior = self._makeBehavior(buildfarmjob)
249+ build = self.factory.makeTranslationTemplatesBuildJob().build
250+ behavior = self._makeBehavior(build)
251 self.assertEqual(
252 '%s-%s' % (build.job_type.name, build.id),
253 behavior.getBuildCookie())
254@@ -101,7 +100,7 @@
255 super(TestGetUploadMethodsMixin, self).setUp()
256 self.build = self.makeBuild()
257 self.behavior = IBuildFarmJobBehavior(
258- self.build.buildqueue_record.specific_job)
259+ self.build.buildqueue_record.specific_build)
260
261 def test_getUploadDirLeafCookie_parseable(self):
262 # getUploadDirLeaf should return a directory name
263
264=== modified file 'lib/lp/buildmaster/tests/test_buildqueue.py'
265--- lib/lp/buildmaster/tests/test_buildqueue.py 2013-11-11 07:18:55 +0000
266+++ lib/lp/buildmaster/tests/test_buildqueue.py 2013-11-12 09:11:23 +0000
267@@ -69,7 +69,7 @@
268 for queue_entry in queue_entries:
269 source = None
270 for attr in ('sourcepackagerelease', 'sourcepackagename'):
271- source = getattr(queue_entry.specific_job.build, attr, None)
272+ source = getattr(queue_entry.specific_build, attr, None)
273 if source is not None:
274 break
275 print "%5s, %18s, p:%5s, v:%5s e:%s *** s:%5s" % (
276@@ -110,7 +110,7 @@
277
278 def test_recipebuild_cancel(self):
279 bq = self.factory.makeSourcePackageRecipeBuildJob()
280- build = bq.specific_job.build
281+ build = bq.specific_build
282 bq.markAsBuilding(self.builder)
283 bq.cancel()
284
285
286=== modified file 'lib/lp/buildmaster/tests/test_manager.py'
287--- lib/lp/buildmaster/tests/test_manager.py 2013-10-26 11:02:51 +0000
288+++ lib/lp/buildmaster/tests/test_manager.py 2013-11-12 09:11:23 +0000
289@@ -376,7 +376,7 @@
290 self.assertEqual(expected_builder_count, builder.failure_count)
291 self.assertEqual(
292 expected_job_count,
293- builder.currentjob.specific_job.build.failure_count)
294+ builder.currentjob.specific_build.failure_count)
295 self.assertEqual(1, manager_module.assessFailureCounts.call_count)
296
297 def test_scan_first_fail(self):
298@@ -495,7 +495,7 @@
299 transaction.commit()
300 login(ANONYMOUS)
301 buildqueue = builder.currentjob
302- behavior = IBuildFarmJobBehavior(buildqueue.specific_job)
303+ behavior = IBuildFarmJobBehavior(buildqueue.specific_build)
304 slave.build_id = behavior.getBuildCookie()
305 self.assertBuildingJob(buildqueue, builder)
306
307
308=== modified file 'lib/lp/buildmaster/tests/test_queuedepth.py'
309--- lib/lp/buildmaster/tests/test_queuedepth.py 2013-10-31 06:29:13 +0000
310+++ lib/lp/buildmaster/tests/test_queuedepth.py 2013-11-12 09:11:23 +0000
311@@ -503,7 +503,7 @@
312 job = self.factory.makeSourcePackageRecipeBuildJob(
313 estimated_duration=111, sourcename=u'xxr-gftp', score=1055,
314 virtualized=False)
315- self.builds.append(job.specific_job.build)
316+ self.builds.append(job.specific_build)
317
318 # Disable all native builders.
319 for builder in self.builders[(None, False)]:
320@@ -756,11 +756,11 @@
321 job = self.factory.makeSourcePackageRecipeBuildJob(
322 virtualized=False, estimated_duration=22,
323 sourcename=u'xx-recipe-bash', score=1025)
324- self.builds.append(job.specific_job.build)
325+ self.builds.append(job.specific_build)
326 job = self.factory.makeSourcePackageRecipeBuildJob(
327 virtualized=False, estimated_duration=222,
328 sourcename=u'xx-recipe-zsh', score=1053)
329- self.builds.append(job.specific_job.build)
330+ self.builds.append(job.specific_build)
331
332 # Assign the same score to the '386' vim and apg build jobs.
333 _apg_build, apg_job = find_job(self, 'apg', '386')
334@@ -856,7 +856,7 @@
335 job = self.factory.makeSourcePackageRecipeBuildJob(
336 virtualized=True, estimated_duration=332,
337 sourcename=u'xxr-openssh-client', score=1050)
338- self.builds.append(job.specific_job.build)
339+ self.builds.append(job.specific_build)
340 # print_build_setup(self.builds)
341 # ...
342 # 15, flex, p: hppa, v: True e:0:13:00 *** s: 1039
343@@ -878,7 +878,7 @@
344 job = self.factory.makeSourcePackageRecipeBuildJob(
345 estimated_duration=111, sourcename=u'xxr-gwibber', score=1051,
346 virtualized=None)
347- self.builds.append(job.specific_job.build)
348+ self.builds.append(job.specific_build)
349 # print_build_setup(self.builds)
350 self.assertEqual(None, job.virtualized)
351 # ...
352@@ -948,33 +948,33 @@
353 job = self.factory.makeSourcePackageRecipeBuildJob(
354 virtualized=False, estimated_duration=332,
355 sourcename=u'xxr-aptitude', score=1025)
356- self.builds.append(job.specific_job.build)
357+ self.builds.append(job.specific_build)
358 job = self.factory.makeSourcePackageRecipeBuildJob(
359 virtualized=False, estimated_duration=443,
360 sourcename=u'xxr-auto-apt', score=1053)
361- self.builds.append(job.specific_job.build)
362+ self.builds.append(job.specific_build)
363 job = self.factory.makeSourcePackageRecipeBuildJob(
364 estimated_duration=554, sourcename=u'xxr-daptup', score=1051,
365 virtualized=None)
366- self.builds.append(job.specific_job.build)
367+ self.builds.append(job.specific_build)
368 job = self.factory.makeSourcePackageRecipeBuildJob(
369 estimated_duration=665, sourcename=u'xxr-cron-apt', score=1043)
370- self.builds.append(job.specific_job.build)
371+ self.builds.append(job.specific_build)
372 job = self.factory.makeSourcePackageRecipeBuildJob(
373 estimated_duration=776, sourcename=u'xxr-apt-build', score=1043)
374- self.builds.append(job.specific_job.build)
375+ self.builds.append(job.specific_build)
376 job = self.factory.makeSourcePackageRecipeBuildJob(
377 estimated_duration=887, sourcename=u'xxr-debdelta', score=1044,
378 virtualized=None)
379- self.builds.append(job.specific_job.build)
380+ self.builds.append(job.specific_build)
381 job = self.factory.makeSourcePackageRecipeBuildJob(
382 estimated_duration=998, sourcename=u'xxr-apt', score=1044,
383 virtualized=None)
384- self.builds.append(job.specific_job.build)
385+ self.builds.append(job.specific_build)
386 job = self.factory.makeSourcePackageRecipeBuildJob(
387 estimated_duration=1110, sourcename=u'xxr-cupt', score=1044,
388 virtualized=None)
389- self.builds.append(job.specific_job.build)
390+ self.builds.append(job.specific_build)
391
392 # Assign the same score to the '386' vim and apg build jobs.
393 _apg_build, apg_job = find_job(self, 'apg', '386')
394
395=== modified file 'lib/lp/code/browser/tests/test_sourcepackagerecipebuild.py'
396--- lib/lp/code/browser/tests/test_sourcepackagerecipebuild.py 2013-09-11 06:05:44 +0000
397+++ lib/lp/code/browser/tests/test_sourcepackagerecipebuild.py 2013-11-12 09:11:23 +0000
398@@ -89,7 +89,7 @@
399 def test_cancel_build(self):
400 """An admin can cancel a build."""
401 queue = self.factory.makeSourcePackageRecipeBuildJob()
402- build = queue.specific_job.build
403+ build = queue.specific_build
404 transaction.commit()
405 build_url = canonical_url(build)
406 logout()
407@@ -115,7 +115,7 @@
408 def test_cancel_build_not_admin(self):
409 """No one but an admin can cancel a build."""
410 queue = self.factory.makeSourcePackageRecipeBuildJob()
411- build = queue.specific_job.build
412+ build = queue.specific_build
413 transaction.commit()
414 build_url = canonical_url(build)
415 logout()
416@@ -145,7 +145,7 @@
417 def test_rescore_build(self):
418 """An admin can rescore a build."""
419 queue = self.factory.makeSourcePackageRecipeBuildJob()
420- build = queue.specific_job.build
421+ build = queue.specific_build
422 transaction.commit()
423 build_url = canonical_url(build)
424 logout()
425@@ -173,7 +173,7 @@
426 def test_rescore_build_invalid_score(self):
427 """Build scores can only take numbers."""
428 queue = self.factory.makeSourcePackageRecipeBuildJob()
429- build = queue.specific_job.build
430+ build = queue.specific_build
431 transaction.commit()
432 build_url = canonical_url(build)
433 logout()
434@@ -196,7 +196,7 @@
435 def test_rescore_build_not_admin(self):
436 """No one but admin can rescore a build."""
437 queue = self.factory.makeSourcePackageRecipeBuildJob()
438- build = queue.specific_job.build
439+ build = queue.specific_build
440 transaction.commit()
441 build_url = canonical_url(build)
442 logout()
443
444=== modified file 'lib/lp/code/model/recipebuilder.py'
445--- lib/lp/code/model/recipebuilder.py 2013-10-08 11:56:24 +0000
446+++ lib/lp/code/model/recipebuilder.py 2013-11-12 09:11:23 +0000
447@@ -20,7 +20,7 @@
448 )
449 from lp.buildmaster.model.buildfarmjobbehavior import BuildFarmJobBehaviorBase
450 from lp.code.interfaces.sourcepackagerecipebuild import (
451- ISourcePackageRecipeBuildJob,
452+ ISourcePackageRecipeBuild,
453 )
454 from lp.registry.interfaces.pocket import PackagePublishingPocket
455 from lp.services.config import config
456@@ -33,7 +33,7 @@
457 class RecipeBuildBehavior(BuildFarmJobBehaviorBase):
458 """How to build a recipe on the build farm."""
459
460- adapts(ISourcePackageRecipeBuildJob)
461+ adapts(ISourcePackageRecipeBuild)
462 implements(IBuildFarmJobBehavior)
463
464 # The list of build status values for which email notifications are
465@@ -44,10 +44,6 @@
466 'OK', 'PACKAGEFAIL', 'DEPFAIL', 'CHROOTFAIL']
467
468 @property
469- def build(self):
470- return self.buildfarmjob.build
471-
472- @property
473 def display_name(self):
474 ret = "%s, %s, %s" % (
475 self.build.distroseries.displayname, self.build.recipe.name,
476
477=== modified file 'lib/lp/code/model/tests/test_recipebuilder.py'
478--- lib/lp/code/model/tests/test_recipebuilder.py 2013-11-11 11:26:02 +0000
479+++ lib/lp/code/model/tests/test_recipebuilder.py 2013-11-12 09:11:23 +0000
480@@ -21,16 +21,12 @@
481 from zope.component import getUtility
482 from zope.security.proxy import removeSecurityProxy
483
484-from lp.buildmaster.enums import (
485- BuildFarmJobType,
486- BuildStatus,
487- )
488+from lp.buildmaster.enums import BuildStatus
489 from lp.buildmaster.interactor import BuilderInteractor
490 from lp.buildmaster.interfaces.builder import CannotBuild
491 from lp.buildmaster.interfaces.buildfarmjobbehavior import (
492 IBuildFarmJobBehavior,
493 )
494-from lp.buildmaster.model.buildqueue import BuildQueue
495 from lp.buildmaster.tests.mock_slaves import (
496 MockBuilder,
497 OkSlave,
498@@ -89,10 +85,7 @@
499 spb = self.factory.makeSourcePackageRecipeBuild(
500 sourcepackage=sourcepackage, archive=archive,
501 recipe=recipe, requester=recipe_owner, distroseries=distroseries)
502- job = spb.makeJob()
503- job_id = removeSecurityProxy(job.job).id
504- BuildQueue(job_type=BuildFarmJobType.RECIPEBRANCHBUILD, job=job_id)
505- job = IBuildFarmJobBehavior(job)
506+ job = IBuildFarmJobBehavior(spb)
507 return job
508
509 def test_providesInterface(self):
510@@ -102,8 +95,8 @@
511
512 def test_adapts_ISourcePackageRecipeBuildJob(self):
513 # IBuildFarmJobBehavior adapts a ISourcePackageRecipeBuildJob
514- job = self.factory.makeSourcePackageRecipeBuild().makeJob()
515- job = IBuildFarmJobBehavior(job)
516+ build = self.factory.makeSourcePackageRecipeBuild()
517+ job = IBuildFarmJobBehavior(build)
518 self.assertProvides(job, IBuildFarmJobBehavior)
519
520 def test_display_name(self):
521@@ -145,8 +138,7 @@
522 # verifyBuildRequest will raise if a bad pocket is proposed.
523 build = self.factory.makeSourcePackageRecipeBuild(
524 pocket=PackagePublishingPocket.SECURITY)
525- job = self.factory.makeSourcePackageRecipeBuildJob(recipe_build=build)
526- job = IBuildFarmJobBehavior(job.specific_job)
527+ job = IBuildFarmJobBehavior(build)
528 job.setBuilder(MockBuilder("bob-de-bouwer"), OkSlave())
529 e = self.assertRaises(
530 AssertionError, job.verifyBuildRequest, BufferLogger())
531@@ -156,8 +148,7 @@
532 # A build cookie is made up of the job type and record id.
533 # The uploadprocessor relies on this format.
534 build = self.factory.makeSourcePackageRecipeBuild()
535- job = self.factory.makeSourcePackageRecipeBuildJob(recipe_build=build)
536- job = IBuildFarmJobBehavior(job.specific_job)
537+ job = IBuildFarmJobBehavior(build)
538 cookie = removeSecurityProxy(job).getBuildCookie()
539 expected_cookie = "RECIPEBRANCHBUILD-%d" % build.id
540 self.assertEquals(expected_cookie, cookie)
541@@ -351,7 +342,7 @@
542
543 def prepareBehavior(self, fake_successful_upload=False):
544 self.queue_record = self.factory.makeSourcePackageRecipeBuildJob()
545- build = self.queue_record.specific_job.build
546+ build = self.queue_record.specific_build
547 build.updateStatus(BuildStatus.FULLYBUILT)
548 if fake_successful_upload:
549 removeSecurityProxy(build).verifySuccessfulUpload = FakeMethod(
550
551=== modified file 'lib/lp/soyuz/configure.zcml'
552--- lib/lp/soyuz/configure.zcml 2013-09-12 05:19:43 +0000
553+++ lib/lp/soyuz/configure.zcml 2013-11-12 09:11:23 +0000
554@@ -797,7 +797,7 @@
555
556 <!-- BinaryPackageBuildBehavior -->
557 <adapter
558- for="lp.soyuz.interfaces.buildpackagejob.IBuildPackageJob"
559+ for="lp.soyuz.interfaces.buildpackagejob.IBinaryPackageBuild"
560 provides="lp.buildmaster.interfaces.buildfarmjobbehavior.IBuildFarmJobBehavior"
561 factory="lp.soyuz.model.binarypackagebuildbehavior.BinaryPackageBuildBehavior"
562 permission="zope.Public" />
563
564=== modified file 'lib/lp/soyuz/tests/test_binarypackagebuildbehavior.py'
565--- lib/lp/soyuz/tests/test_binarypackagebuildbehavior.py 2013-10-28 07:07:44 +0000
566+++ lib/lp/soyuz/tests/test_binarypackagebuildbehavior.py 2013-11-12 09:11:23 +0000
567@@ -98,8 +98,7 @@
568 in order to trick the slave into building correctly.
569 :return: A list of the calls we expect to be made.
570 """
571- cookie = IBuildFarmJobBehavior(
572- build.buildqueue_record.specific_job).getBuildCookie()
573+ cookie = IBuildFarmJobBehavior(build).getBuildCookie()
574 ds_name = build.distro_arch_series.distroseries.name
575 suite = ds_name + pocketsuffix[build.pocket]
576 archives = get_sources_list_for_building(
577@@ -228,8 +227,7 @@
578 lf = self.factory.makeLibraryFileAlias()
579 transaction.commit()
580 build.distro_arch_series.addOrUpdateChroot(lf)
581- candidate = build.queueBuild()
582- behavior = IBuildFarmJobBehavior(candidate.specific_job)
583+ behavior = IBuildFarmJobBehavior(build)
584 behavior.setBuilder(builder, None)
585 e = self.assertRaises(
586 AssertionError, behavior.verifyBuildRequest, BufferLogger())
587@@ -249,8 +247,7 @@
588 lf = self.factory.makeLibraryFileAlias()
589 transaction.commit()
590 build.distro_arch_series.addOrUpdateChroot(lf)
591- candidate = build.queueBuild()
592- behavior = IBuildFarmJobBehavior(candidate.specific_job)
593+ behavior = IBuildFarmJobBehavior(build)
594 behavior.setBuilder(builder, None)
595 e = self.assertRaises(
596 AssertionError, behavior.verifyBuildRequest, BufferLogger())
597@@ -268,8 +265,7 @@
598 lf = self.factory.makeLibraryFileAlias()
599 transaction.commit()
600 build.distro_arch_series.addOrUpdateChroot(lf)
601- candidate = build.queueBuild()
602- behavior = IBuildFarmJobBehavior(candidate.specific_job)
603+ behavior = IBuildFarmJobBehavior(build)
604 behavior.setBuilder(builder, None)
605 e = self.assertRaises(
606 AssertionError, behavior.verifyBuildRequest, BufferLogger())
607@@ -283,8 +279,7 @@
608 builder = self.factory.makeBuilder()
609 build = self.factory.makeBinaryPackageBuild(
610 builder=builder, archive=archive)
611- candidate = build.queueBuild()
612- behavior = IBuildFarmJobBehavior(candidate.specific_job)
613+ behavior = IBuildFarmJobBehavior(build)
614 behavior.setBuilder(builder, None)
615 e = self.assertRaises(
616 CannotBuild, behavior.verifyBuildRequest, BufferLogger())
617@@ -294,8 +289,7 @@
618 # A build cookie is made up of the job type and record id.
619 # The uploadprocessor relies on this format.
620 build = self.factory.makeBinaryPackageBuild()
621- candidate = build.queueBuild()
622- behavior = IBuildFarmJobBehavior(candidate.specific_job)
623+ behavior = IBuildFarmJobBehavior(build)
624 cookie = removeSecurityProxy(behavior).getBuildCookie()
625 expected_cookie = "PACKAGEBUILD-%d" % build.id
626 self.assertEqual(expected_cookie, cookie)
627@@ -508,7 +502,7 @@
628 'buildlog', tmp_orig_file_name)
629 return d.addCallback(got_orig_log)
630
631- behavior = IBuildFarmJobBehavior(self.candidate.specific_job)
632+ behavior = IBuildFarmJobBehavior(self.build)
633 behavior.setBuilder(self.builder, slave)
634 d = behavior.getLogFromSlave(self.build.buildqueue_record)
635 return d.addCallback(got_log)
636
637=== modified file 'lib/lp/translations/configure.zcml'
638--- lib/lp/translations/configure.zcml 2013-05-09 06:04:22 +0000
639+++ lib/lp/translations/configure.zcml 2013-11-12 09:11:23 +0000
640@@ -654,7 +654,7 @@
641
642 <adapter
643 provides="lp.buildmaster.interfaces.buildfarmjobbehavior.IBuildFarmJobBehavior"
644- for="lp.translations.model.translationtemplatesbuildjob.TranslationTemplatesBuildJob"
645+ for="lp.translations.model.translationtemplatesbuild.TranslationTemplatesBuild"
646 factory="lp.translations.model.translationtemplatesbuildbehavior.TranslationTemplatesBuildBehavior"
647 />
648
649
650=== modified file 'lib/lp/translations/model/translationtemplatesbuildbehavior.py'
651--- lib/lp/translations/model/translationtemplatesbuildbehavior.py 2013-10-08 11:56:24 +0000
652+++ lib/lp/translations/model/translationtemplatesbuildbehavior.py 2013-11-12 09:11:23 +0000
653@@ -50,7 +50,7 @@
654 def getLogFileName(self):
655 """See `IBuildFarmJob`."""
656 safe_name = re.sub(
657- self.unsafe_chars, '_', self.buildfarmjob.branch.unique_name)
658+ self.unsafe_chars, '_', self.build.branch.unique_name)
659 return "translationtemplates_%s_%d.txt" % (safe_name, self.build.id)
660
661 def dispatchBuildToSlave(self, build_queue_item, logger):
662@@ -66,7 +66,7 @@
663 def got_cache_file(ignored):
664 args = {
665 'arch_tag': self._getDistroArchSeries().architecturetag,
666- 'branch_url': self.buildfarmjob.branch.composePublicURL(),
667+ 'branch_url': self.build.branch.composePublicURL(),
668 }
669
670 filemap = {}
671@@ -88,7 +88,7 @@
672 logger.info(
673 "Starting templates build %s for %s." % (
674 self.getBuildCookie(),
675- self.buildfarmjob.branch.bzr_identity))
676+ self.build.branch.bzr_identity))
677
678 def _readTarball(self, buildqueue, filemap, logger):
679 """Read tarball with generated translation templates from slave."""
680
681=== modified file 'lib/lp/translations/tests/test_translationtemplatesbuildbehavior.py'
682--- lib/lp/translations/tests/test_translationtemplatesbuildbehavior.py 2013-10-08 11:56:24 +0000
683+++ lib/lp/translations/tests/test_translationtemplatesbuildbehavior.py 2013-11-12 09:11:23 +0000
684@@ -11,7 +11,6 @@
685 from testtools.deferredruntest import AsynchronousDeferredRunTest
686 from twisted.internet import defer
687 from zope.component import getUtility
688-from zope.security.proxy import removeSecurityProxy
689
690 from lp.app.interfaces.launchpad import ILaunchpadCelebrities
691 from lp.buildmaster.enums import BuildStatus
692@@ -20,13 +19,11 @@
693 from lp.buildmaster.interfaces.buildfarmjobbehavior import (
694 IBuildFarmJobBehavior,
695 )
696-from lp.buildmaster.model.buildqueue import BuildQueue
697 from lp.buildmaster.tests.mock_slaves import (
698 SlaveTestHelpers,
699 WaitingSlave,
700 )
701 from lp.services.config import config
702-from lp.services.database.interfaces import IStore
703 from lp.services.librarian.interfaces import ILibraryFileAliasSet
704 from lp.services.librarian.utils import copy_and_close
705 from lp.testing import TestCaseWithFactory
706@@ -45,13 +42,13 @@
707 class FakeBuildQueue:
708 """Pretend `BuildQueue`."""
709
710- def __init__(self, behavior):
711+ def __init__(self, behavior, bfjo):
712 """Pretend to be a BuildQueue item for the given build behavior.
713
714 Copies its builder from the behavior object.
715 """
716 self.builder = behavior._builder
717- self.specific_job = behavior.buildfarmjob
718+ self.specific_job = bfjo
719 self.date_started = datetime.datetime.now(pytz.UTC)
720 self.destroySelf = FakeMethod()
721
722@@ -59,7 +56,8 @@
723 class MakeBehaviorMixin(object):
724 """Provide common test methods."""
725
726- def makeBehavior(self, branch=None, use_fake_chroot=True, **kwargs):
727+ def makeBehavior(self, branch=None, use_fake_chroot=True, want_bfjo=False,
728+ **kwargs):
729 """Create a TranslationTemplatesBuildBehavior.
730
731 Anything that might communicate with build slaves and such
732@@ -67,14 +65,17 @@
733 """
734 specific_job = self.factory.makeTranslationTemplatesBuildJob(
735 branch=branch)
736- behavior = IBuildFarmJobBehavior(specific_job)
737+ behavior = IBuildFarmJobBehavior(specific_job.build)
738 slave = WaitingSlave(**kwargs)
739 behavior.setBuilder(self.factory.makeBuilder(), slave)
740 if use_fake_chroot:
741 lf = self.factory.makeLibraryFileAlias()
742 self.layer.txn.commit()
743 behavior._getChroot = lambda: lf
744- return behavior
745+ if want_bfjo:
746+ return behavior, specific_job
747+ else:
748+ return behavior
749
750 def makeProductSeriesWithBranchForTranslation(self):
751 productseries = self.factory.makeProductSeries()
752@@ -97,11 +98,6 @@
753 super(TestTranslationTemplatesBuildBehavior, self).setUp()
754 self.slave_helper = self.useFixture(SlaveTestHelpers())
755
756- def _getBuildQueueItem(self, behavior):
757- """Get `BuildQueue` for an `IBuildFarmJobBehavior`."""
758- job = removeSecurityProxy(behavior.buildfarmjob.job)
759- return IStore(BuildQueue).find(BuildQueue, job=job).one()
760-
761 def test_getLogFileName(self):
762 # Each job has a unique log file name.
763 b1 = self.makeBehavior()
764@@ -110,9 +106,8 @@
765
766 def test_dispatchBuildToSlave_no_chroot_fails(self):
767 # dispatchBuildToSlave will fail if the chroot does not exist.
768- behavior = self.makeBehavior(use_fake_chroot=False)
769- buildqueue_item = self._getBuildQueueItem(behavior)
770-
771+ behavior, buildqueue_item = self.makeBehavior(
772+ use_fake_chroot=False, want_bfjo=True)
773 switch_dbuser(config.builddmaster.dbuser)
774 self.assertRaises(
775 CannotBuild, behavior.dispatchBuildToSlave, buildqueue_item,
776@@ -122,9 +117,7 @@
777 # dispatchBuildToSlave ultimately causes the slave's build
778 # method to be invoked. The slave receives the URL of the
779 # branch it should build from.
780- behavior = self.makeBehavior()
781- buildqueue_item = self._getBuildQueueItem(behavior)
782-
783+ behavior, buildqueue_item = self.makeBehavior(want_bfjo=True)
784 switch_dbuser(config.builddmaster.dbuser)
785 d = behavior.dispatchBuildToSlave(buildqueue_item, logging)
786
787@@ -140,7 +133,7 @@
788 # The slave receives the public http URL for the branch.
789 self.assertEqual(
790 branch_url,
791- behavior.buildfarmjob.branch.composePublicURL())
792+ behavior.build.branch.composePublicURL())
793 return d.addCallback(got_dispatch)
794
795 def test_getChroot(self):
796@@ -162,8 +155,8 @@
797 self.assertEqual(fake_chroot_file, chroot)
798
799 def test_readTarball(self):
800- behavior = self.makeBehavior()
801- buildqueue = FakeBuildQueue(behavior)
802+ behavior, bfjo = self.makeBehavior(want_bfjo=True)
803+ buildqueue = FakeBuildQueue(behavior, bfjo)
804 path = behavior.templates_tarball_path
805 # Poke the file we're expecting into the mock slave.
806 behavior._slave.valid_file_hashes.append(path)
807@@ -182,10 +175,10 @@
808
809 def test_handleStatus_OK(self):
810 # Hopefully, a build will succeed and produce a tarball.
811- behavior = self.makeBehavior(
812- filemap={'translation-templates.tar.gz': 'foo'})
813+ behavior, bfjo = self.makeBehavior(
814+ filemap={'translation-templates.tar.gz': 'foo'}, want_bfjo=True)
815 behavior._uploadTarball = FakeMethod()
816- queue_item = FakeBuildQueue(behavior)
817+ queue_item = FakeBuildQueue(behavior, bfjo)
818 slave = behavior._slave
819
820 d = behavior.dispatchBuildToSlave(queue_item, logging)
821@@ -221,9 +214,10 @@
822
823 def test_handleStatus_failed(self):
824 # Builds may also fail (and produce no tarball).
825- behavior = self.makeBehavior(state='BuildStatus.FAILEDTOBUILD')
826+ behavior, bfjo = self.makeBehavior(
827+ state='BuildStatus.FAILEDTOBUILD', want_bfjo=True)
828 behavior._uploadTarball = FakeMethod()
829- queue_item = FakeBuildQueue(behavior)
830+ queue_item = FakeBuildQueue(behavior, bfjo)
831 slave = behavior._slave
832 d = behavior.dispatchBuildToSlave(queue_item, logging)
833
834@@ -254,9 +248,9 @@
835 def test_handleStatus_notarball(self):
836 # Even if the build status is "OK," absence of a tarball will
837 # not faze the Behavior class.
838- behavior = self.makeBehavior()
839+ behavior, bfjo = self.makeBehavior(want_bfjo=True)
840 behavior._uploadTarball = FakeMethod()
841- queue_item = FakeBuildQueue(behavior)
842+ queue_item = FakeBuildQueue(behavior, bfjo)
843 slave = behavior._slave
844 d = behavior.dispatchBuildToSlave(queue_item, logging)
845
846@@ -284,9 +278,10 @@
847 def test_handleStatus_uploads(self):
848 productseries = self.makeProductSeriesWithBranchForTranslation()
849 branch = productseries.branch
850- behavior = self.makeBehavior(
851- branch=branch, filemap={'translation-templates.tar.gz': 'foo'})
852- queue_item = FakeBuildQueue(behavior)
853+ behavior, bfjo = self.makeBehavior(
854+ branch=branch, filemap={'translation-templates.tar.gz': 'foo'},
855+ want_bfjo=True)
856+ queue_item = FakeBuildQueue(behavior, bfjo)
857 slave = behavior._slave
858
859 d = behavior.dispatchBuildToSlave(queue_item, logging)