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

Jelmer Vernooij jelmer at samba.org
Thu Nov 11 16:20:40 MST 2010


The branch, master has been updated
       via  ed1f580 Test upload_build.
      from  0d80220 Add tests for BuildFarm.get_build().

http://gitweb.samba.org/?p=build-farm.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ed1f580fed5b2ca31fb0d879efdd291b4859084f
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Nov 12 00:21:28 2010 +0100

    Test upload_build.

-----------------------------------------------------------------------

Summary of changes:
 buildfarm/__init__.py        |    8 ++++++--
 buildfarm/data.py            |   34 +++++++++++++++++++---------------
 buildfarm/tests/test_data.py |   15 +++++++++++++++
 3 files changed, 40 insertions(+), 17 deletions(-)


Changeset truncated at 500 lines:

diff --git a/buildfarm/__init__.py b/buildfarm/__init__.py
index fdb197c..3bbfe4f 100644
--- a/buildfarm/__init__.py
+++ b/buildfarm/__init__.py
@@ -39,7 +39,11 @@ class Tree(object):
 
 
 def read_trees_from_conf(path):
-    """Read trees from a configuration file."""
+    """Read trees from a configuration file.
+
+    :param path: tree path
+    :return: Dictionary with trees
+    """
     ret = {}
     cfp = ConfigParser.ConfigParser()
     cfp.readfp(open(path))
@@ -182,5 +186,5 @@ class CachingBuildFarm(BuildFarm):
 
         perc = super(CachingBuildFarm, self).lcov_status(tree)
         if not self.readonly:
-            util.FileSave(cachefile, ret)
+            util.FileSave(cachefile, perc)
         return perc
diff --git a/buildfarm/data.py b/buildfarm/data.py
index 0e09b13..26f2775 100644
--- a/buildfarm/data.py
+++ b/buildfarm/data.py
@@ -169,16 +169,13 @@ class Build(object):
     """A single build of a tree on a particular host using a particular compiler.
     """
 
-    def __init__(self, store, tree, host, compiler, rev=None):
+    def __init__(self, store, basename, tree, host, compiler, rev=None):
         self._store = store
+        self.basename = basename
         self.tree = tree
         self.host = host
         self.compiler = compiler
         self.rev = rev
-        if rev is None:
-            self.basename = self._store.build_fname(self.tree, self.host, self.compiler)
-        else:
-            self.basename = self._store.build_fname(self.tree, self.host, self.compiler, self.rev)
 
     ###################
     # the mtime age is used to determine if builds are still happening
@@ -365,10 +362,11 @@ class UploadBuildResultStore(object):
         return False
 
     def get_build(self, tree, host, compiler):
-        logf = self.build_fname(tree, host, compiler) + ".log"
+        basename = self.build_fname(tree, host, compiler)
+        logf = "%s.log" % basename
         if not os.path.exists(logf):
             raise NoSuchBuildError(tree, host, compiler)
-        return Build(self, tree, host, compiler)
+        return Build(self, basename, tree, host, compiler)
 
 
 class CachingUploadBuildResultStore(UploadBuildResultStore):
@@ -386,10 +384,11 @@ class CachingUploadBuildResultStore(UploadBuildResultStore):
         return os.path.join(self.cachedir, "build.%s.%s.%s" % (tree, host, compiler))
 
     def get_build(self, tree, host, compiler):
-        logf = self.build_fname(tree, host, compiler) + ".log"
+        basename = self.build_fname(tree, host, compiler)
+        logf = "%s.log" % basename
         if not os.path.exists(logf):
             raise NoSuchBuildError(tree, host, compiler)
-        return CachingBuild(self, tree, host, compiler)
+        return CachingBuild(self, basename, tree, host, compiler)
 
 
 class BuildResultStore(object):
@@ -403,10 +402,11 @@ class BuildResultStore(object):
         self.path = path
 
     def get_build(self, tree, host, compiler, rev):
-        logf = self.build_fname(tree, host, compiler, rev) + ".log"
+        basename = self.build_fname(tree, host, compiler, rev)
+        logf = "%s.log" % basename
         if not os.path.exists(logf):
             raise NoSuchBuildError(tree, host, compiler, rev)
-        return Build(self, tree, host, compiler, rev)
+        return Build(self, basename, tree, host, compiler, rev)
 
     def build_fname(self, tree, host, compiler, rev):
         """get the name of the build file"""
@@ -442,10 +442,13 @@ class BuildResultStore(object):
         if commit_rev is not None:
             rev = commit_rev
 
+        if not rev:
+            raise Exception("Unable to find revision in %r log" % build)
+
         new_basename = self.build_fname(build.tree, build.host, build.compiler, rev)
-        os.rename(build.basename+".log", new_basename+".log")
+        os.link(build.basename+".log", new_basename+".log")
         if os.path.exists(build.basename+".err"):
-            os.rename(build.basename+".err", new_basename+".err")
+            os.link(build.basename+".err", new_basename+".err")
 
         # FIXME:
         # $st = $dbh->prepare("INSERT INTO build (tree, revision, commit_revision, host, compiler, checksum, age, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
@@ -475,10 +478,11 @@ class CachingBuildResultStore(BuildResultStore):
         self.readonly = readonly
 
     def get_build(self, tree, host, compiler, rev):
-        logf = self.build_fname(tree, host, compiler, rev) + ".log"
+        basename = self.build_fname(tree, host, compiler, rev)
+        logf = "%s.log" % basename
         if not os.path.exists(logf):
             raise NoSuchBuildError(tree, host, compiler, rev)
-        return CachingBuild(self, tree, host, compiler, rev)
+        return CachingBuild(self, basename, tree, host, compiler, rev)
 
     def cache_fname(self, tree, host, compiler, rev):
         return os.path.join(self.cachedir, "build.%s.%s.%s-%s" % (tree, host, compiler, rev))
diff --git a/buildfarm/tests/test_data.py b/buildfarm/tests/test_data.py
index 9a5f867..0559f8e 100755
--- a/buildfarm/tests/test_data.py
+++ b/buildfarm/tests/test_data.py
@@ -105,6 +105,21 @@ error3""")
         build = self.x.get_build("tdb", "charis", "cc", "12")
         self.assertEquals(3, build.err_count())
 
+    def test_upload_build(self):
+        path = self.create_mock_logfile("tdb", "charis", "cc", contents="""
+BUILD COMMIT REVISION: myrev
+""")
+        build = data.Build(None, path[:-4], "tdb", "charis", "cc")
+        self.x.upload_build(build)
+        uploaded_build = self.x.get_build("tdb", "charis", "cc", "myrev")
+        self.assertEquals(uploaded_build.log_checksum(), build.log_checksum())
+
+    def test_upload_build_no_rev(self):
+        path = self.create_mock_logfile("tdb", "charis", "cc", contents="""
+""")
+        build = data.Build(None, path[:-4], "tdb", "charis", "cc")
+        self.assertRaises(Exception, self.x.upload_build, build)
+
 
 
 class BuildResultStoreTests(BuildFarmTestCase,BuildResultStoreTestBase):


-- 
build.samba.org


More information about the samba-cvs mailing list