Merge lp:~michael.nelson/launchpad/567922-binarypackagebuild-packagebuild-4 into lp:launchpad/db-devel

Proposed by Michael Nelson
Status: Merged
Approved by: Michael Nelson
Approved revision: no longer in the source branch.
Merged at revision: 9405
Proposed branch: lp:~michael.nelson/launchpad/567922-binarypackagebuild-packagebuild-4
Merge into: lp:launchpad/db-devel
Prerequisite: lp:~michael.nelson/launchpad/567922-binarypackagebuild-packagebuild-3
Diff against target: 711 lines (+184/-237) (has conflicts)
11 files modified
BRANCH.TODO (+6/-0)
lib/lp/buildmaster/interfaces/buildfarmjob.py (+40/-34)
lib/lp/buildmaster/model/buildfarmjob.py (+109/-97)
lib/lp/buildmaster/model/packagebuild.py (+8/-71)
lib/lp/buildmaster/tests/test_buildfarmjob.py (+0/-12)
lib/lp/code/model/sourcepackagerecipebuild.py (+4/-4)
lib/lp/soyuz/interfaces/buildfarmbuildjob.py (+2/-2)
lib/lp/soyuz/model/buildpackagejob.py (+6/-6)
lib/lp/soyuz/tests/test_buildpackagejob.py (+3/-3)
lib/lp/translations/model/translationtemplatesbuildjob.py (+3/-4)
lib/lp/translations/tests/test_translationtemplatesbuildjob.py (+3/-4)
Text conflict in lib/lp/buildmaster/interfaces/buildbase.py
Text conflict in lib/lp/buildmaster/model/buildbase.py
Text conflict in lib/lp/buildmaster/tests/test_buildbase.py
To merge this branch: bzr merge lp:~michael.nelson/launchpad/567922-binarypackagebuild-packagebuild-4
Reviewer Review Type Date Requested Status
Abel Deuring (community) code Approve
Review via email: mp+24356@code.launchpad.net

Description of the change

This branch is part of a pipeline for

https://blueprints.edge.launchpad.net/soyuz/+spec/build-generalisation
https://dev.launchpad.net/LEP/GeneralBuildHistories

Overview
========
The changes in this branch just do a bit of cleaning up after the refactoring of the past 3 branches.

The previous 3 branches added all the IBuildBase attributes and methods to IBuildFarmJob/IPackageJob in preparation for switching our build infrastructure to the new build tables (similar, but not exactly like http://people.ubuntu.com/~wgrant/launchpad/buildfarm/new-build-model-again.png)

This branch does some retrospective cleaning up.

Details
=======
The previous branches update the IBuildFarmJob as planned so that new database-backed BuildFarmJob/PackageBuild objects can be created and tested while still ensuring that existing classes that use IBuildFarmJob implementations and expect them to be non-database objects providing functionality still pass their tests. But it was getting complicated to see these two different ways in which IBuildFarmJob was expected to behave (see has_concrete_build_farm_job that is removed in this branch).

So, to simplify the ongoing refactoring work, I split out IBuildFarmJobOld from IBuildFarmJob, where IBuildFarmJobOld is the exact interface that existing classes currently expect, while IBuildFarmJob is a superset representing the new database-backed objects. I also added a note in the BRANCH.TODO that these *Old classes will be removed before the branch is landed.

This allowed IBuildFarmJob and IPackageBuild to be simplified, as they no longer need to worry about whether they are representing a database-backed object or not.

This branch is dependent on the pending schema patch in a previous branch.

To test
=======

First update the test db schema (required as the db patch still needs to be updated to remove the old build table):
psql launchpad_ftest_template -f database/schema/pending/michaeln-build-generalisation.sql
bin/py database/schema/security.py -d launchpad_ftest_template

And then either:
bin/test -vvt test_*build (lots of tests), or for a quicker run:
bin/test -vvt test_packagebuild -t test_buildfarmjob -t doc/build.txt -t test_buildqueue -t test_sourcepackagerecipebuild -t test_buildpackagejob -t test_buildbase

(there is one intentional test failure in test_buildfarmjob for a method that can't be implemented until I switch BinaryPackageBuild to the new delegation model of IPackageBuild/IBuildFarmJob).

The next branch will (finally) the work to switch BinaryPackageBuild from the old build table to the new buildfarmjob/packagebuild/binarypackagebuild tables.

To post a comment you must log in.
Revision history for this message
Abel Deuring (adeuring) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'BRANCH.TODO'
2--- BRANCH.TODO 2010-05-05 15:48:49 +0000
3+++ BRANCH.TODO 2010-05-05 15:48:52 +0000
4@@ -2,6 +2,12 @@
5 # landing. There is a test to ensure it is empty in trunk. If there is
6 # stuff still here when you are ready to land, the items should probably
7 # be converted to bugs so they can be scheduled.
8+The following temporary classes need to be removed before this branch can
9+land:
10+ * BuildFarmJobOld/IBuildFarmJobOld (update the classes using this to
11+ use the new db versions).
12+ * BuildFarmJobOldDerived (move queue-methods onto BuildFarmJobDerived).
13+ * BuildBase.
14
15 The static methods on IBuildFarmJob/IPackageBuild should be reverted
16 to normal methods once all *Build classes have transitioned to the new
17
18=== modified file 'lib/lp/buildmaster/interfaces/buildfarmjob.py'
19--- lib/lp/buildmaster/interfaces/buildfarmjob.py 2010-05-05 15:48:49 +0000
20+++ lib/lp/buildmaster/interfaces/buildfarmjob.py 2010-05-05 15:48:52 +0000
21@@ -9,6 +9,7 @@
22
23 __all__ = [
24 'IBuildFarmJob',
25+ 'IBuildFarmJobOld',
26 'IBuildFarmJobSource',
27 'IBuildFarmJobDerived',
28 'BuildFarmJobType',
29@@ -59,11 +60,18 @@
30 """)
31
32
33-class IBuildFarmJob(Interface):
34- """Operations that jobs for the build farm must implement."""
35-
36- id = Attribute('The build farm job ID.')
37-
38+class IBuildFarmJobOld(Interface):
39+ """Defines the previous non-database BuildFarmJob interface.
40+
41+ This interface is still used by the temporary build queue related
42+ classes (TranslationTemplatesBuildJob, SourcePackageRecipeBuildJob
43+ and BuildPackageJob).
44+
45+ XXX 2010-04-28 michael.nelson bug=567922
46+ This class can be removed (merging all the attributes directly into
47+ IBuildFarmJob) once all the corresponding *Build classes and the
48+ BuildQueue have been transitioned to the new database schema.
49+ """
50 processor = Reference(
51 IProcessor, title=_("Processor"), required=False, readonly=True,
52 description=_(
53@@ -77,6 +85,33 @@
54 "This should be None for job types that do not care whether "
55 "they run virtualized."))
56
57+ def score():
58+ """Calculate a job score appropriate for the job type in question."""
59+
60+ def getLogFileName():
61+ """The preferred file name for this job's log."""
62+
63+ def getName():
64+ """An appropriate name for this job."""
65+
66+ def getTitle():
67+ """A string to identify and describe the job to users."""
68+
69+ def jobStarted():
70+ """'Job started' life cycle event, handle as appropriate."""
71+
72+ def jobReset():
73+ """'Job reset' life cycle event, handle as appropriate."""
74+
75+ def jobAborted():
76+ """'Job aborted' life cycle event, handle as appropriate."""
77+
78+
79+class IBuildFarmJob(IBuildFarmJobOld):
80+ """Operations that jobs for the build farm must implement."""
81+
82+ id = Attribute('The build farm job ID.')
83+
84 date_created = exported(
85 Datetime(
86 title=_("Date created"), required=True, readonly=True,
87@@ -142,37 +177,8 @@
88 vocabulary=BuildFarmJobType,
89 description=_("The specific type of job."))
90
91- # XXX 2010-04-21 michael.nelson bug=567922. This property
92- # can be removed once all *Build classes use the concrete
93- # BuildFarmJob.
94- has_concrete_build_farm_job = Bool(
95- title=_('Has concrete build farm job'), required=False,
96- readonly=True, description=_(
97- 'Whether this instance is or has a concrete build farm job.'))
98-
99 title = exported(TextLine(title=_("Title"), required=False))
100
101- def score():
102- """Calculate a job score appropriate for the job type in question."""
103-
104- def getLogFileName():
105- """The preferred file name for this job's log."""
106-
107- def getName():
108- """An appropriate name for this job."""
109-
110- def getTitle():
111- """A string to identify and describe the job to users."""
112-
113- def jobStarted():
114- """'Job started' life cycle event, handle as appropriate."""
115-
116- def jobReset():
117- """'Job reset' life cycle event, handle as appropriate."""
118-
119- def jobAborted():
120- """'Job aborted' life cycle event, handle as appropriate."""
121-
122 def makeJob():
123 """Create the specific job relating this with an lp.services.job.
124
125
126=== modified file 'lib/lp/buildmaster/model/buildfarmjob.py'
127--- lib/lp/buildmaster/model/buildfarmjob.py 2010-05-05 15:48:49 +0000
128+++ lib/lp/buildmaster/model/buildfarmjob.py 2010-05-05 15:48:52 +0000
129@@ -5,6 +5,8 @@
130 __all__ = [
131 'BuildFarmJob',
132 'BuildFarmJobDerived',
133+ 'BuildFarmJobOld',
134+ 'BuildFarmJobOldDerived',
135 ]
136
137
138@@ -15,7 +17,6 @@
139 import hashlib
140 import pytz
141
142-from storm.info import get_obj_info
143 from storm.locals import Bool, DateTime, Int, Reference, Storm
144 from storm.store import Store
145
146@@ -32,13 +33,116 @@
147 from lp.buildmaster.interfaces.buildbase import BuildStatus
148 from lp.buildmaster.interfaces.buildfarmjob import (
149 BuildFarmJobType, IBuildFarmJob, IBuildFarmJobDerived,
150- IBuildFarmJobSource)
151+ IBuildFarmJobOld, IBuildFarmJobSource)
152 from lp.buildmaster.interfaces.buildqueue import IBuildQueueSet
153
154
155-class BuildFarmJob(Storm):
156+class BuildFarmJobOld:
157+ """See `IBuildFarmJobOld`."""
158+ implements(IBuildFarmJobOld)
159+ processor = None
160+ virtualized = None
161+
162+ def score(self):
163+ """See `IBuildFarmJobOld`."""
164+ raise NotImplementedError
165+
166+ def getLogFileName(self):
167+ """See `IBuildFarmJobOld`."""
168+ return 'buildlog.txt'
169+
170+ def getName(self):
171+ """See `IBuildFarmJobOld`."""
172+ raise NotImplementedError
173+
174+ def getTitle(self):
175+ """See `IBuildFarmJobOld`."""
176+ raise NotImplementedError
177+
178+ def makeJob(self):
179+ """See `IBuildFarmJobOld`."""
180+ raise NotImplementedError
181+
182+ def jobStarted(self):
183+ """See `IBuildFarmJobOld`."""
184+ pass
185+
186+ def jobReset(self):
187+ """See `IBuildFarmJobOld`."""
188+ pass
189+
190+ def jobAborted(self):
191+ """See `IBuildFarmJobOld`."""
192+ pass
193+
194+
195+class BuildFarmJobOldDerived:
196+ delegates(IBuildFarmJobOld, context='build_farm_job')
197+
198+ def __init__(self, *args, **kwargs):
199+ """Ensure the instance to which we delegate is set on creation."""
200+ self._set_build_farm_job()
201+ super(BuildFarmJobOldDerived, self).__init__(*args, **kwargs)
202+
203+ def __storm_loaded__(self):
204+ """Set the attribute for our IBuildFarmJob delegation.
205+
206+ This is needed here as __init__() is not called when a storm object
207+ is loaded from the database.
208+ """
209+ self._set_build_farm_job()
210+
211+ def _set_build_farm_job(self):
212+ """Set the build farm job to which we will delegate.
213+
214+ Deriving classes must set the build_farm_job attribute for the
215+ delegation.
216+ """
217+ raise NotImplementedError
218+
219+ @classmethod
220+ def getByJob(cls, job):
221+ """See `IBuildFarmJobDerived`."""
222+ store = getUtility(IStoreSelector).get(MAIN_STORE, DEFAULT_FLAVOR)
223+ return store.find(cls, cls.job == job).one()
224+
225+ @staticmethod
226+ def addCandidateSelectionCriteria(processor, virtualized):
227+ """See `IBuildFarmJobDerived`."""
228+ return ('')
229+
230+ @staticmethod
231+ def postprocessCandidate(job, logger):
232+ """See `IBuildFarmJobDerived`."""
233+ return True
234+
235+ def generateSlaveBuildCookie(self):
236+ """See `IBuildFarmJobDerived`."""
237+ buildqueue = getUtility(IBuildQueueSet).getByJob(self.job)
238+
239+ if buildqueue.processor is None:
240+ processor = '*'
241+ else:
242+ processor = repr(buildqueue.processor.id)
243+
244+ contents = ';'.join([
245+ repr(removeSecurityProxy(self.job).id),
246+ self.job.date_created.isoformat(),
247+ repr(buildqueue.id),
248+ buildqueue.job_type.name,
249+ processor,
250+ self.getName(),
251+ ])
252+
253+ return hashlib.sha1(contents).hexdigest()
254+
255+ def cleanUp(self):
256+ """See `IBuildFarmJob`."""
257+ Store.of(self).remove(self)
258+
259+
260+class BuildFarmJob(BuildFarmJobOld, Storm):
261 """A base implementation for `IBuildFarmJob` classes."""
262-
263 __storm_table__ = 'BuildFarmJob'
264
265 implements(IBuildFarmJob)
266@@ -76,6 +180,7 @@
267
268 def __init__(self, job_type, status=BuildStatus.NEEDSBUILD,
269 processor=None, virtualized=None):
270+ super(BuildFarmJob, self).__init__()
271 self.job_type, self.status, self.process, self.virtualized = (
272 job_type,
273 status,
274@@ -95,40 +200,16 @@
275 return build_farm_job
276
277 @property
278- def has_concrete_build_farm_job(self):
279- """See `IBuildFarmJob`."""
280- # Check if the object has been added to the store.
281- return get_obj_info(self).get('store') is not None
282-
283- @property
284 def title(self):
285 """See `IBuildFarmJob`."""
286 return self.job_type.title
287
288- def score(self):
289- """See `IBuildFarmJob`."""
290- raise NotImplementedError
291-
292- def getLogFileName(self):
293- """See `IBuildFarmJob`."""
294- return 'buildlog.txt'
295-
296- def getName(self):
297- """See `IBuildFarmJob`."""
298- raise NotImplementedError
299-
300- def getTitle(self):
301- """See `IBuildFarmJob`."""
302- raise NotImplementedError
303-
304 def makeJob(self):
305 """See `IBuildFarmJob`."""
306 raise NotImplementedError
307
308 def jobStarted(self):
309 """See `IBuildFarmJob`."""
310- if not self.has_concrete_build_farm_job:
311- return
312 self.status = BuildStatus.BUILDING
313 # The build started, set the start time if not set already.
314 self.date_started = UTC_NOW
315@@ -137,8 +218,6 @@
316
317 def jobReset(self):
318 """See `IBuildFarmJob`."""
319- if not self.has_concrete_build_farm_job:
320- return
321 self.status = BuildStatus.NEEDSBUILD
322 self.date_started = None
323
324@@ -186,70 +265,3 @@
325 """See `IBuildFarmJobDerived`."""
326 implements(IBuildFarmJobDerived)
327 delegates(IBuildFarmJob, context='build_farm_job')
328-
329- def __init__(self, *args, **kwargs):
330- """Ensure the instance to which we delegate is set on creation."""
331- self._set_build_farm_job()
332- super(BuildFarmJobDerived, self).__init__(*args, **kwargs)
333-
334- def __storm_loaded__(self):
335- """Set the attribute for our IBuildFarmJob delegation.
336-
337- This is needed here as __init__() is not called when a storm object
338- is loaded from the database.
339- """
340- self._set_build_farm_job()
341-
342- def _set_build_farm_job(self):
343- """Set the default build farm job to which we will delegate.
344-
345- Sub-classes should override as required.
346-
347- XXX 2010-04-27 michael.nelson bug=570939
348- This only exists because certain classes assume that
349- BuildFarmJob/PackageBuild are in-memory objects that simply
350- provide methods to update the associated builds.
351- We can remove it once the above bug is completed.
352- """
353- self.build_farm_job = BuildFarmJob(
354- job_type=BuildFarmJobType.PACKAGEBUILD)
355-
356- @classmethod
357- def getByJob(cls, job):
358- """See `IBuildFarmJobDerived`."""
359- store = getUtility(IStoreSelector).get(MAIN_STORE, DEFAULT_FLAVOR)
360- return store.find(cls, cls.job == job).one()
361-
362- @staticmethod
363- def addCandidateSelectionCriteria(processor, virtualized):
364- """See `IBuildFarmJobDerived`."""
365- return ('')
366-
367- @staticmethod
368- def postprocessCandidate(job, logger):
369- """See `IBuildFarmJobDerived`."""
370- return True
371-
372- def generateSlaveBuildCookie(self):
373- """See `IBuildFarmJobDerived`."""
374- buildqueue = getUtility(IBuildQueueSet).getByJob(self.job)
375-
376- if buildqueue.processor is None:
377- processor = '*'
378- else:
379- processor = repr(buildqueue.processor.id)
380-
381- contents = ';'.join([
382- repr(removeSecurityProxy(self.job).id),
383- self.job.date_created.isoformat(),
384- repr(buildqueue.id),
385- buildqueue.job_type.name,
386- processor,
387- self.getName(),
388- ])
389-
390- return hashlib.sha1(contents).hexdigest()
391-
392- def cleanUp(self):
393- """See `IBuildFarmJob`."""
394- Store.of(self).remove(self)
395
396=== modified file 'lib/lp/buildmaster/model/packagebuild.py'
397--- lib/lp/buildmaster/model/packagebuild.py 2010-05-05 15:48:49 +0000
398+++ lib/lp/buildmaster/model/packagebuild.py 2010-05-05 15:48:52 +0000
399@@ -13,7 +13,6 @@
400 from zope.component import getUtility
401 from zope.interface import classProvides, implements
402
403-from canonical.database.constants import UTC_NOW
404 from canonical.database.enumcol import DBEnum
405 from canonical.launchpad.browser.librarian import (
406 ProxiedLibraryFileAlias)
407@@ -59,19 +58,14 @@
408 policy_name = 'buildd'
409 distribution = None
410
411- def __init__(self, build):
412- """Construct a PackageBuild.
413-
414- XXX 2010-04-21 michael.nelson bug=570939
415- This initialiser is only used by IBuildFarmJobDerived classes
416- that are not yet expecting a concrete BuildFarmJob (and so are
417- expecting to pass in the build to which they refer, such as
418- BinaryPackageBuild/BuildPackageJob, SPRecipeBuild/SPRecipeBuildJob
419- and TranslationTemplatesBuild). Once they have been updated it
420- can be updated for use by new below.
421- """
422+ def __init__(self, build_farm_job, archive, pocket,
423+ dependencies=None):
424+ """Construct a PackageBuild."""
425 super(PackageBuild, self).__init__()
426- self.build = build
427+ self.build_farm_job = build_farm_job
428+ self.archive = archive
429+ self.pocket = pocket
430+ self.dependencies = dependencies
431
432 @classmethod
433 def new(cls, job_type, virtualized, archive, pocket,
434@@ -84,67 +78,10 @@
435 build_farm_job = getUtility(IBuildFarmJobSource).new(
436 job_type, status, processor, virtualized)
437
438- # Update the __init__ and call instead once all callsites use
439- # instances of this class as a concrete class.
440- package_build = cls(None)
441- package_build.build_farm_job = build_farm_job
442- package_build.archive = archive
443- package_build.pocket = pocket
444- package_build.dependencies = dependencies
445+ package_build = cls(build_farm_job, archive, pocket, dependencies)
446 store.add(package_build)
447 return package_build
448
449- def getTitle(self):
450- """See `IBuildFarmJob`.
451-
452- XXX 2010-04-21 michael.nelson bug=567922. This method
453- can be removed once all *Build classes use the concrete
454- BuildFarmJob.
455- """
456- if self.has_concrete_build_farm_job:
457- return self.build_farm_job.getTitle()
458-
459- return self.build.title
460-
461- def jobStarted(self):
462- """See `IBuildFarmJob`.
463-
464- XXX 2010-04-21 michael.nelson bug=567922. This method
465- can be removed once all *Build classes use the concrete
466- BuildFarmJob.
467- """
468- if self.has_concrete_build_farm_job:
469- return self.build_farm_job.jobStarted()
470-
471- self.build.buildstate = BuildStatus.BUILDING
472- # The build started, set the start time if not set already.
473- if self.build.date_first_dispatched is None:
474- self.build.date_first_dispatched = UTC_NOW
475-
476- def jobReset(self):
477- """See `IBuildFarmJob`.
478-
479- XXX 2010-04-21 michael.nelson bug=567922. This method
480- can be removed once all *Build classes use the concrete
481- BuildFarmJob.
482- """
483- if self.has_concrete_build_farm_job:
484- return self.build_farm_job.jobReset()
485-
486- self.build.buildstate = BuildStatus.NEEDSBUILD
487-
488- def jobAborted(self):
489- """See `IBuildFarmJob`.
490-
491- XXX 2010-04-21 michael.nelson bug=567922. This method
492- can be removed once all *Build classes use the concrete
493- BuildFarmJob.
494- """
495- if self.has_concrete_build_farm_job:
496- return self.build_farm_job.jobAborted()
497-
498- self.build.buildstate = BuildStatus.NEEDSBUILD
499-
500 @property
501 def current_component(self):
502 """See `IPackageBuild`."""
503
504=== modified file 'lib/lp/buildmaster/tests/test_buildfarmjob.py'
505--- lib/lp/buildmaster/tests/test_buildfarmjob.py 2010-05-05 15:48:49 +0000
506+++ lib/lp/buildmaster/tests/test_buildfarmjob.py 2010-05-05 15:48:52 +0000
507@@ -34,18 +34,6 @@
508 return getUtility(IBuildFarmJobSource).new(
509 job_type=BuildFarmJobType.PACKAGEBUILD)
510
511- def test_has_concrete_build_farm_job(self):
512- # This temporary property returns true if the instance
513- # corresponds to a concrete database record, even if
514- # db updates have not yet been flushed, and false
515- # otherwise.
516- concrete_build_farm_job = self.makeBuildFarmJob()
517- self.failUnless(concrete_build_farm_job.has_concrete_build_farm_job)
518-
519- mem_build_farm_job = BuildFarmJob(
520- job_type=BuildFarmJobType.PACKAGEBUILD)
521- self.failIf(mem_build_farm_job.has_concrete_build_farm_job)
522-
523 def test_providesInterface(self):
524 # BuildFarmJob provides IBuildFarmJob
525 self.assertProvides(self.build_farm_job, IBuildFarmJob)
526
527=== modified file 'lib/lp/code/model/sourcepackagerecipebuild.py'
528--- lib/lp/code/model/sourcepackagerecipebuild.py 2010-05-05 15:48:49 +0000
529+++ lib/lp/code/model/sourcepackagerecipebuild.py 2010-05-05 15:48:52 +0000
530@@ -27,8 +27,7 @@
531 from lp.buildmaster.interfaces.buildfarmjob import BuildFarmJobType
532 from lp.buildmaster.model.buildbase import BuildBase
533 from lp.buildmaster.model.buildqueue import BuildQueue
534-from lp.buildmaster.model.buildfarmjob import BuildFarmJobDerived
535-from lp.buildmaster.model.packagebuild import PackageBuild
536+from lp.buildmaster.model.buildfarmjob import BuildFarmJobOldDerived
537 from lp.code.interfaces.sourcepackagerecipebuild import (
538 ISourcePackageRecipeBuildJob, ISourcePackageRecipeBuildJobSource,
539 ISourcePackageRecipeBuild, ISourcePackageRecipeBuildSource)
540@@ -37,6 +36,7 @@
541 from lp.soyuz.adapters.archivedependencies import (
542 default_component_dependency_name,)
543 from lp.soyuz.interfaces.component import IComponentSet
544+from lp.soyuz.model.buildfarmbuildjob import BuildFarmBuildJob
545 from lp.soyuz.model.sourcepackagerelease import SourcePackageRelease
546
547
548@@ -199,7 +199,7 @@
549 return
550
551
552-class SourcePackageRecipeBuildJob(BuildFarmJobDerived, Storm):
553+class SourcePackageRecipeBuildJob(BuildFarmJobOldDerived, Storm):
554 classProvides(ISourcePackageRecipeBuildJobSource)
555 implements(ISourcePackageRecipeBuildJob)
556
557@@ -226,7 +226,7 @@
558 """Setup the IBuildFarmJob delegate.
559
560 We override this to provide a delegate specific to package builds."""
561- self.build_farm_job = PackageBuild(self.build)
562+ self.build_farm_job = BuildFarmBuildJob(self.build)
563
564 @classmethod
565 def new(cls, build, job):
566
567=== modified file 'lib/lp/soyuz/interfaces/buildfarmbuildjob.py'
568--- lib/lp/soyuz/interfaces/buildfarmbuildjob.py 2010-04-09 15:46:09 +0000
569+++ lib/lp/soyuz/interfaces/buildfarmbuildjob.py 2010-05-05 15:48:52 +0000
570@@ -10,11 +10,11 @@
571
572 from canonical.launchpad import _
573 from lazr.restful.fields import Reference
574-from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJob
575+from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJobOld
576 from lp.soyuz.interfaces.binarypackagebuild import IBinaryPackageBuild
577
578
579-class IBuildFarmBuildJob(IBuildFarmJob):
580+class IBuildFarmBuildJob(IBuildFarmJobOld):
581 """An `IBuildFarmJob` with an `IBuild` reference."""
582 build = Reference(
583 IBinaryPackageBuild, title=_("Build"), required=True, readonly=True,
584
585=== modified file 'lib/lp/soyuz/model/buildpackagejob.py'
586--- lib/lp/soyuz/model/buildpackagejob.py 2010-05-05 15:48:49 +0000
587+++ lib/lp/soyuz/model/buildpackagejob.py 2010-05-05 15:48:52 +0000
588@@ -18,17 +18,17 @@
589 from canonical.database.sqlbase import sqlvalues
590
591 from lp.buildmaster.interfaces.buildbase import BuildStatus
592-from lp.buildmaster.model.buildfarmjob import BuildFarmJobDerived
593-from lp.buildmaster.model.packagebuild import PackageBuild
594+from lp.buildmaster.model.buildfarmjob import BuildFarmJobOldDerived
595 from lp.registry.interfaces.sourcepackage import SourcePackageUrgency
596 from lp.registry.interfaces.pocket import PackagePublishingPocket
597 from lp.soyuz.interfaces.archive import ArchivePurpose
598 from lp.soyuz.interfaces.binarypackagebuild import IBinaryPackageBuildSet
599 from lp.soyuz.interfaces.buildpackagejob import IBuildPackageJob
600 from lp.soyuz.interfaces.publishing import PackagePublishingStatus
601-
602-
603-class BuildPackageJob(BuildFarmJobDerived, Storm):
604+from lp.soyuz.model.buildfarmbuildjob import BuildFarmBuildJob
605+
606+
607+class BuildPackageJob(BuildFarmJobOldDerived, Storm):
608 """See `IBuildPackageJob`."""
609 implements(IBuildPackageJob)
610
611@@ -49,7 +49,7 @@
612 """Setup the IBuildFarmJob delegate.
613
614 We override this to provide a delegate specific to package builds."""
615- self.build_farm_job = PackageBuild(self.build)
616+ self.build_farm_job = BuildFarmBuildJob(self.build)
617
618 def score(self):
619 """See `IBuildPackageJob`."""
620
621=== modified file 'lib/lp/soyuz/tests/test_buildpackagejob.py'
622--- lib/lp/soyuz/tests/test_buildpackagejob.py 2010-04-20 14:30:00 +0000
623+++ lib/lp/soyuz/tests/test_buildpackagejob.py 2010-05-05 15:48:52 +0000
624@@ -13,9 +13,9 @@
625
626 from lp.buildmaster.interfaces.buildbase import BuildStatus
627 from lp.buildmaster.interfaces.builder import IBuilderSet
628-from lp.buildmaster.interfaces.buildfarmjob import (
629- IBuildFarmJob, IBuildFarmJobDerived)
630+from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJobDerived
631 from lp.soyuz.interfaces.archive import ArchivePurpose
632+from lp.soyuz.interfaces.buildfarmbuildjob import IBuildFarmBuildJob
633 from lp.soyuz.interfaces.buildpackagejob import IBuildPackageJob
634 from lp.soyuz.interfaces.publishing import PackagePublishingStatus
635 from lp.soyuz.model.binarypackagebuild import BinaryPackageBuild
636@@ -234,7 +234,7 @@
637 build, bq = find_job(self, 'gcc', '386')
638 build_farm_job = bq.specific_job
639 self.assertProvides(build_farm_job, IBuildPackageJob)
640- self.assertProvides(build_farm_job, IBuildFarmJob)
641+ self.assertProvides(build_farm_job, IBuildFarmBuildJob)
642 self.assertProvides(build_farm_job, IBuildFarmJobDerived)
643
644
645
646=== modified file 'lib/lp/translations/model/translationtemplatesbuildjob.py'
647--- lib/lp/translations/model/translationtemplatesbuildjob.py 2010-05-05 15:48:49 +0000
648+++ lib/lp/translations/model/translationtemplatesbuildjob.py 2010-05-05 15:48:52 +0000
649@@ -23,7 +23,7 @@
650 from lp.buildmaster.interfaces.buildfarmjob import BuildFarmJobType
651 from lp.buildmaster.interfaces.buildqueue import IBuildQueueSet
652 from lp.buildmaster.model.buildfarmjob import (
653- BuildFarmJob, BuildFarmJobDerived)
654+ BuildFarmJobOld, BuildFarmJobOldDerived)
655 from lp.buildmaster.model.buildqueue import BuildQueue
656 from lp.code.interfaces.branchjob import IRosettaUploadJobSource
657 from lp.buildmaster.interfaces.buildfarmbranchjob import IBuildFarmBranchJob
658@@ -33,7 +33,7 @@
659 from lp.translations.pottery.detect_intltool import is_intltool_structure
660
661
662-class TranslationTemplatesBuildJob(BuildFarmJobDerived, BranchJobDerived):
663+class TranslationTemplatesBuildJob(BuildFarmJobOldDerived, BranchJobDerived):
664 """An `IBuildFarmJob` implementation that generates templates.
665
666 Implementation-wise, this is actually a `BranchJob`.
667@@ -55,8 +55,7 @@
668
669 We override this to provide a non-database delegate that simply
670 provides required functionality to the queue system."""
671- self.build_farm_job = BuildFarmJob(
672- job_type=BuildFarmJobType.TRANSLATIONTEMPLATESBUILD)
673+ self.build_farm_job = BuildFarmJobOld()
674
675 def score(self):
676 """See `IBuildFarmJob`."""
677
678=== modified file 'lib/lp/translations/tests/test_translationtemplatesbuildjob.py'
679--- lib/lp/translations/tests/test_translationtemplatesbuildjob.py 2010-04-30 03:10:17 +0000
680+++ lib/lp/translations/tests/test_translationtemplatesbuildjob.py 2010-05-05 15:48:52 +0000
681@@ -9,7 +9,6 @@
682 from zope.event import notify
683 from zope.security.proxy import removeSecurityProxy
684
685-from sqlobject import SQLObjectNotFound
686 from storm.store import Store
687
688 from canonical.launchpad.webapp.testing import verifyObject
689@@ -20,7 +19,7 @@
690 from lp.testing import TestCaseWithFactory
691
692 from lp.buildmaster.interfaces.buildfarmjob import (
693- IBuildFarmJob, IBuildFarmJobDerived)
694+ IBuildFarmJobOld, IBuildFarmJobDerived)
695 from lp.buildmaster.interfaces.buildqueue import IBuildQueueSet
696 from lp.buildmaster.model.buildqueue import BuildQueue
697 from lp.code.interfaces.branch import IBranchSet
698@@ -54,11 +53,11 @@
699 self.specific_job = self.jobset.create(self.branch)
700
701 def test_new_TranslationTemplatesBuildJob(self):
702- # TranslationTemplateBuildJob implements IBuildFarmJob,
703+ # TranslationTemplateBuildJob implements IBuildFarmJobOld,
704 # IBuildFarmJobDerived, and IBranchJob.
705 verifyObject(IBranchJob, self.specific_job)
706 verifyObject(IBuildFarmJobDerived, self.specific_job)
707- verifyObject(IBuildFarmJob, self.specific_job)
708+ verifyObject(IBuildFarmJobOld, self.specific_job)
709
710 # Each of these jobs knows the branch it will operate on.
711 self.assertEqual(self.branch, self.specific_job.branch)

Subscribers

People subscribed via source and target branches

to status/vote changes: