raise NoSuchBuildError(None, None, None, None)
return ret
- def get_previous_revision(self, tree, host, compiler, revision):
+ def get_previous_build(self, tree, host, compiler, revision):
from buildfarm.sqldb import Cast
cur_build = self.get_build(tree, host, compiler, revision)
prev_build = result.first()
if prev_build is None:
raise NoSuchBuildError(tree, host, compiler, revision)
- return prev_build.revision
+ return prev_build
- def get_latest_revision(self, tree, host, compiler):
+ def get_latest_build(self, tree, host, compiler):
result = self.store.find(StormBuild,
StormBuild.tree == tree,
StormBuild.host == host,
build = result.first()
if build is None:
raise NoSuchBuildError(tree, host, compiler)
- return build.revision
+ return build
BUILD COMMIT REVISION: myotherrev
""")
self.x.upload_build(Build(path[:-4], "tdb", "charis", "cc"))
- self.assertRaises(NoSuchBuildError, self.x.get_previous_revision, "tdb", "charis", "cc", "unknown")
- self.assertRaises(NoSuchBuildError, self.x.get_previous_revision, "tdb", "charis", "cc", "myrev")
- self.assertEquals("myrev", self.x.get_previous_revision("tdb", "charis", "cc", "myotherrev"))
+ self.assertRaises(NoSuchBuildError, self.x.get_previous_build, "tdb", "charis", "cc", "unknown")
+ self.assertRaises(NoSuchBuildError, self.x.get_previous_build, "tdb", "charis", "cc", "myrev")
+ self.assertEquals("myrev", self.x.get_previous_build("tdb", "charis", "cc", "myotherrev").revision)
def test_get_latest_revision(self):
path = self.create_mock_logfile("tdb", "charis", "cc", "22", contents="""
BUILD COMMIT REVISION: myrev
""")
self.x.upload_build(Build(path[:-4], "tdb", "charis", "cc"))
- self.assertEquals("myrev", self.x.get_latest_revision("tdb", "charis", "cc"))
+ self.assertEquals("myrev", self.x.get_latest_build("tdb", "charis", "cc").revision)
def test_build_fname(self):
self.assertEquals(
build = Build(path[:-4], "tdb", "charis", "cc")
self.assertRaises(Exception, self.x.upload_build, build)
- def test_get_previous_revision(self):
- self.assertRaises(NoSuchBuildError, self.x.get_previous_revision, "tdb", "charis", "cc", "12")
+ def test_get_previous_build(self):
+ self.assertRaises(NoSuchBuildError, self.x.get_previous_build, "tdb", "charis", "cc", "12")
def test_get_latest_revision_none(self):
- self.assertRaises(NoSuchBuildError, self.x.get_latest_revision, "tdb", "charis", "cc")
+ self.assertRaises(NoSuchBuildError, self.x.get_latest_build, "tdb", "charis", "cc")
def test_get_old_builds_none(self):
self.assertEquals([],
yield "<div id='log'>"
- yield "<p><a href='%s/+subunit'>Subunit output</a></p>" % build_uri(myself, build)
+ yield "<p><a href='%s/+subunit'>Subunit output</a>" % build_uri(myself, build)
+ try:
+ previous_build = self.buildfarm.builds.get_previous_build(build.tree, build.host, build.compiler. build.revision)
+ except NoSuchBuildError:
+ pass
+ else:
+ yield ", <a href='%s/+subunit-diff/%s'>diff against previous</a>" % (
+ build_uri(myself, build), previous.log_checksum())
+ yield "</p>"
yield "<p><a href='%s/+stdout'>Standard output (as plain text)</a>, " % build_uri(myself, build)
yield "<a href='%s/+stderr'>Standard error (as plain text)</a>" % build_uri(myself, build)
yield "</p>"
('Content-type', 'text/plain; charset=utf-8'),
('Content-Disposition', 'attachment; filename="%s.%s.%s-%s.err"' % (build.tree, build.host, build.compiler, build.revision))])
yield build.read_err().read()
+ elif subfn == "+subunit-diff":
+ start_response('200 OK', [
+ ('Content-type', 'text/plain; charset=utf-8')])
+ subunit_this = build.read_subunit().readlines()
+ other_build_checksum = wsgiref.util.shift_path_info(environ)
+ other_build = self.buildfarm.builds.get_by_checksum(other_build_checksum)
+ subunit_other = other_build.read_subunit().readlines()
+ import difflib
+ yield "".join(difflib.unified_diff(subunit_other, subunit_this))
+
elif subfn in ("", None):
start_response('200 OK', [
('Content-type', 'text/html; charset=utf-8')])
try:
if opts.dry_run:
# Perhaps this is a dry run and rev is not in the database yet?
- prev_rev = buildfarm.builds.get_latest_revision(build.tree, build.host, build.compiler)
+ prev_build = buildfarm.builds.get_latest_build(build.tree, build.host, build.compiler)
else:
- prev_rev = buildfarm.builds.get_previous_revision(build.tree, build.host, build.compiler, rev)
+ prev_build = buildfarm.builds.get_previous_build(build.tree, build.host, build.compiler, rev)
except NoSuchBuildError:
if opts.verbose >= 1:
print "Unable to find previous build for %s,%s,%s" % (build.tree, build.host, build.compiler)
# Can't send a nastygram until there are 2 builds..
else:
- try:
- assert prev_rev is not None
- prev_build = buildfarm.builds.get_build(build.tree, build.host, build.compiler, prev_rev)
- except NoSuchBuildError:
- if opts.verbose >= 1:
- print "Previous build %s has disappeared" % prev_build
- else:
- check_and_send_mails(build, prev_build)
+ check_and_send_mails(build, prev_build)
if not opts.dry_run:
old_build.remove()