[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