[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