[cig-commits] r7039 - in cs/buildbot/trunk/buildbot: . changes
status
leif at geodynamics.org
leif at geodynamics.org
Fri Jun 1 14:59:45 PDT 2007
Author: leif
Date: 2007-06-01 14:59:44 -0700 (Fri, 01 Jun 2007)
New Revision: 7039
Modified:
cs/buildbot/trunk/buildbot/categories.py
cs/buildbot/trunk/buildbot/changes/changes.py
cs/buildbot/trunk/buildbot/config.py
cs/buildbot/trunk/buildbot/lines.py
cs/buildbot/trunk/buildbot/master.py
cs/buildbot/trunk/buildbot/projects.py
cs/buildbot/trunk/buildbot/status/builder.py
cs/buildbot/trunk/buildbot/status/html.py
Log:
Fixed pickling by cleaning-up some of the confused changes I made
early-on (r5909). There is no need for the core BuildBot engine to
know about Projects or any of the other classes I use to generate the
configuration.
Modified: cs/buildbot/trunk/buildbot/categories.py
===================================================================
--- cs/buildbot/trunk/buildbot/categories.py 2007-06-01 21:55:17 UTC (rev 7038)
+++ cs/buildbot/trunk/buildbot/categories.py 2007-06-01 21:59:44 UTC (rev 7039)
@@ -3,23 +3,16 @@
class Category(object):
def __init__(self, **kwds):
+ for k,v in kwds.iteritems():
+ assert isinstance(k, basestring)
+ assert isinstance(v, basestring)
self.__dict__.update(kwds)
class CategorySet(object):
- def __init__(self, args, status=None):
+ def __init__(self, args):
self.args = args
- if status:
- projects = status.getProjects()
- projectNames = self.args.get('project')
- if projectNames:
- l = []
- for p in projectNames:
- if isinstance(p, basestring):
- p = projects[p]
- l.append(p)
- self.args['project'] = l
return
def __contains__(self, item):
Modified: cs/buildbot/trunk/buildbot/changes/changes.py
===================================================================
--- cs/buildbot/trunk/buildbot/changes/changes.py 2007-06-01 21:55:17 UTC (rev 7038)
+++ cs/buildbot/trunk/buildbot/changes/changes.py 2007-06-01 21:59:44 UTC (rev 7039)
@@ -220,8 +220,7 @@
def eventGenerator(self, categories):
from buildbot.categories import Category
- from buildbot.projects import Project
- other = Category(project=Project("other"))
+ other = Category(project="other")
for i in range(len(self.changes)-1, -1, -1):
c = self.changes[i]
category = c.category or other
Modified: cs/buildbot/trunk/buildbot/config.py
===================================================================
--- cs/buildbot/trunk/buildbot/config.py 2007-06-01 21:55:17 UTC (rev 7038)
+++ cs/buildbot/trunk/buildbot/config.py 2007-06-01 21:59:44 UTC (rev 7039)
@@ -207,7 +207,6 @@
def getBuildmasterConfig(self, c):
c['bots'] = self.bots
c['builders'] = self.builders
- c['projects'] = self.projects
c['schedulers'] = self.schedulers
c['status'] = self.status
return
Modified: cs/buildbot/trunk/buildbot/lines.py
===================================================================
--- cs/buildbot/trunk/buildbot/lines.py 2007-06-01 21:55:17 UTC (rev 7038)
+++ cs/buildbot/trunk/buildbot/lines.py 2007-06-01 21:59:44 UTC (rev 7039)
@@ -17,7 +17,7 @@
# now pickling is disabled, but weakref also breaks Categories...
self.project = project #weakref.proxy(project)
# here's another cycle
- self.category = Category(project = self.project,
+ self.category = Category(project = self.project.name,
branch = self.name,
type = 'test')
Modified: cs/buildbot/trunk/buildbot/master.py
===================================================================
--- cs/buildbot/trunk/buildbot/master.py 2007-06-01 21:55:17 UTC (rev 7038)
+++ cs/buildbot/trunk/buildbot/master.py 2007-06-01 21:59:44 UTC (rev 7039)
@@ -359,7 +359,7 @@
def stopService(self):
for b in self.builders.values():
b.builder_status.addPointEvent(["master", "shutdown"])
- #b.builder_status.saveYourself()
+ b.builder_status.saveYourself()
return service.Service.stopService(self)
def getLockByID(self, lockid):
@@ -531,7 +531,6 @@
self.statusTargets = []
self.bots = []
- self.projects = {}
# this ChangeMaster is a dummy, only used by tests. In the real
# buildmaster, where the BuildMaster instance is activated
# (startService is called) by twistd, this attribute is overwritten.
@@ -570,7 +569,7 @@
signal.signal(signal.SIGHUP, self._handleSIGHUP)
for b in self.botmaster.builders.values():
b.builder_status.addPointEvent(["master", "started"])
- #b.builder_status.saveYourself()
+ b.builder_status.saveYourself()
def useChanges(self, changes):
if self.change_svc:
@@ -665,7 +664,6 @@
schedulers = config['schedulers']
builders = config['builders']
slavePortnum = config['slavePortnum']
- projects = config['projects']
# optional
debugPassword = config.get('debugPassword')
@@ -773,8 +771,6 @@
d = defer.succeed(None)
self.buildbotURL = buildbotURL
- for p in projects:
- self.projects[p.name] = p
# self.bots: Disconnect any that were attached and removed from the
# list. Update self.checker with the new list of passwords,
@@ -930,7 +926,7 @@
log.msg("updating builder %s: %s" % (name, "\n".join(diffs)))
statusbag = old.builder_status
- #statusbag.saveYourself() # seems like a good idea
+ statusbag.saveYourself() # seems like a good idea
# TODO: if the basedir was changed, we probably need to make
# a new statusbag
new_builder = Builder(data, statusbag)
Modified: cs/buildbot/trunk/buildbot/projects.py
===================================================================
--- cs/buildbot/trunk/buildbot/projects.py 2007-06-01 21:55:17 UTC (rev 7038)
+++ cs/buildbot/trunk/buildbot/projects.py 2007-06-01 21:59:44 UTC (rev 7039)
@@ -1,6 +1,5 @@
-from buildbot import util
from buildbot.bs import gnu
from buildbot.lines import Trunk, Branch, Release
from buildbot.process import step
@@ -8,12 +7,9 @@
from os.path import basename, splitext
-class Project(util.ComparableMixin):
+class Project(object):
- compare_attrs = ['name', 'url']
-
-
def __init__(self, name, url=None, branches=None, owners=None, bs=None):
self.name = name
self.url = url
Modified: cs/buildbot/trunk/buildbot/status/builder.py
===================================================================
--- cs/buildbot/trunk/buildbot/status/builder.py 2007-06-01 21:55:17 UTC (rev 7038)
+++ cs/buildbot/trunk/buildbot/status/builder.py 2007-06-01 21:59:44 UTC (rev 7039)
@@ -1846,9 +1846,6 @@
def getSchedulers(self):
return self.botmaster.parent.allSchedulers()
- def getProjects(self):
- return self.botmaster.parent.projects
-
def getBots(self):
return self.botmaster.parent.bots
Modified: cs/buildbot/trunk/buildbot/status/html.py
===================================================================
--- cs/buildbot/trunk/buildbot/status/html.py 2007-06-01 21:55:17 UTC (rev 7038)
+++ cs/buildbot/trunk/buildbot/status/html.py 2007-06-01 21:59:44 UTC (rev 7039)
@@ -314,19 +314,24 @@
class StatusResourceBuild(HtmlResource):
title = "Build"
- def __init__(self, status, build, builderControl, buildControl):
+ def __init__(self, status, build, builderControl, buildControl,
+ waterfallURL, projectName):
HtmlResource.__init__(self)
self.status = status
self.build = build
self.builderControl = builderControl
self.control = buildControl
+ self.waterfallURL = waterfallURL
+ self.projectName = projectName
def body(self, request):
b = self.build
- buildbotURL = self.status.getBuildbotURL()
- projectName = "BuildBot"
- data = '<div class="title"><a href="%s">%s</a></div>\n'%(buildbotURL,
- projectName)
+ if self.projectName:
+ buildbotName = "%s BuildBot" % self.projectName
+ else:
+ buildbotName = "BuildBot"
+ data = '<div class="title"><a href="%s">%s</a></div>\n'%(self.waterfallURL,
+ buildbotName)
# the color in the following line gives python-mode trouble
data += ("<h1>Build <a href=\"%s\">%s</a>:#%d</h1>\n"
% (self.status.getURLForThing(b.getBuilder()),
@@ -490,21 +495,25 @@
# $builder
class StatusResourceBuilder(HtmlResource):
- def __init__(self, status, builder, control):
+ def __init__(self, status, builder, control, waterfallURL, projectName):
HtmlResource.__init__(self)
self.status = status
self.title = builder.getName() + " Builder"
self.builder = builder
self.control = control
+ self.waterfallURL = waterfallURL
+ self.projectName = projectName
def body(self, request):
b = self.builder
slaves = b.getSlaves()
connected_slaves = [s for s in slaves if s.isConnected()]
- buildbotURL = self.status.getBuildbotURL()
- projectName = "BuildBot"
- data = "<a href=\"%s\">%s</a>\n" % (buildbotURL, projectName)
+ if self.projectName:
+ buildbotName = "%s BuildBot" % self.projectName
+ else:
+ buildbotName = "BuildBot"
+ data = "<a href=\"%s\">%s</a>\n" % (self.waterfallURL, buildbotName)
data += make_row("Builder:", html.escape(b.getName()))
b1 = b.getBuild(-1)
if b1 is not None:
@@ -643,7 +652,9 @@
if self.control:
control = self.control.getBuild(num)
return StatusResourceBuild(self.status, build,
- self.control, control)
+ self.control, control,
+ self.waterfallURL,
+ self.projectName)
else:
return NoResource("No such build '%d'" % num)
return NoResource("really weird URL %s" % path)
@@ -1097,25 +1108,19 @@
"""This builds the main status page, with the waterfall display, and
all child pages."""
title = "BuildBot"
- def __init__(self, status, changemaster, categories, css=None):
+ def __init__(self, status, changemaster, categories, css=None,
+ projectName=None, projectURL=None):
HtmlResource.__init__(self)
self.status = status
self.changemaster = changemaster
self.categories = categories
self.css = css
- project = self.getProject(self.categories)
- if project:
- self.title = "BuildBot: %s" % project.name
+ self.projectName = projectName
+ self.projectURL = projectURL
+ if projectName:
+ self.title = "BuildBot: %s" % projectName
return
- def getProject(self, categories):
- """If a Project is uniquely determined, return it."""
- if categories:
- projects = categories.getAttribute('project')
- if projects and len(projects) == 1:
- return projects[0]
- return None
-
def body(self, request):
"This method builds the main waterfall display."
@@ -1126,7 +1131,7 @@
phase = request.args.get("phase",["2"])
phase = int(phase[0])
- requestCategories = CategorySet(request.args, self.status)
+ requestCategories = CategorySet(request.args)
if self.categories is None:
categories = requestCategories
else:
@@ -1145,14 +1150,13 @@
# start the table: top-header material
data += '<table border="0" cellspacing="0">\n'
- project = self.getProject(categories)
- if project:
+ if self.projectName:
# TODO: this is going to look really ugly
- if project.url:
+ if self.projectURL:
topleft = "<a href=\"%s\">%s</a><br />last build" % \
- (project.url, project.name)
+ (self.projectURL, self.projectName)
else:
- topleft = "%s<br />last build" % project.name
+ topleft = "%s<br />last build" % self.projectName
else:
topleft = "last build"
data += ' <tr class="LastBuild">\n'
@@ -1196,13 +1200,13 @@
data += "<a href=\"http://buildbot.sourceforge.net/\">Buildbot</a>"
data += "-%s " % version
- if project:
+ if self.projectName:
data += "working for the "
- if project.url:
- data += "<a href=\"%s\">%s</a> project." % (project.url,
- project.name)
+ if self.projectURL:
+ data += "<a href=\"%s\">%s</a> project." % (self.projectURL,
+ self.projectName)
else:
- data += "%s project." % project.name
+ data += "%s project." % self.projectName
data += "<br />\n"
# TODO: push this to the right edge, if possible
data += ("Page built: " +
@@ -1582,7 +1586,8 @@
favicon = None
robots_txt = None
- def __init__(self, status, control, changemaster, categories, css):
+ def __init__(self, status, control, changemaster, categories, css,
+ waterfallURL, projectName, projectURL):
"""
@type status: L{buildbot.status.builder.Status}
@type control: L{buildbot.master.Control}
@@ -1594,8 +1599,12 @@
self.changemaster = changemaster
self.categories = categories
self.css = css
+ self.waterfallURL = waterfallURL
+ self.projectName = projectName
+ self.projectURL = projectURL
waterfall = WaterfallStatusResource(self.status, changemaster,
- categories, css)
+ categories, css,
+ projectName, projectURL)
self.putChild("", waterfall)
def render(self, request):
@@ -1624,7 +1633,8 @@
control = None
if self.control:
control = self.control.getBuilder(path)
- return StatusResourceBuilder(self.status, builder, control)
+ return StatusResourceBuilder(self.status, builder, control,
+ self.waterfallURL, self.projectName)
return NoResource("No such Builder '%s'" % path)
@@ -1747,11 +1757,14 @@
"""
compare_attrs = ["http_port", "distrib_port", "allowForce",
- "categories", "css", "favicon", "robots_txt"]
+ "categories", "css", "favicon", "robots_txt",
+ "waterfallURL", "projectName", "projectURL"]
def __init__(self, http_port=None, distrib_port=None, allowForce=True,
categories=None, css=buildbot_css, favicon=buildbot_icon,
- robots_txt=None):
+ robots_txt=None, waterfallURL=None,
+ projectName=None, projectURL=None,
+ ):
"""To have the buildbot run its own web server, pass a port number to
C{http_port}. To have it run a web.distrib server
@@ -1827,6 +1840,9 @@
self.css = css
self.favicon = favicon
self.robots_txt = robots_txt
+ self.projectName = projectName
+ self.projectURL = projectURL
+ self.waterfallURL = waterfallURL
def __repr__(self):
if self.http_port is None:
@@ -1850,8 +1866,11 @@
else:
control = None
change_svc = self.parent.change_svc
+ waterfallURL = self.waterfallURL or status.getBuildbotURL()
sr = StatusResource(status, control, change_svc, self.categories,
- self.css)
+ self.css, waterfallURL,
+ self.projectName, self.projectURL)
+
sr.favicon = self.favicon
sr.robots_txt = self.robots_txt
More information about the cig-commits
mailing list