Ticket #227: scheduler-property-in-build-patch.txt

File scheduler-property-in-build-patch.txt, 7.5 KB (added by dossy, 4 years ago)

scheduler-property-in-build-patch.txt

Line 
1Index: buildbot/buildset.py
2===================================================================
3RCS file: /cvsroot/buildbot/buildbot/buildbot/buildset.py,v
4retrieving revision 1.5
5diff -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()
34Index: buildbot/scheduler.py
35===================================================================
36RCS file: /cvsroot/buildbot/buildbot/buildbot/scheduler.py,v
37retrieving revision 1.28
38diff -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
105Index: buildbot/process/base.py
106===================================================================
107RCS file: /cvsroot/buildbot/buildbot/buildbot/process/base.py,v
108retrieving revision 1.76
109diff -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
147Index: buildbot/test/test_properties.py
148===================================================================
149RCS file: /cvsroot/buildbot/buildbot/buildbot/test/test_properties.py,v
150retrieving revision 1.12
151diff -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