More work on builds.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 21 Nov 2010 12:59:36 +0000 (13:59 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sun, 21 Nov 2010 12:59:36 +0000 (13:59 +0100)
buildfarm/data.py
buildfarm/sqldb.py
buildfarm/web/__init__.py

index 53f38536a7297dab7d4adeaa11cadd23cf89f678..a551b81f8ba572fca7715cf0633c14824e3206d4 100644 (file)
@@ -49,6 +49,10 @@ class MissingRevisionInfo(Exception):
         self.build = build
 
 
+class LogFileMissing(Exception):
+    """Log file missing."""
+
+
 class BuildStatus(object):
 
     def __init__(self, stages=None, other_failures=None):
@@ -252,7 +256,10 @@ class Build(object):
 
     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"""
index bd3c81fbf3bd04f53e7ef6ebb78b2431512c16f3..0e561379007d19ef5e70fe18c16b95a7f9513314 100644 (file)
@@ -220,6 +220,17 @@ class StormCachingBuildResultStore(BuildResultStore):
             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):
 
index b7b59171f78e9136c7ac20a95595cafa2732fd1e..d9fd3f1aba22e659f11e3ec778b98fec96e144ad 100755 (executable)
@@ -445,7 +445,7 @@ class ViewBuildPage(BuildFarmPage):
         """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"
@@ -482,11 +482,14 @@ class ViewBuildPage(BuildFarmPage):
         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()
@@ -592,8 +595,9 @@ class ViewRecentBuildsPage(BuildFarmPage):
             "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: