[Buildbot-commits] buildbot/buildbot/status client.py,1.20,1.21 base.py,1.1,1.2 builder.py,1.63,1.64
Brian Warner
warner at users.sourceforge.net
Wed Aug 17 02:15:39 UTC 2005
Update of /cvsroot/buildbot/buildbot/buildbot/status
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31918/buildbot/status
Modified Files:
client.py base.py builder.py
Log Message:
Revision: arch at buildbot.sf.net--2004/buildbot--dev--0--patch-295
Creator: Brian Warner <warner at monolith.lothar.com>
implement IBuildSetStatus/IBuildRequestStatus, wire them into place
* buildbot/status/builder.py: implement IBuildSetStatus and
IBuildRequestStatus, wire them into place.
* buildbot/buildset.py: same. Add ID, move wait-until-finished
methods into the BuildSetStatus object.
* buildbot/interfaces.py: same
(IStatus.getBuildSets): new method to get pending BuildSets
(IStatusReceiver.buildsetSubmitted): new method which hears about
new BuildSets
* buildbot/master.py (BuildMaster.submitBuildSet): same
* buildbot/process/base.py (BuildRequest): same, replace
waitUntilStarted with subscribe/unsubscribe
* buildbot/process/builder.py (BuilderControl.forceBuild): use
subscribe instead of waitUntilStarted
* buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
for new method
* buildbot/status/client.py (StatusClientPerspective.builderRemoved):
same
* buildbot/test/test_buildreq.py: update for new code
* buildbot/test/test_control.py (Force.testRequest): same
Index: base.py
===================================================================
RCS file: /cvsroot/buildbot/buildbot/buildbot/status/base.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- base.py 17 May 2005 10:14:09 -0000 1.1
+++ base.py 17 Aug 2005 02:15:37 -0000 1.2
@@ -19,6 +19,9 @@
else:
__implements__ = IStatusReceiver,
+ def buildsetSubmitted(self, buildset):
+ pass
+
def builderAdded(self, builderName, builder):
pass
Index: builder.py
===================================================================
RCS file: /cvsroot/buildbot/buildbot/buildbot/status/builder.py,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -d -r1.63 -r1.64
--- builder.py 9 Aug 2005 00:43:35 -0000 1.63
+++ builder.py 17 Aug 2005 02:15:37 -0000 1.64
@@ -554,23 +554,96 @@
else:
__implements__ = interfaces.IBuildSetStatus,
- def __init__(self):
- # TODO
- pass
-
- def setSourceStamp(self, sourceStamp):
- self.source = sourceStamp
- def setReason(self, reason):
+ def __init__(self, source, reason, builderNames, bsid=None):
+ self.source = source
self.reason = reason
+ self.builderNames = builderNames
+ self.id = bsid
+ self.successWatchers = []
+ self.finishedWatchers = []
+ self.failed = False
+ self.finished = False
+
+ def setBuildRequestStatuses(self, buildRequestStatuses):
+ self.buildRequests = buildRequestStatuses
def setResults(self, results):
self.results = results
+ def notifySuccessWatchers(self):
+ for d in self.successWatchers:
+ d.callback(self)
+ self.successWatchers = []
+
+ def notifyFinishedWatchers(self):
+ self.finished = True
+ if not self.failed:
+ self.notifySuccessWatchers()
+ for d in self.finishedWatchers:
+ d.callback(self)
+ self.finishedWatchers = []
+
+ # methods for our clients
+
def getSourceStamp(self):
return self.source
def getReason(self):
return self.reason
def getResults(self):
return self.results
+ def getID(self):
+ return self.id
+
+ def getBuilderNames(self):
+ return self.builderNames
+ def getBuildRequests(self):
+ return self.buildRequests
+ def isFinished(self):
+ return self.finished
+
+ def waitUntilSuccess(self):
+ if self.failed or self.finished:
+ # the deferreds have already fired
+ return defer.succeed(self)
+ d = defer.Deferred()
+ self.successWatchers.append(d)
+ return d
+
+ def waitUntilFinished(self):
+ if self.finished:
+ return defer.succeed(self)
+ d = defer.Deferred()
+ self.finishedWatchers.append(d)
+ return d
+
+class BuildRequestStatus:
+ if implements:
+ implements(interfaces.IBuildRequestStatus)
+ else:
+ __implements__ = interfaces.IBuildRequestStatus,
+
+ def __init__(self, source, builderName):
+ self.source = source
+ self.builderName = builderName
+ self.builds = [] # list of BuildStatus objects
+ self.observers = []
+
+ def buildStarted(self, build):
+ self.builds.append(build)
+ for o in self.observers[:]:
+ o(build)
+
+ # methods called by our clients
+ def getSourceStamp(self):
+ return self.source
+ def getBuilderName(self):
+ return self.builderName
+
+ def subscribe(self, observer):
+ self.observers.append(observer)
+ for b in self.builds:
+ observer(b)
+ def unsubscribe(self, observer):
+ self.observers.remove(observer)
class BuildStepStatus:
@@ -1587,8 +1660,12 @@
self.botmaster = botmaster
self.basedir = basedir
self.watchers = []
+ self.activeBuildSets = []
assert os.path.isdir(basedir)
+
+ # methods called by our clients
+
def getProjectName(self):
return self.botmaster.parent.projectName
def getProjectURL(self):
@@ -1617,6 +1694,9 @@
def getSlave(self, slavename):
return self.botmaster.slaves[slavename].slave_status
+ def getBuildSets(self):
+ return self.activeBuildSets[:]
+
def subscribe(self, target):
self.watchers.append(target)
for name in self.botmaster.builderNames:
@@ -1624,6 +1704,9 @@
def unsubscribe(self, target):
self.watchers.remove(target)
+
+ # methods called by upstream objects
+
def announceNewBuilder(self, target, name, builder_status):
t = target.builderAdded(name, builder_status)
if t:
@@ -1669,3 +1752,9 @@
def prune(self):
for b in self.botmaster.builders.values():
b.builder_status.prune()
+
+ def buildsetSubmitted(self, bss):
+ self.activeBuildSets.append(bss)
+ bss.waitUntilFinished().addCallback(self.activeBuildSets.remove)
+ for t in self.watchers:
+ t.buildsetSubmitted(bss)
Index: client.py
===================================================================
RCS file: /cvsroot/buildbot/buildbot/buildbot/status/client.py,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- client.py 19 Jul 2005 23:12:01 -0000 1.20
+++ client.py 17 Aug 2005 02:15:37 -0000 1.21
@@ -317,6 +317,10 @@
self.subscribed_to_builders.remove(name)
self.client.callRemote("builderRemoved", name)
+ def buildsetSubmitted(self, buildset):
+ # TODO: deliver to client, somehow
+ pass
+
# mode >= builds
def buildStarted(self, name, build):
self.client.callRemote("buildStarted", name, IRemote(build))
More information about the Commits
mailing list