[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