[cig-commits] r12633 - in cs/buildbot/trunk/buildbot: . slave status

leif at geodynamics.org leif at geodynamics.org
Wed Aug 13 17:33:53 PDT 2008


Author: leif
Date: 2008-08-13 17:33:52 -0700 (Wed, 13 Aug 2008)
New Revision: 12633

Modified:
   cs/buildbot/trunk/buildbot/config.py
   cs/buildbot/trunk/buildbot/lines.py
   cs/buildbot/trunk/buildbot/slave/commands.py
   cs/buildbot/trunk/buildbot/status/html.py
Log:
Guess the content-type of logfiles based upon the log's name, so that
*.gif, *.jpg, *.pdf, etc. "logfiles" (linked from the waterfall) are
displayed correctly by the web browser.  Also, allow filtering configs
by project (for project-specific slaves).


Modified: cs/buildbot/trunk/buildbot/config.py
===================================================================
--- cs/buildbot/trunk/buildbot/config.py	2008-08-13 20:39:35 UTC (rev 12632)
+++ cs/buildbot/trunk/buildbot/config.py	2008-08-14 00:33:52 UTC (rev 12633)
@@ -41,11 +41,12 @@
 
 class BuildConfig(object):
 
-    def __init__(self, name, languages, env, tag=None, slaves=None, configureArgs=None, basedir=None,
+    def __init__(self, name, languages, env, projects=None, tag=None, slaves=None, configureArgs=None, basedir=None,
                  CPPFLAGS=None, LDFLAGS=None, LIBS=None):
         self.name = name
         self.languages = languages
         self.env = env
+        self.projects = projects
         self.tag = tag
 
         # I designed BuildConfig & BuildSlave when I thought BuildBot

Modified: cs/buildbot/trunk/buildbot/lines.py
===================================================================
--- cs/buildbot/trunk/buildbot/lines.py	2008-08-13 20:39:35 UTC (rev 12632)
+++ cs/buildbot/trunk/buildbot/lines.py	2008-08-14 00:33:52 UTC (rev 12633)
@@ -177,6 +177,11 @@
             for language in self.languages:
                 if not language in buildConfig.languages:
                     return None
+
+        # Build configurations can also reject us.
+        if buildConfig.projects:
+           if not self.project in buildConfig.projects:
+               return None
         
         if buildConfig.tag:
             # If the build config is tagged, and we have more than one

Modified: cs/buildbot/trunk/buildbot/slave/commands.py
===================================================================
--- cs/buildbot/trunk/buildbot/slave/commands.py	2008-08-13 20:39:35 UTC (rev 12632)
+++ cs/buildbot/trunk/buildbot/slave/commands.py	2008-08-14 00:33:52 UTC (rev 12633)
@@ -261,7 +261,10 @@
 
             # interpolate my environment
             for k,v in environ.items():
-                environ[k] = v % self.environ
+                try:
+                    environ[k] = v % self.environ
+                except:
+                    environ[k] = v
 
             self.environ.update(environ)
         self.initialStdin = initialStdin

Modified: cs/buildbot/trunk/buildbot/status/html.py
===================================================================
--- cs/buildbot/trunk/buildbot/status/html.py	2008-08-13 20:39:35 UTC (rev 12632)
+++ cs/buildbot/trunk/buildbot/status/html.py	2008-08-14 00:33:52 UTC (rev 12633)
@@ -802,10 +802,7 @@
         return data
 
     def render_HEAD(self, request):
-        if self.asText:
-            request.setHeader("content-type", "text/plain")
-        else:
-            request.setHeader("content-type", "text/html")
+        self.setContentType(request)
 
         # vague approximation, ignores markup
         request.setHeader("content-length", self.original.length)
@@ -814,10 +811,7 @@
     def render_GET(self, req):
         self.req = req
 
-        if self.asText:
-            req.setHeader("content-type", "text/plain")
-        else:
-            req.setHeader("content-type", "text/html")
+        self.setContentType(req)
 
         if not self.asText:
             req.write(self.htmlHeader(req))
@@ -825,6 +819,18 @@
         self.original.subscribeConsumer(ChunkConsumer(req, self))
         return server.NOT_DONE_YET
 
+    def setContentType(self, request):
+        import mimetypes
+        ctype, encoding = mimetypes.guess_type(self.original.getName())
+        if ctype is not None and encoding is None:
+            request.setHeader("content-type", ctype)
+            self.asText = True
+        elif self.asText:
+            request.setHeader("content-type", "text/plain")
+        else:
+            request.setHeader("content-type", "text/html")
+        return
+
     def finished(self):
         if not self.req:
             return



More information about the cig-commits mailing list