[pypy-svn] r58189 - pypy/build/bot2/pypybuildbot

pedronis at codespeak.net pedronis at codespeak.net
Wed Sep 17 10:02:12 CEST 2008


Author: pedronis
Date: Wed Sep 17 10:02:09 2008
New Revision: 58189

Modified:
   pypy/build/bot2/pypybuildbot/summary.py
Log:
(iko, pedronis)

provide some links to the per builder runs stdio logs



Modified: pypy/build/bot2/pypybuildbot/summary.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/summary.py	(original)
+++ pypy/build/bot2/pypybuildbot/summary.py	Wed Sep 17 10:02:09 2008
@@ -7,13 +7,14 @@
 
 class RevisionOutcomeSet(object):
 
-    def __init__(self, rev, key=None):
+    def __init__(self, rev, key=None, run_stdio=None):
         self.revision = rev
         self.key = key
         self._outcomes = {}
         self.failed = set()
         self.skipped = set()
         self.longreprs = {}
+        self._run_stdio = run_stdio
 
     def populate_one(self, name, shortrepr, longrepr=None):
         if shortrepr == '!':
@@ -62,6 +63,9 @@
     def get_longrepr(self, namekey):
         return self.longreprs.get(namekey, '')
 
+    def get_run_stdios(self):
+        return {self.key: self._run_stdio}
+
 class RevisionOutcomeSetCache(object):
     CACHESIZE = 10
 
@@ -75,19 +79,22 @@
         build = builderStatus.getBuild(buildNumber)
 
         rev = int(build.getProperty("got_revision"))
-        log = None
+        pytest_log = None
+        stdio_url = "no_log"
         for step in build.getSteps():
-            candLogs = [log for log in step.getLogs()
-                        if log.getName() == "pytestLog"]
-            if candLogs:
-                log = candLogs[0]
+            logs = dict((log.getName(), log) for log in step.getLogs())
+            if 'pytestLog' in logs:
+                pytest_log = logs['pytestLog']
+                stdio_url = status.getURLForThing(logs['stdio'])
+                # builbot is broken in this :(
+                stdio_url = stdio_url[:-1]+"stdio"
                 break
 
-        outcome_set = RevisionOutcomeSet(rev, key) 
-        if log is None or not log.hasContents():
+        outcome_set = RevisionOutcomeSet(rev, key, stdio_url) 
+        if pytest_log is None or not pytest_log.hasContents():
             outcome_set.populate_one('<run>', '!', "no log from the test run")
         else:
-            outcome_set.populate(log)
+            outcome_set.populate(pytest_log)
         return outcome_set
         
     def get(self, status, key):
@@ -143,6 +150,12 @@
 
     def get_longrepr(self, namekey):
         return self.map[namekey[0]].get_longrepr(namekey[1:])
+
+    def get_run_stdios(self):
+        all = {}
+        for outcome_set in self.map.itervalues():
+            all.update(outcome_set.get_run_stdios())
+        return all
          
 # ________________________________________________________________
 
@@ -174,6 +187,15 @@
         qs = urllib.urlencode(parms)
         return "/summary/longrepr?" + qs
 
+    def make_stdio_anchors_for(self, outcome_set):
+        anchors = []
+        stdios = sorted(outcome_set.get_run_stdios().items())
+        for cachekey, url in stdios:
+            builder = cachekey[0]
+            anchors.append('  ')
+            anchors.append(html.a(builder, href=url))
+        return anchors
+        
     def add_section(self, outcome_sets):
         by_rev = sorted((outcome_set.revision, outcome_set) for outcome_set
                          in outcome_sets)
@@ -183,7 +205,10 @@
         for rev, outcome_set in by_rev:
             count_failures = len(outcome_set.failed)
             count_skipped = len(outcome_set.skipped)
-            lines.append(["%s %d" % (bars(),rev), "\n"])
+            line = ["%s %d" % (bars(),rev)]
+            line.append(self.make_stdio_anchors_for(outcome_set))
+            line.append('\n')
+            lines.append(line)
         lines.append([bars(), "\n"])
         
         failed = set()



More information about the Pypy-commit mailing list