[pypy-svn] r58176 - in pypy/build/bot2/pypybuildbot: . test
pedronis at codespeak.net
pedronis at codespeak.net
Tue Sep 16 11:08:28 CEST 2008
Author: pedronis
Date: Tue Sep 16 11:08:25 2008
New Revision: 58176
Modified:
pypy/build/bot2/pypybuildbot/summary.py
pypy/build/bot2/pypybuildbot/test/test_summary.py
Log:
(iko, pedronis)
start displaying failures formatted like our old summaries
Modified: pypy/build/bot2/pypybuildbot/summary.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/summary.py (original)
+++ pypy/build/bot2/pypybuildbot/summary.py Tue Sep 16 11:08:25 2008
@@ -1,3 +1,5 @@
+import py
+html = py.xml.html
from buildbot.status.web.base import HtmlResource
@@ -5,7 +7,7 @@
class RevisionOutcomeSet(object):
def __init__(self, rev):
- self.rev = rev
+ self.revision = rev
self._outcomes = {}
self.failed = set()
self.skipped = set()
@@ -43,6 +45,8 @@
self.map = map
self._failed = None
self._skipped = None
+ self.revision = map.values()[0].revision
+
@property
def failed(self):
@@ -65,10 +69,60 @@
def get_outcome(self, namekey):
return self.map[namekey[0]].get_outcome(namekey[1:])
-
+# ________________________________________________________________
N = 10
+def colsizes(namekeys):
+ colsizes = None
+ for keys in namekeys:
+ if colsizes is None:
+ colsizes = [0] * len(keys)
+ colsizes = map(max, zip(map(len, keys), colsizes))
+
+ return colsizes
+
+
+class SummaryPage(object):
+
+ def __init__(self):
+ self.sections = []
+
+ def add_section(self, outcome_sets):
+ by_rev = sorted((outcome_set.revision, outcome_set) for outcome_set
+ in outcome_sets)
+ lines = []
+ def bars():
+ return ' |'*len(lines)
+ 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))
+ lines.append(bars())
+
+ failed = set()
+ for rev, outcome_set in by_rev:
+ failed.update(outcome_set.failed)
+
+ colwidths = colsizes(failed)
+
+ for failure in sorted(failed):
+ line = []
+ for rev, outcome_set in by_rev:
+ letter = outcome_set.get_outcome(failure)
+ line.append(" %s" % letter)
+ for width, key in zip(colwidths, failure):
+ line.append(" %-*s" % (width, key))
+ lines.append(''.join(line))
+
+ section = html.pre('\n'.join(lines))
+ self.sections.append(section)
+
+ def render(self):
+ body_html = html.div(self.sections)
+ return body_html.unicode()
+
+
class Summary(HtmlResource):
def recentRevisions(self, request):
@@ -78,18 +132,23 @@
for builderName in status.getBuilderNames():
builderStatus = status.getBuilder(builderName)
for build in builderStatus.generateFinishedBuilds(num_builds=N):
- rev = build.getProperty("got_revision")
+ rev = int(build.getProperty("got_revision"))
revBuilds = revs.setdefault(rev, {})
if builderName not in revBuilds: # pick the most recent or ?
# xxx hack, go through the steps and make sure
# the log is there
log = [log for log in build.getLogs()
if log.getName() == "pytestLog"][0]
- revBuilds[builderName] = RevisionOutcomeSet(log)
- revs = revs.items()
- revs.sort()
+ outcome_set = RevisionOutcomeSet(rev)
+ outcome_set.populate(log)
+ revBuilds[builderName] = outcome_set
return revs
def body(self, request):
revs = self.recentRevisions(request)
- return repr(len(revs))
+ outcome_sets = []
+ for rev, by_build in revs.items():
+ outcome_sets.append(GatherOutcomeSet(by_build))
+ page = SummaryPage()
+ page.add_section(outcome_sets)
+ 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 Tue Sep 16 11:08:25 2008
@@ -5,6 +5,9 @@
def test_populate(self):
rev_outcome_set = summary.RevisionOutcomeSet(50000)
+
+ assert rev_outcome_set.revision == 50000
+
log = StringIO("""F a/b.py:test_one
. a/b.py:test_two
s a/b.py:test_three
@@ -24,7 +27,6 @@
res = rev_outcome_set.get_outcome(("a.b", "test_two"))
assert res == '.'
-
def test_GatherOutcomeSet(self):
rev_outcome_set_foo = summary.RevisionOutcomeSet(50000)
log = StringIO("""F a/b.py:test_one
@@ -48,6 +50,7 @@
goutcome = summary.GatherOutcomeSet(d)
+ assert goutcome.revision == 50000
assert goutcome.failed == set([('foo', 'a.b', 'test_one')])
assert goutcome.failed == set([('foo', 'a.b', 'test_one')])
@@ -73,3 +76,12 @@
res = goutcome_top.get_outcome(('sub', 'foo', 'a.b', 'test_one'))
assert res == 'F'
+
+ def test_colsizes(self):
+ failed = [('a', 'abc', 'd'), ('ab', 'c', 'xy'),
+ ('ab', '', 'cd')]
+
+ res = summary.colsizes(failed)
+
+ assert res == [2,3,2]
+
More information about the Pypy-commit
mailing list