[Buildbot-commits] buildbot/buildbot scheduler.py,1.4,1.5

Brian Warner warner at users.sourceforge.net
Thu Aug 11 08:22:19 UTC 2005


Update of /cvsroot/buildbot/buildbot/buildbot
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1125/buildbot

Modified Files:
	scheduler.py 
Log Message:
Revision: arch at buildbot.sf.net--2004/buildbot--dev--0--patch-277
Creator:  Brian Warner <warner at monolith.lothar.com>

make 'try' actually work, mostly

	* docs/buildbot.texinfo (try): add --port argument to PB style

	* buildbot/scripts/tryclient.py (SourceStampExtractor): return an
	actual SourceStamp. Still need to extract a branch name, somehow.
	(Try): finish implementing the try client side, still need a UI
	for specifying which builders to use
	(Try.getopt): factor our options/config-file reading
	* buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
	test it
	* buildbot/test/test_vc.py: match SourceStampExtractor change

	* buildbot/scripts/runner.py (Options.opt_verbose): --verbose
	causes the twisted log to be sent to stderr

	* buildbot/scheduler.py (Try_Userpass): implement the PB style

--This line, and those below, will be ignored--
Files to commit:
   <can't compute list>

This list might be incomplete or outdated if editing the log
message was not invoked from an up-to-date changes buffer!


Index: scheduler.py
===================================================================
RCS file: /cvsroot/buildbot/buildbot/buildbot/scheduler.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- scheduler.py	10 Aug 2005 07:06:11 -0000	1.4
+++ scheduler.py	11 Aug 2005 08:22:17 -0000	1.5
@@ -6,8 +6,10 @@
 from twisted.application import service, internet
 from twisted.python import log
 from twisted.protocols import basic
+from twisted.cred import portal, checkers
+from twisted.spread import pb
 
-from buildbot import interfaces, buildset, util
+from buildbot import interfaces, buildset, util, pbutil
 from buildbot.util import now
 from buildbot.status import builder
 from buildbot.twcompat import implements, providedBy
@@ -309,13 +311,17 @@
     if implements:
         implements(interfaces.IScheduler)
     else:
-        __implements__ = interfaces.IScheduler,
+        __implements__ = (interfaces.IScheduler,
+                          service.MultiService.__implements__)
 
     def __init__(self, name, builderNames):
         service.MultiService.__init__(self)
         self.name = name
         self.builderNames = builderNames
 
+    def listBuilderNames(self):
+        return self.builderNames
+
 
 class BadJobfile(Exception):
     pass
@@ -398,3 +404,61 @@
 
         bs = buildset.BuildSet(builderNames, ss)
         self.parent.submitBuildSet(bs)
+
+class Try_Userpass(TryBase):
+    compare_attrs = ["name", "builderNames", "port", "userpass"]
+
+    if implements:
+        implements(portal.IRealm)
+    else:
+        __implements__ = (portal.IRealm,
+                          TryBase.__implements__)
+
+    def __init__(self, name, builderNames, port, userpass):
+        TryBase.__init__(self, name, builderNames)
+        self.port = port
+        self.userpass = userpass
+        c = checkers.InMemoryUsernamePasswordDatabaseDontUse()
+        for user,passwd in self.userpass:
+            c.addUser(user, passwd)
+
+        p = portal.Portal(self)
+        p.registerChecker(c)
+        f = pb.PBServerFactory(p)
+        s = internet.TCPServer(port, f)
+        s.setServiceParent(self)
+
+    def getPort(self):
+        # utility method for tests: figure out which TCP port we just opened.
+        return self.services[0]._port.getHost().port
+
+    def requestAvatar(self, avatarID, mind, interface):
+        log.msg("%s got connection from user %s" % (self, avatarID))
+        assert interface == pb.IPerspective
+        p = Try_Userpass_Perspective(self, avatarID)
+        return (pb.IPerspective, p, lambda: None)
+
+    def submitBuildSet(self, bs):
+        return self.parent.submitBuildSet(bs)
+
+class Try_Userpass_Perspective(pbutil.NewCredPerspective):
+    def __init__(self, parent, username):
+        self.parent = parent
+        self.username = username
+
+    def perspective_try(self, branch, revision, patch, builderNames):
+        log.msg("user %s requesting build on builders %s" % (self.username,
+                                                             builderNames))
+        for b in builderNames:
+            if not b in self.parent.builderNames:
+                log.msg("%s got job with builder %s" % (self, b))
+                log.msg(" but that wasn't in our list: %s"
+                        % (self.parent.builderNames,))
+                return
+        ss = SourceStamp(branch, revision, patch)
+        bs = buildset.BuildSet(builderNames, ss)
+        bss = self.parent.submitBuildSet(bs)
+
+        # TODO: return a remotely-usable BuildSetStatus object
+        return bss
+





More information about the Commits mailing list