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

Jelmer Vernooij jelmer at samba.org
Fri Dec 3 21:10:57 MST 2010


The branch, master has been updated
       via  4ac0aa7 Subunit diff.
      from  2d615eb Fix image urls.

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


- Log -----------------------------------------------------------------
commit 4ac0aa7f50670346e22606e2b2eb1febdcca40f8
Author: jelmer at samba.org <jelmer at samba.org>
Date:   Sat Dec 4 05:11:27 2010 +0100

    Subunit diff.

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

Summary of changes:
 buildfarm/build.py            |    8 ++++----
 buildfarm/tests/test_build.py |   14 +++++++-------
 buildfarm/web/__init__.py     |   20 +++++++++++++++++++-
 import-and-analyse.py         |   13 +++----------
 4 files changed, 33 insertions(+), 22 deletions(-)


Changeset truncated at 500 lines:

diff --git a/buildfarm/build.py b/buildfarm/build.py
index 1c73cb2..4108ac0 100644
--- a/buildfarm/build.py
+++ b/buildfarm/build.py
@@ -581,7 +581,7 @@ class BuildResultStore(object):
             raise NoSuchBuildError(None, None, None, None)
         return ret
 
-    def get_previous_revision(self, tree, host, compiler, revision):
+    def get_previous_build(self, tree, host, compiler, revision):
         from buildfarm.sqldb import Cast
         cur_build = self.get_build(tree, host, compiler, revision)
 
@@ -595,9 +595,9 @@ class BuildResultStore(object):
         prev_build = result.first()
         if prev_build is None:
             raise NoSuchBuildError(tree, host, compiler, revision)
-        return prev_build.revision
+        return prev_build
 
-    def get_latest_revision(self, tree, host, compiler):
+    def get_latest_build(self, tree, host, compiler):
         result = self.store.find(StormBuild,
             StormBuild.tree == tree,
             StormBuild.host == host,
@@ -606,4 +606,4 @@ class BuildResultStore(object):
         build = result.first()
         if build is None:
             raise NoSuchBuildError(tree, host, compiler)
-        return build.revision
+        return build
diff --git a/buildfarm/tests/test_build.py b/buildfarm/tests/test_build.py
index b3c7a45..6facb79 100755
--- a/buildfarm/tests/test_build.py
+++ b/buildfarm/tests/test_build.py
@@ -52,16 +52,16 @@ BUILD COMMIT REVISION: myrev
 BUILD COMMIT REVISION: myotherrev
 """)
         self.x.upload_build(Build(path[:-4], "tdb", "charis", "cc"))
-        self.assertRaises(NoSuchBuildError, self.x.get_previous_revision, "tdb", "charis", "cc", "unknown")
-        self.assertRaises(NoSuchBuildError, self.x.get_previous_revision, "tdb", "charis", "cc", "myrev")
-        self.assertEquals("myrev", self.x.get_previous_revision("tdb", "charis", "cc", "myotherrev"))
+        self.assertRaises(NoSuchBuildError, self.x.get_previous_build, "tdb", "charis", "cc", "unknown")
+        self.assertRaises(NoSuchBuildError, self.x.get_previous_build, "tdb", "charis", "cc", "myrev")
+        self.assertEquals("myrev", self.x.get_previous_build("tdb", "charis", "cc", "myotherrev").revision)
 
     def test_get_latest_revision(self):
         path = self.create_mock_logfile("tdb", "charis", "cc", "22", contents="""
 BUILD COMMIT REVISION: myrev
 """)
         self.x.upload_build(Build(path[:-4], "tdb", "charis", "cc"))
-        self.assertEquals("myrev", self.x.get_latest_revision("tdb", "charis", "cc"))
+        self.assertEquals("myrev", self.x.get_latest_build("tdb", "charis", "cc").revision)
 
     def test_build_fname(self):
         self.assertEquals(
@@ -160,11 +160,11 @@ BUILD COMMIT REVISION: myrev
         build = Build(path[:-4], "tdb", "charis", "cc")
         self.assertRaises(Exception, self.x.upload_build, build)
 
-    def test_get_previous_revision(self):
-        self.assertRaises(NoSuchBuildError, self.x.get_previous_revision, "tdb", "charis", "cc", "12")
+    def test_get_previous_build(self):
+        self.assertRaises(NoSuchBuildError, self.x.get_previous_build, "tdb", "charis", "cc", "12")
 
     def test_get_latest_revision_none(self):
-        self.assertRaises(NoSuchBuildError, self.x.get_latest_revision, "tdb", "charis", "cc")
+        self.assertRaises(NoSuchBuildError, self.x.get_latest_build, "tdb", "charis", "cc")
 
     def test_get_old_builds_none(self):
         self.assertEquals([],
diff --git a/buildfarm/web/__init__.py b/buildfarm/web/__init__.py
index f58cb9a..ebbbd36 100755
--- a/buildfarm/web/__init__.py
+++ b/buildfarm/web/__init__.py
@@ -466,7 +466,15 @@ class ViewBuildPage(BuildFarmPage):
 
         yield "<div id='log'>"
 
-        yield "<p><a href='%s/+subunit'>Subunit output</a></p>" % build_uri(myself, build)
+        yield "<p><a href='%s/+subunit'>Subunit output</a>" % build_uri(myself, build)
+        try:
+            previous_build = self.buildfarm.builds.get_previous_build(build.tree, build.host, build.compiler. build.revision)
+        except NoSuchBuildError:
+            pass
+        else:
+            yield ", <a href='%s/+subunit-diff/%s'>diff against previous</a>" % (
+                build_uri(myself, build), previous.log_checksum())
+        yield "</p>"
         yield "<p><a href='%s/+stdout'>Standard output (as plain text)</a>, " % build_uri(myself, build)
         yield "<a href='%s/+stderr'>Standard error (as plain text)</a>" % build_uri(myself, build)
         yield "</p>"
@@ -1011,6 +1019,16 @@ class BuildFarmApp(object):
                         ('Content-type', 'text/plain; charset=utf-8'),
                         ('Content-Disposition', 'attachment; filename="%s.%s.%s-%s.err"' % (build.tree, build.host, build.compiler, build.revision))])
                     yield build.read_err().read()
+                elif subfn == "+subunit-diff":
+                    start_response('200 OK', [
+                        ('Content-type', 'text/plain; charset=utf-8')])
+                    subunit_this = build.read_subunit().readlines()
+                    other_build_checksum = wsgiref.util.shift_path_info(environ)
+                    other_build = self.buildfarm.builds.get_by_checksum(other_build_checksum)
+                    subunit_other = other_build.read_subunit().readlines()
+                    import difflib
+                    yield "".join(difflib.unified_diff(subunit_other, subunit_this))
+
                 elif subfn in ("", None):
                     start_response('200 OK', [
                         ('Content-type', 'text/html; charset=utf-8')])
diff --git a/import-and-analyse.py b/import-and-analyse.py
index 921e156..2273b42 100755
--- a/import-and-analyse.py
+++ b/import-and-analyse.py
@@ -125,22 +125,15 @@ for build in buildfarm.get_new_builds():
     try:
         if opts.dry_run:
             # Perhaps this is a dry run and rev is not in the database yet?
-            prev_rev = buildfarm.builds.get_latest_revision(build.tree, build.host, build.compiler)
+            prev_build = buildfarm.builds.get_latest_build(build.tree, build.host, build.compiler)
         else:
-            prev_rev = buildfarm.builds.get_previous_revision(build.tree, build.host, build.compiler, rev)
+            prev_build = buildfarm.builds.get_previous_build(build.tree, build.host, build.compiler, rev)
     except NoSuchBuildError:
         if opts.verbose >= 1:
             print "Unable to find previous build for %s,%s,%s" % (build.tree, build.host, build.compiler)
         # Can't send a nastygram until there are 2 builds..
     else:
-        try:
-            assert prev_rev is not None
-            prev_build = buildfarm.builds.get_build(build.tree, build.host, build.compiler, prev_rev)
-        except NoSuchBuildError:
-            if opts.verbose >= 1:
-                print "Previous build %s has disappeared" % prev_build
-        else:
-            check_and_send_mails(build, prev_build)
+        check_and_send_mails(build, prev_build)
 
     if not opts.dry_run:
         old_build.remove()


-- 
build.samba.org


More information about the samba-cvs mailing list