[SCM] build.samba.org - branch master updated
Jelmer Vernooij
jelmer at samba.org
Fri Dec 3 18:55:16 MST 2010
The branch, master has been updated
via 7ad25b7 When uploading, automatically create subunit file.
via c034d6c Support extracting subunit files.
from 8f5dc74 Fix last instance of StormCachingBUildFarm.
http://gitweb.samba.org/?p=build-farm.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 7ad25b7ed094a77ada88436fe3e0fa819421fde3
Author: Jelmer Vernooij <jelmer at samba.org>
Date: Sat Dec 4 02:55:46 2010 +0100
When uploading, automatically create subunit file.
commit c034d6c44e76a57091a135a537a0581a49c8f828
Author: Jelmer Vernooij <jelmer at samba.org>
Date: Sat Dec 4 02:49:02 2010 +0100
Support extracting subunit files.
-----------------------------------------------------------------------
Summary of changes:
buildfarm/build.py | 40 +++++++++++++++++++++++++---------------
buildfarm/tests/test_build.py | 25 +++++++++++++++++++++++--
tools/fix.py | 19 ++++++++++++++++++-
3 files changed, 66 insertions(+), 18 deletions(-)
Changeset truncated at 500 lines:
diff --git a/buildfarm/build.py b/buildfarm/build.py
index a2ea904..b64695f 100644
--- a/buildfarm/build.py
+++ b/buildfarm/build.py
@@ -160,13 +160,13 @@ def extract_phase_output(f):
output = None
re_action = re.compile("^ACTION (PASSED|FAILED):\s+(.*)$")
for l in f:
- if l.startwith("Running action "):
+ if l.startswith("Running action "):
name = l[len("Running action "):].strip()
output = []
continue
m = re_action.match(l)
if m:
- assert name == m.group(1)
+ assert name == m.group(2).strip(), "%r != %r" % (name, m.group(2))
yield name, output
name = None
output = []
@@ -178,7 +178,7 @@ def extract_test_output(f):
for name, output in extract_phase_output(f):
if name == "test":
return output
- return None
+ raise NoTestOutput()
def build_status_from_logs(log, err):
@@ -268,6 +268,10 @@ class NoSuchBuildError(Exception):
self.rev = rev
+class NoTestOutput(Exception):
+ """The build did not have any associated test output."""
+
+
class Build(object):
"""A single build of a tree on a particular host using a particular compiler.
"""
@@ -317,7 +321,10 @@ class Build(object):
def read_subunit(self):
"""read the test output as subunit"""
- return StringIO("".join(extract_test_output(self.read_log())))
+ try:
+ return open(self.basename+".subunit", "r")
+ except IOError:
+ raise NoTestOutput()
def read_log(self):
"""read full log file"""
@@ -527,20 +534,23 @@ class BuildResultStore(object):
rev = build.revision_details()
new_basename = self.build_fname(build.tree, build.host, build.compiler, rev)
- try:
- existing_build = self.get_build(build.tree, build.host, build.compiler, rev)
- except NoSuchBuildError:
- if os.path.exists(new_basename+".log"):
- os.remove(new_basename+".log")
- if os.path.exists(new_basename+".err"):
- os.remove(new_basename+".err")
- else:
- existing_build.remove_logs()
+ if os.path.exists(new_basename+".log"):
+ os.remove(new_basename+".log")
+ if os.path.exists(new_basename+".err"):
+ os.remove(new_basename+".err")
os.link(build.basename+".log", new_basename+".log")
if os.path.exists(build.basename+".err"):
os.link(build.basename+".err", new_basename+".err")
- new_basename = self.build_fname(build.tree, build.host, build.compiler,
- rev)
+ try:
+ subunit_output = extract_test_output(build.read_log())
+ except NoTestOutput:
+ pass
+ else:
+ f = open(new_basename+".subunit", 'w')
+ try:
+ f.writelines(subunit_output)
+ finally:
+ f.close()
new_build = StormBuild(new_basename, build.tree, build.host,
build.compiler, rev)
new_build.checksum = build.log_checksum()
diff --git a/buildfarm/tests/test_build.py b/buildfarm/tests/test_build.py
index 4c2d0f0..b3c7a45 100755
--- a/buildfarm/tests/test_build.py
+++ b/buildfarm/tests/test_build.py
@@ -18,15 +18,15 @@
from cStringIO import StringIO
import os
import testtools
-import unittest
from buildfarm.build import (
Build,
- BuildResultStore,
BuildStatus,
NoSuchBuildError,
+ NoTestOutput,
UploadBuildResultStore,
build_status_from_logs,
+ extract_test_output,
)
from buildfarm import BuildFarm
@@ -402,3 +402,24 @@ class UploadBuildResultStoreTests(UploadBuildResultStoreTestBase,BuildFarmTestCa
self.x = UploadBuildResultStore(
os.path.join(self.path, "data", "upload"))
+
+
+class ExtractSubunitTests(testtools.TestCase):
+
+ def extract_test_output(self, log):
+ try:
+ return "".join(extract_test_output(StringIO(log)))
+ except NoTestOutput:
+ return None
+
+ def test_not_present(self):
+ self.assertEquals(None, self.extract_test_output(""))
+
+ def test_simple(self):
+ self.assertEquals("FOO\n", self.extract_test_output("""
+
+Running action test
+FOO
+ACTION PASSED: test
+
+"""))
diff --git a/tools/fix.py b/tools/fix.py
index 9cec88f..b4cc172 100755
--- a/tools/fix.py
+++ b/tools/fix.py
@@ -8,11 +8,13 @@ from buildfarm.build import (
build_status_from_logs,
LogFileMissing,
MissingRevisionInfo,
+ NoTestOutput,
revision_from_log,
+ extract_test_output,
)
from buildfarm.hostdb import NoSuchHost
-from buildfarm.sqldb import BuildFarm, StormBuild
+from buildfarm import BuildFarm, StormBuild
buildfarm = BuildFarm()
@@ -58,4 +60,19 @@ for build in store.find(StormBuild, StormBuild.host_id == None):
except NoSuchHost, e:
print "Unable to find host %s" % e.name
+
+for build in store.find(StormBuild, StormBuild.basename != None):
+ subunit_path = build.basename + ".subunit"
+ if os.path.exists(subunit_path):
+ continue
+ try:
+ test_output = "".join(extract_test_output(build.read_log()))
+ except (LogFileMissing, NoTestOutput):
+ continue
+ f = open(subunit_path, 'w')
+ try:
+ f.write(test_output)
+ finally:
+ f.close()
+
buildfarm.commit()
--
build.samba.org
More information about the samba-cvs
mailing list