[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