[pypy-svn] r58213 - in pypy/build/bot2/pypybuildbot: . test

pedronis at codespeak.net pedronis at codespeak.net
Wed Sep 17 23:32:50 CEST 2008


Author: pedronis
Date: Wed Sep 17 23:32:49 2008
New Revision: 58213

Modified:
   pypy/build/bot2/pypybuildbot/steps.py
   pypy/build/bot2/pypybuildbot/summary.py
   pypy/build/bot2/pypybuildbot/test/test_summary.py
Log:
fixes:

- preserve .buildbot-sourcedata across svnwcrevert becaue otherwise a full checkout will happen
- fix problems with absent results
- fix problems with builds that even didn't get as far as checking out (they have no revision)



Modified: pypy/build/bot2/pypybuildbot/steps.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/steps.py	(original)
+++ pypy/build/bot2/pypybuildbot/steps.py	Wed Sep 17 23:32:49 2008
@@ -53,7 +53,8 @@
         self.addStep(CondShellCommand(
             description="wcrevert",
             cond=not_first_time,
-            command = ["python", "py/bin/py.svnwcrevert", "."],
+            command = ["python", "py/bin/py.svnwcrevert", ".",
+                       ".buildbot-sourcedata"],
             haltOnFailure=True))
         self.addStep(source.SVN("https://codespeak.net/svn/pypy/"
                                 "branch/pypy-pytrunk"))

Modified: pypy/build/bot2/pypybuildbot/summary.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/summary.py	(original)
+++ pypy/build/bot2/pypybuildbot/summary.py	Wed Sep 17 23:32:49 2008
@@ -55,14 +55,14 @@
         add_one()
 
     def get_outcome(self, namekey):
-        return self._outcomes[namekey]
-
-    def get_key_namekey(self, namekey):
-        return (self.key, namekey)
+        return self._outcomes.get(namekey, ' ')
 
     def get_longrepr(self, namekey):
         return self.longreprs.get(namekey, '')
 
+    def get_key_namekey(self, namekey):
+        return (self.key, namekey)
+
     def get_run_stdios(self):
         return {self.key: self._run_stdio}
 
@@ -143,14 +143,20 @@
         return self._skipped
 
     def get_outcome(self, namekey):
-        return self.map[namekey[0]].get_outcome(namekey[1:])
+        which = namekey[0]
+        if which not in self.map:
+            return ' '
+        return self.map[which].get_outcome(namekey[1:])
+
+    def get_longrepr(self, namekey):
+        which = namekey[0]
+        if which not in self.map:
+            return ''
+        return self.map[which].get_longrepr(namekey[1:])
 
     def get_key_namekey(self, namekey):
         return self.map[namekey[0]].get_key_namekey(namekey[1:])
 
-    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():
@@ -235,6 +241,18 @@
         section = html.pre(lines)
         self.sections.append(section)
 
+    def add_no_revision_builds(self, status, no_revision_builds):
+        section = html.div(html.p("builds aborted without getting a revision"))
+
+        for build in no_revision_builds:
+            builderName = build.getBuilder().getName()
+            num = build.getNumber()
+            descr = "%s #%d" % (builderName, num)
+            url = status.getURLForThing(build)
+            section.append(html.a(descr, href=url))
+            section.append(html.br())
+        self.sections.append(section)
+
     def render(self):
         body_html = html.div(self.sections)
         return body_html.unicode()
@@ -280,7 +298,12 @@
 
         return html.pre(longrepr).unicode()
 
-
+def getProp(obj, name, default=None):
+    try:
+        return obj.getProperty(name)
+    except KeyError:
+        return default
+    
 class Summary(HtmlResource):
     title="Summary" # xxx
 
@@ -288,27 +311,34 @@
         HtmlResource.__init__(self)
         self.putChild('longrepr', LongRepr())
 
-    def recentRevisions(self, request):
+    def recentRevisions(self, status):
         # xxx branches
-        status = self.getStatus(request)
         revs = {}
+        no_revision_builds = []
         for builderName in status.getBuilderNames():
             builderStatus = status.getBuilder(builderName)
             for build in builderStatus.generateFinishedBuilds(num_builds=N):
-                rev = int(build.getProperty("got_revision"))
-                revBuilds = revs.setdefault(rev, {})
-                if builderName not in revBuilds: # pick the most recent or ?
-                    key = (builderName, build.getNumber())
-                    outcome_set = outcome_set_cache.get(status, key)
-                    revBuilds[builderName] = outcome_set
+                got_rev = getProp(build, 'got_revision', None)
+                if got_rev is None:
+                    no_revision_builds.append(build)
+                else:
+                    rev = int(got_rev)
+                    revBuilds = revs.setdefault(rev, {})
+                    if builderName not in revBuilds: # pick the most recent or ?
+                        key = (builderName, build.getNumber())
+                        outcome_set = outcome_set_cache.get(status, key)
+                        revBuilds[builderName] = outcome_set
                             
-        return revs
+        return revs, no_revision_builds
                             
     def body(self, request):
-        revs = self.recentRevisions(request)
+        status = self.getStatus(request)
+        
+        revs, no_revision_builds = self.recentRevisions(status)
         outcome_sets = []
         for rev, by_build in revs.items():
             outcome_sets.append(GatherOutcomeSet(by_build))
         page = SummaryPage()
-        page.add_section(outcome_sets)        
+        page.add_section(outcome_sets)
+        page.add_no_revision_builds(status, no_revision_builds)
         return page.render()

Modified: pypy/build/bot2/pypybuildbot/test/test_summary.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/test/test_summary.py	(original)
+++ pypy/build/bot2/pypybuildbot/test/test_summary.py	Wed Sep 17 23:32:49 2008
@@ -81,6 +81,11 @@
         assert rev_outcome_set.skipped == set([
             ("a.c", '')])
         
+    def test_absent_outcome(self):
+        rev_outcome_set = summary.RevisionOutcomeSet(50000)
+
+        res = rev_outcome_set.get_outcome(('a', 'b'))
+        assert res == ' '
 
     def test_RevisionOutcomeSetCache(self):
         cache = summary.RevisionOutcomeSetCache()
@@ -186,6 +191,13 @@
         res = goutcome_top.get_longrepr(('sub', 'foo', 'a.b', 'test_one'))
         assert res == "some\ntraceback\n"
 
+        # absent
+        res = goutcome_top.get_outcome(('what', 'foo', 'a.b', 'test_one'))
+        assert res == ' '
+
+        res = goutcome_top.get_longrepr(('what', 'foo', 'a.b', 'test_one'))
+        assert res == ''        
+
     def test_colsizes(self):
         failed = [('a', 'abc', 'd'), ('ab', 'c', 'xy'),
                   ('ab', '', 'cd')]



More information about the Pypy-commit mailing list