The branch, master has been updated
via 73e47d1 Refactor html out of buildfarm.data.
via 8ad36a0 Extract some generic functions.
from 6d5e933 Try to override make test that is broken
http://gitweb.samba.org/?p=build-farm.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 73e47d19b2aaeb79cb7856251fa853c6bd77c561
Author: Jelmer Vernooij <[email protected]>
Date: Fri Nov 5 16:51:01 2010 +0100
Refactor html out of buildfarm.data.
commit 8ad36a03ef67addb7c7c5b07faa545121b4a2dc6
Author: Jelmer Vernooij <[email protected]>
Date: Fri Nov 5 16:42:39 2010 +0100
Extract some generic functions.
-----------------------------------------------------------------------
Summary of changes:
buildfarm/data.py | 139 ++++++++++++++++++++++++++++------------------------
web/build.py | 10 +++-
2 files changed, 82 insertions(+), 67 deletions(-)
Changeset truncated at 500 lines:
diff --git a/buildfarm/data.py b/buildfarm/data.py
index 0c0383d..665492f 100644
--- a/buildfarm/data.py
+++ b/buildfarm/data.py
@@ -34,6 +34,69 @@ def check_dir_exists(kind, path):
raise Exception("%s directory %s does not exist" % (kind, path))
+def build_status_from_logs(log, err):
+ """get status of build"""
+ m = re.search("TEST STATUS:(.*)", log)
+ if m:
+ tstatus = m.group(1)
+ else:
+ m = re.search("ACTION (PASSED|FAILED): test", log)
+ if m:
+ test_failures = len(re.findall("testsuite-(failure|error): ", log))
+ test_successes = len(re.findall("testsuite-success: ", log))
+ if test_successes > 0:
+ tstatus = test_failures
+ else:
+ tstatus = 255
+ else:
+ tstatus = None
+
+ m = re.search("INSTALL STATUS:(.*)", log)
+ if m:
+ istatus = m.group(1)
+ else:
+ istatus = None
+
+ m = re.search("BUILD STATUS:(.*)", log)
+ if m:
+ bstatus = m.group(1)
+ else:
+ bstatus = None
+
+ m = re.search("CONFIGURE STATUS:(.*)", log)
+ if m:
+ cstatus = m.group(1)
+ else:
+ cstatus = None
+
+ other_failures = set()
+ m = re.search("(PANIC|INTERNAL ERROR):.*", log)
+ if m:
+ other_failures.add("panic")
+
+ if "No space left on device" in err or "No space left on device" in log:
+ other_failures.add("disk full")
+
+ if "maximum runtime exceeded" in log:
+ other_failures.add("timeout")
+
+ m = re.search("CC_CHECKER STATUS: (.*)", log)
+ if m:
+ sstatus = m.group(1)
+ else:
+ sstatus = None
+
+ return ((cstatus, bstatus, istatus, tstatus, sstatus), other_failures)
+
+
+def lcov_extract_percentage(text):
+ m = re.search('\<td
class="headerItem".*?\>Code\ \;covered\:\<\/td\>.*?\n.*?\<td
class="headerValue".*?\>([0-9.]+) \%', text)
+ if m:
+ return m.group(1)
+ else:
+ return None
+
+
class NoSuchBuildError(Exception):
"""The build with the specified name does not exist."""
@@ -126,14 +189,13 @@ class Build(object):
def status(self):
"""get status of build
- :return: string with build status
+ :return: tuple with build status
"""
- # FIXME: This should return a tuple
log = self.read_log()
err = self.read_err()
- return self._store.build_status_from_logs(log, err)
+ return build_status_from_logs(log, err)
def err_count(self):
"""get status of build"""
@@ -283,60 +345,6 @@ class BuildResultStore(object):
return os.path.join(self.datadir, "oldrevs/build.%s.%s.%s-%s" %
(tree, host, compiler, rev))
return os.path.join(self.datadir, "upload/build.%s.%s.%s" % (tree,
host, compiler))
- def build_status_from_logs(self, log, err):
- """get status of build"""
- m = re.search("TEST STATUS:(.*)", log)
- if m:
- tstatus = m.group(1)
- else:
- m = re.search("ACTION (PASSED|FAILED): test", log)
- if m:
- test_failures = len(re.findall("testsuite-(failure|error): ",
log))
- test_successes = len(re.findall("testsuite-success: ", log))
- if test_successes > 0:
- tstatus = test_failures
- else:
- tstatus = 255
- else:
- tstatus = None
-
- m = re.search("INSTALL STATUS:(.*)", log)
- if m:
- istatus = m.group(1)
- else:
- istatus = None
-
- m = re.search("BUILD STATUS:(.*)", log)
- if m:
- bstatus = m.group(1)
- else:
- bstatus = None
-
- m = re.search("CONFIGURE STATUS:(.*)", log)
- if m:
- cstatus = m.group(1)
- else:
- cstatus = None
-
- other_failures = set()
- m = re.search("(PANIC|INTERNAL ERROR):.*", log)
- if m:
- other_failures.add("panic")
-
- if "No space left on device" in err or "No space left on device" in
log:
- other_failures.add("disk full")
-
- if "maximum runtime exceeded" in log:
- other_failures.add("timeout")
-
- m = re.search("CC_CHECKER STATUS: (.*)", log)
- if m:
- sstatus = m.group(1)
- else:
- sstatus = None
-
- return ((cstatus, bstatus, istatus, tstatus, sstatus), other_failures)
-
def lcov_status(self, tree):
"""get status of build"""
cachefile = os.path.join(self.cachedir, "lcov.%s.%s.status" % (
@@ -354,17 +362,20 @@ class BuildResultStore(object):
st2 = None
if st2 and st1.st_ctime <= st2.st_mtime:
- return util.FileLoad(cachefile)
+ ret = util.FileLoad(cachefile)
+ if ret == "":
+ return None
+ return ret
lcov_html = util.FileLoad(file)
- m = re.search('\<td
class="headerItem".*?\>Code\ \;covered\:\<\/td\>.*?\n.*?\<td
class="headerValue".*?\>([0-9.]+) \%', lcov_html)
- if m:
- ret = "<a href=\"/lcov/data/%s/%s\">%s %%</a>" % (self.LCOVHOST,
tree, m.group(1))
- else:
+ perc = lcov_extract_percentage(lcov_html)
+ if perc is None:
ret = ""
+ else:
+ ret = perc
if self.readonly:
util.FileSave(cachefile, ret)
- return ret
+ return perc
def get_old_revs(self, tree, host, compiler):
"""get a list of old builds and their status."""
@@ -383,7 +394,7 @@ class BuildResultStore(object):
r = {
"STATUS": build.status(),
"REVISION": rev,
- "TIMESTAMP": stat.st_ctime
+ "TIMESTAMP": build.age_ctime(),
}
ret.append(r)
diff --git a/web/build.py b/web/build.py
index 1aacd7e..3b8aa50 100755
--- a/web/build.py
+++ b/web/build.py
@@ -192,10 +192,14 @@ def view_summary(myself, output_type):
yield "<td>"
yield "%d</td>" % panic_count[tree]
try:
- lcov_data = db.lcov_status(tree)
+ lcov_status = db.lcov_status(tree)
except data.NoSuchBuildError:
- lcov_data = ""
- yield "<td>%s</td>" % lcov_data
+ yield "<td></td>"
+ else:
+ if lcov_status is not None:
+ yield "<td><a href=\"/lcov/data/%s/%s\">%s %%</a></td>" %
(db.LCOVHOST, tree, lcov_status)
+ else:
+ yield "<td></td>"
yield "</tr>"
if output_type == 'text':
--
build.samba.org