Index: buildbot/buildset.py =================================================================== RCS file: /cvsroot/buildbot/buildbot/buildbot/buildset.py,v retrieving revision 1.5 diff -u -r1.5 buildset.py --- buildbot/buildset.py 6 Sep 2006 00:41:54 -0000 1.5 +++ buildbot/buildset.py 4 Apr 2008 00:18:19 -0000 @@ -10,7 +10,7 @@ source.revision), or a build of a certain set of Changes (source.changes=list).""" - def __init__(self, builderNames, source, reason=None, bsid=None): + def __init__(self, builderNames, source, reason=None, bsid=None, scheduler=None): """ @param source: a L{buildbot.sourcestamp.SourceStamp} """ @@ -20,6 +20,7 @@ self.stillHopeful = True self.status = bss = builder.BuildSetStatus(source, reason, builderNames, bsid) + self.scheduler = scheduler def waitUntilSuccess(self): return self.status.waitUntilSuccess() @@ -34,7 +35,7 @@ # create the requests for b in builders: - req = base.BuildRequest(self.reason, self.source, b.name) + req = base.BuildRequest(self.reason, self.source, b.name, self.scheduler) reqs.append((b, req)) self.requests.append(req) d = req.waitUntilFinished() Index: buildbot/scheduler.py =================================================================== RCS file: /cvsroot/buildbot/buildbot/buildbot/scheduler.py,v retrieving revision 1.28 diff -u -r1.28 scheduler.py --- buildbot/scheduler.py 21 Mar 2008 01:32:00 -0000 1.28 +++ buildbot/scheduler.py 4 Apr 2008 00:18:19 -0000 @@ -170,7 +170,8 @@ # create a BuildSet, submit it to the BuildMaster bs = buildset.BuildSet(self.builderNames, - SourceStamp(changes=changes)) + SourceStamp(changes=changes), + scheduler=self) self.submit(bs) def stopService(self): @@ -304,7 +305,7 @@ return d def upstreamBuilt(self, ss): - bs = buildset.BuildSet(self.builderNames, ss) + bs = buildset.BuildSet(self.builderNames, ss, scheduler=self) self.submit(bs) @@ -343,7 +344,7 @@ def doPeriodicBuild(self): bs = buildset.BuildSet(self.builderNames, SourceStamp(branch=self.branch), - self.reason) + self.reason, scheduler=self) self.submit(bs) @@ -501,7 +502,7 @@ # And trigger a build bs = buildset.BuildSet(self.builderNames, SourceStamp(branch=self.branch), - self.reason) + self.reason, scheduler=self) self.submit(bs) def addChange(self, change): @@ -623,7 +624,7 @@ return reason = "'try' job" - bs = buildset.BuildSet(builderNames, ss, reason=reason, bsid=bsid) + bs = buildset.BuildSet(builderNames, ss, reason=reason, bsid=bsid, scheduler=self) self.parent.submitBuildSet(bs) class Try_Userpass(TryBase): @@ -675,7 +676,7 @@ return ss = SourceStamp(branch, revision, patch) reason = "'try' job from user %s" % self.username - bs = buildset.BuildSet(builderNames, ss, reason=reason) + bs = buildset.BuildSet(builderNames, ss, reason=reason, scheduler=self) self.parent.submitBuildSet(bs) # return a remotely-usable BuildSetStatus object @@ -702,7 +703,7 @@ """Trigger this scheduler. Returns a deferred that will fire when the buildset is finished. """ - bs = buildset.BuildSet(self.builderNames, ss) + bs = buildset.BuildSet(self.builderNames, ss, scheduler=self) d = bs.waitUntilFinished() self.submit(bs) return d Index: buildbot/process/base.py =================================================================== RCS file: /cvsroot/buildbot/buildbot/buildbot/process/base.py,v retrieving revision 1.76 diff -u -r1.76 base.py --- buildbot/process/base.py 1 Dec 2007 01:48:58 -0000 1.76 +++ buildbot/process/base.py 4 Apr 2008 00:18:20 -0000 @@ -52,12 +52,14 @@ implements(interfaces.IBuildRequestControl) - def __init__(self, reason, source, builderName=None): + def __init__(self, reason, source, builderName=None, scheduler=None): # TODO: remove the =None on builderName, it is there so I don't have # to change a lot of tests that create BuildRequest objects assert interfaces.ISourceStamp(source, None) self.reason = reason self.source = source + self.scheduler = scheduler + self.start_watchers = [] self.finish_watchers = [] self.status = BuildRequestStatus(source, builderName) @@ -168,6 +170,7 @@ # build a source stamp self.source = requests[0].mergeWith(requests[1:]) self.reason = requests[0].mergeReasons(requests[1:]) + self.scheduler = requests[0].scheduler #self.abandoned = False @@ -261,6 +264,10 @@ self.setProperty("buildnumber", self.build_status.number) self.setProperty("branch", self.source.branch) self.setProperty("revision", self.source.revision) + if self.scheduler is None: + self.setProperty("scheduler", "none") + else: + self.setProperty("scheduler", self.scheduler.name) def setupSlaveBuilder(self, slavebuilder): self.slavebuilder = slavebuilder Index: buildbot/test/test_properties.py =================================================================== RCS file: /cvsroot/buildbot/buildbot/buildbot/test/test_properties.py,v retrieving revision 1.12 diff -u -r1.12 test_properties.py --- buildbot/test/test_properties.py 18 Mar 2008 20:06:12 -0000 1.12 +++ buildbot/test/test_properties.py 4 Apr 2008 00:18:20 -0000 @@ -23,6 +23,8 @@ slave = FakeSlave() def getSlaveCommandVersion(self, command, oldversion=None): return "1.10" +class FakeScheduler: + name = "fakescheduler" class Interpolate(unittest.TestCase): def setUp(self): @@ -52,6 +54,7 @@ cmd = c._interpolateProperties(c.command) self.failUnlessEqual(cmd, ["tar", "czf", "build-47.tar.gz", "source"]) + self.failUnlessEqual(self.build.getProperty("scheduler"), "none") def testWorkdir(self): self.build.setProperty("revision", 47) @@ -117,6 +120,25 @@ self.failUnlessEqual(cmd, ["touch", "build-5", "builder-fakebuilder"]) +class SchedulerTest(unittest.TestCase): + def setUp(self): + self.builder = FakeBuilder() + self.builder_status = builder.BuilderStatus("fakebuilder") + self.builder_status.basedir = "test_properties" + self.builder_status.nextBuildNumber = 5 + rmdirRecursive(self.builder_status.basedir) + os.mkdir(self.builder_status.basedir) + self.build_status = self.builder_status.newBuild() + req = base.BuildRequest("reason", SourceStamp(branch="branch2", + revision=1234), scheduler=FakeScheduler()) + self.build = base.Build([req]) + self.build.setBuilder(self.builder) + self.build.setupStatus(self.build_status) + self.build.setupSlaveBuilder(FakeSlaveBuilder()) + + def testWithScheduler(self): + self.failUnlessEqual(self.build.getProperty("scheduler"), + "fakescheduler") run_config = """ from buildbot.process import factory