| 1 | Index: buildbot/buildset.py |
|---|
| 2 | =================================================================== |
|---|
| 3 | RCS file: /cvsroot/buildbot/buildbot/buildbot/buildset.py,v |
|---|
| 4 | retrieving revision 1.5 |
|---|
| 5 | diff -u -r1.5 buildset.py |
|---|
| 6 | --- buildbot/buildset.py 6 Sep 2006 00:41:54 -0000 1.5 |
|---|
| 7 | +++ buildbot/buildset.py 4 Apr 2008 00:18:19 -0000 |
|---|
| 8 | @@ -10,7 +10,7 @@ |
|---|
| 9 | source.revision), or a build of a certain set of Changes |
|---|
| 10 | (source.changes=list).""" |
|---|
| 11 | |
|---|
| 12 | - def __init__(self, builderNames, source, reason=None, bsid=None): |
|---|
| 13 | + def __init__(self, builderNames, source, reason=None, bsid=None, scheduler=None): |
|---|
| 14 | """ |
|---|
| 15 | @param source: a L{buildbot.sourcestamp.SourceStamp} |
|---|
| 16 | """ |
|---|
| 17 | @@ -20,6 +20,7 @@ |
|---|
| 18 | self.stillHopeful = True |
|---|
| 19 | self.status = bss = builder.BuildSetStatus(source, reason, |
|---|
| 20 | builderNames, bsid) |
|---|
| 21 | + self.scheduler = scheduler |
|---|
| 22 | |
|---|
| 23 | def waitUntilSuccess(self): |
|---|
| 24 | return self.status.waitUntilSuccess() |
|---|
| 25 | @@ -34,7 +35,7 @@ |
|---|
| 26 | |
|---|
| 27 | # create the requests |
|---|
| 28 | for b in builders: |
|---|
| 29 | - req = base.BuildRequest(self.reason, self.source, b.name) |
|---|
| 30 | + req = base.BuildRequest(self.reason, self.source, b.name, self.scheduler) |
|---|
| 31 | reqs.append((b, req)) |
|---|
| 32 | self.requests.append(req) |
|---|
| 33 | d = req.waitUntilFinished() |
|---|
| 34 | Index: buildbot/scheduler.py |
|---|
| 35 | =================================================================== |
|---|
| 36 | RCS file: /cvsroot/buildbot/buildbot/buildbot/scheduler.py,v |
|---|
| 37 | retrieving revision 1.28 |
|---|
| 38 | diff -u -r1.28 scheduler.py |
|---|
| 39 | --- buildbot/scheduler.py 21 Mar 2008 01:32:00 -0000 1.28 |
|---|
| 40 | +++ buildbot/scheduler.py 4 Apr 2008 00:18:19 -0000 |
|---|
| 41 | @@ -170,7 +170,8 @@ |
|---|
| 42 | |
|---|
| 43 | # create a BuildSet, submit it to the BuildMaster |
|---|
| 44 | bs = buildset.BuildSet(self.builderNames, |
|---|
| 45 | - SourceStamp(changes=changes)) |
|---|
| 46 | + SourceStamp(changes=changes), |
|---|
| 47 | + scheduler=self) |
|---|
| 48 | self.submit(bs) |
|---|
| 49 | |
|---|
| 50 | def stopService(self): |
|---|
| 51 | @@ -304,7 +305,7 @@ |
|---|
| 52 | return d |
|---|
| 53 | |
|---|
| 54 | def upstreamBuilt(self, ss): |
|---|
| 55 | - bs = buildset.BuildSet(self.builderNames, ss) |
|---|
| 56 | + bs = buildset.BuildSet(self.builderNames, ss, scheduler=self) |
|---|
| 57 | self.submit(bs) |
|---|
| 58 | |
|---|
| 59 | |
|---|
| 60 | @@ -343,7 +344,7 @@ |
|---|
| 61 | def doPeriodicBuild(self): |
|---|
| 62 | bs = buildset.BuildSet(self.builderNames, |
|---|
| 63 | SourceStamp(branch=self.branch), |
|---|
| 64 | - self.reason) |
|---|
| 65 | + self.reason, scheduler=self) |
|---|
| 66 | self.submit(bs) |
|---|
| 67 | |
|---|
| 68 | |
|---|
| 69 | @@ -501,7 +502,7 @@ |
|---|
| 70 | # And trigger a build |
|---|
| 71 | bs = buildset.BuildSet(self.builderNames, |
|---|
| 72 | SourceStamp(branch=self.branch), |
|---|
| 73 | - self.reason) |
|---|
| 74 | + self.reason, scheduler=self) |
|---|
| 75 | self.submit(bs) |
|---|
| 76 | |
|---|
| 77 | def addChange(self, change): |
|---|
| 78 | @@ -623,7 +624,7 @@ |
|---|
| 79 | return |
|---|
| 80 | |
|---|
| 81 | reason = "'try' job" |
|---|
| 82 | - bs = buildset.BuildSet(builderNames, ss, reason=reason, bsid=bsid) |
|---|
| 83 | + bs = buildset.BuildSet(builderNames, ss, reason=reason, bsid=bsid, scheduler=self) |
|---|
| 84 | self.parent.submitBuildSet(bs) |
|---|
| 85 | |
|---|
| 86 | class Try_Userpass(TryBase): |
|---|
| 87 | @@ -675,7 +676,7 @@ |
|---|
| 88 | return |
|---|
| 89 | ss = SourceStamp(branch, revision, patch) |
|---|
| 90 | reason = "'try' job from user %s" % self.username |
|---|
| 91 | - bs = buildset.BuildSet(builderNames, ss, reason=reason) |
|---|
| 92 | + bs = buildset.BuildSet(builderNames, ss, reason=reason, scheduler=self) |
|---|
| 93 | self.parent.submitBuildSet(bs) |
|---|
| 94 | |
|---|
| 95 | # return a remotely-usable BuildSetStatus object |
|---|
| 96 | @@ -702,7 +703,7 @@ |
|---|
| 97 | """Trigger this scheduler. Returns a deferred that will fire when the |
|---|
| 98 | buildset is finished. |
|---|
| 99 | """ |
|---|
| 100 | - bs = buildset.BuildSet(self.builderNames, ss) |
|---|
| 101 | + bs = buildset.BuildSet(self.builderNames, ss, scheduler=self) |
|---|
| 102 | d = bs.waitUntilFinished() |
|---|
| 103 | self.submit(bs) |
|---|
| 104 | return d |
|---|
| 105 | Index: buildbot/process/base.py |
|---|
| 106 | =================================================================== |
|---|
| 107 | RCS file: /cvsroot/buildbot/buildbot/buildbot/process/base.py,v |
|---|
| 108 | retrieving revision 1.76 |
|---|
| 109 | diff -u -r1.76 base.py |
|---|
| 110 | --- buildbot/process/base.py 1 Dec 2007 01:48:58 -0000 1.76 |
|---|
| 111 | +++ buildbot/process/base.py 4 Apr 2008 00:18:20 -0000 |
|---|
| 112 | @@ -52,12 +52,14 @@ |
|---|
| 113 | |
|---|
| 114 | implements(interfaces.IBuildRequestControl) |
|---|
| 115 | |
|---|
| 116 | - def __init__(self, reason, source, builderName=None): |
|---|
| 117 | + def __init__(self, reason, source, builderName=None, scheduler=None): |
|---|
| 118 | # TODO: remove the =None on builderName, it is there so I don't have |
|---|
| 119 | # to change a lot of tests that create BuildRequest objects |
|---|
| 120 | assert interfaces.ISourceStamp(source, None) |
|---|
| 121 | self.reason = reason |
|---|
| 122 | self.source = source |
|---|
| 123 | + self.scheduler = scheduler |
|---|
| 124 | + |
|---|
| 125 | self.start_watchers = [] |
|---|
| 126 | self.finish_watchers = [] |
|---|
| 127 | self.status = BuildRequestStatus(source, builderName) |
|---|
| 128 | @@ -168,6 +170,7 @@ |
|---|
| 129 | # build a source stamp |
|---|
| 130 | self.source = requests[0].mergeWith(requests[1:]) |
|---|
| 131 | self.reason = requests[0].mergeReasons(requests[1:]) |
|---|
| 132 | + self.scheduler = requests[0].scheduler |
|---|
| 133 | |
|---|
| 134 | #self.abandoned = False |
|---|
| 135 | |
|---|
| 136 | @@ -261,6 +264,10 @@ |
|---|
| 137 | self.setProperty("buildnumber", self.build_status.number) |
|---|
| 138 | self.setProperty("branch", self.source.branch) |
|---|
| 139 | self.setProperty("revision", self.source.revision) |
|---|
| 140 | + if self.scheduler is None: |
|---|
| 141 | + self.setProperty("scheduler", "none") |
|---|
| 142 | + else: |
|---|
| 143 | + self.setProperty("scheduler", self.scheduler.name) |
|---|
| 144 | |
|---|
| 145 | def setupSlaveBuilder(self, slavebuilder): |
|---|
| 146 | self.slavebuilder = slavebuilder |
|---|
| 147 | Index: buildbot/test/test_properties.py |
|---|
| 148 | =================================================================== |
|---|
| 149 | RCS file: /cvsroot/buildbot/buildbot/buildbot/test/test_properties.py,v |
|---|
| 150 | retrieving revision 1.12 |
|---|
| 151 | diff -u -r1.12 test_properties.py |
|---|
| 152 | --- buildbot/test/test_properties.py 18 Mar 2008 20:06:12 -0000 1.12 |
|---|
| 153 | +++ buildbot/test/test_properties.py 4 Apr 2008 00:18:20 -0000 |
|---|
| 154 | @@ -23,6 +23,8 @@ |
|---|
| 155 | slave = FakeSlave() |
|---|
| 156 | def getSlaveCommandVersion(self, command, oldversion=None): |
|---|
| 157 | return "1.10" |
|---|
| 158 | +class FakeScheduler: |
|---|
| 159 | + name = "fakescheduler" |
|---|
| 160 | |
|---|
| 161 | class Interpolate(unittest.TestCase): |
|---|
| 162 | def setUp(self): |
|---|
| 163 | @@ -52,6 +54,7 @@ |
|---|
| 164 | cmd = c._interpolateProperties(c.command) |
|---|
| 165 | self.failUnlessEqual(cmd, |
|---|
| 166 | ["tar", "czf", "build-47.tar.gz", "source"]) |
|---|
| 167 | + self.failUnlessEqual(self.build.getProperty("scheduler"), "none") |
|---|
| 168 | |
|---|
| 169 | def testWorkdir(self): |
|---|
| 170 | self.build.setProperty("revision", 47) |
|---|
| 171 | @@ -117,6 +120,25 @@ |
|---|
| 172 | self.failUnlessEqual(cmd, |
|---|
| 173 | ["touch", "build-5", "builder-fakebuilder"]) |
|---|
| 174 | |
|---|
| 175 | +class SchedulerTest(unittest.TestCase): |
|---|
| 176 | + def setUp(self): |
|---|
| 177 | + self.builder = FakeBuilder() |
|---|
| 178 | + self.builder_status = builder.BuilderStatus("fakebuilder") |
|---|
| 179 | + self.builder_status.basedir = "test_properties" |
|---|
| 180 | + self.builder_status.nextBuildNumber = 5 |
|---|
| 181 | + rmdirRecursive(self.builder_status.basedir) |
|---|
| 182 | + os.mkdir(self.builder_status.basedir) |
|---|
| 183 | + self.build_status = self.builder_status.newBuild() |
|---|
| 184 | + req = base.BuildRequest("reason", SourceStamp(branch="branch2", |
|---|
| 185 | + revision=1234), scheduler=FakeScheduler()) |
|---|
| 186 | + self.build = base.Build([req]) |
|---|
| 187 | + self.build.setBuilder(self.builder) |
|---|
| 188 | + self.build.setupStatus(self.build_status) |
|---|
| 189 | + self.build.setupSlaveBuilder(FakeSlaveBuilder()) |
|---|
| 190 | + |
|---|
| 191 | + def testWithScheduler(self): |
|---|
| 192 | + self.failUnlessEqual(self.build.getProperty("scheduler"), |
|---|
| 193 | + "fakescheduler") |
|---|
| 194 | |
|---|
| 195 | run_config = """ |
|---|
| 196 | from buildbot.process import factory |
|---|