[SCM] build.samba.org - branch master updated

Jelmer Vernooij jelmer at samba.org
Fri Nov 5 09:50:29 MDT 2010


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 <jelmer at samba.org>
Date:   Fri Nov 5 16:51:01 2010 +0100

    Refactor html out of buildfarm.data.

commit 8ad36a03ef67addb7c7c5b07faa545121b4a2dc6
Author: Jelmer Vernooij <jelmer at samba.org>
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\&nbsp\;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\&nbsp\;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


More information about the samba-cvs mailing list