self.build = build
+class LogFileMissing(Exception):
+ """Log file missing."""
+
+
class BuildStatus(object):
def __init__(self, stages=None, other_failures=None):
def read_log(self):
"""read full log file"""
- return open(self.basename+".log", "r")
+ try:
+ return open(self.basename+".log", "r")
+ except IOError:
+ raise LogFileMissing()
def read_err(self):
"""read full err file"""
StormBuild.host == host,
StormBuild.compiler == compiler).order_by(Desc(StormBuild.upload_time))
+ def get_build(self, tree, host, compiler, revision):
+ result = self.store.find(StormBuild,
+ StormBuild.tree == tree,
+ StormBuild.host == host,
+ StormBuild.compiler == compiler,
+ StormBuild.revision == revision)
+ ret = result.one()
+ if ret is None:
+ raise NoSuchBuildError(tree, host, compiler, revision)
+ return ret
+
class StormCachingBuildFarm(BuildFarm):
"""show the available old revisions, if any"""
old_rev_builds = self.buildfarm.builds.get_old_revs(tree, host, compiler)
- if len(old_rev_builds) == 0:
+ if not old_rev_builds:
return
yield "<h2>Older builds:</h2>\n"
if rev:
assert re.match("^[0-9a-fA-F]*$", rev)
- f = build.read_log()
try:
- log = f.read()
- finally:
- f.close()
+ f = build.read_log()
+ try:
+ log = f.read()
+ finally:
+ f.close()
+ except data.LogFileMissing:
+ log = "Missing log file."
f = build.read_err()
try:
err = f.read()
"status": lambda a, b: cmp(a[6], b[6]),
}
- assert tree in self.buildfarm.trees, "not a build tree"
- assert sort_by in cmp_funcs, "not a valid sort"
+ if sort_by not in cmp_funcs:
+ yield "not a valid sort mechanism: %r" % sort_by
+ return
for build in self.buildfarm.get_tree_builds(tree):
try: