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

Jelmer Vernooij jelmer at samba.org
Sat Aug 2 12:29:23 MDT 2014


The branch, master has been updated
       via  0996a81 Fix whitespace, add basic tests for get_summary_builds.
       via  9fe0dc1 Merge branch 'query4summarypage' of git://github.com/krishnatejaperannagari/build-farm into summary-optimization
       via  9dee960 changes to reviews
       via  0ca8317 query and conversion completed
      from  338f129 Remove trailing whitespace.

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


- Log -----------------------------------------------------------------
commit 0996a81eab145e1f866ed1b03e043712a35ec2a5
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Sat Aug 2 20:11:18 2014 +0200

    Fix whitespace, add basic tests for get_summary_builds.

commit 9fe0dc147edce633cbf2cd333d1ba0d98f878394
Merge: 338f129aae35054dd350677b19170279549c22db 9dee960b26fa090b2d0fb8449430e95246f8998c
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Sat Aug 2 20:03:58 2014 +0200

    Merge branch 'query4summarypage' of git://github.com/krishnatejaperannagari/build-farm into summary-optimization

commit 9dee960b26fa090b2d0fb8449430e95246f8998c
Author: krishnatejaperannagari <krishnatejaperannagari at gmail.com>
Date:   Tue Jul 1 16:13:53 2014 +0530

    changes to reviews
    
    Signed-off-by: krishnatejaperannagari <krishnatejaperannagari at gmail.com>

commit 0ca8317f8d3bfc552dc9859c2a8e5edd0f428a35
Author: krishnatejaperannagari <krishnatejaperannagari at gmail.com>
Date:   Mon Jun 23 14:03:26 2014 +0530

    query and conversion completed
    
    Signed-off-by: krishnatejaperannagari <krishnatejaperannagari at gmail.com>

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

Summary of changes:
 buildfarm/__init__.py             |   21 +++++++++++++++++++++
 buildfarm/build.py                |    3 +--
 buildfarm/tests/test_buildfarm.py |   19 +++++++++++++++++++
 buildfarm/web/__init__.py         |   11 +++++------
 4 files changed, 46 insertions(+), 8 deletions(-)


Changeset truncated at 500 lines:

diff --git a/buildfarm/__init__.py b/buildfarm/__init__.py
index 7c4428e..52ac085 100644
--- a/buildfarm/__init__.py
+++ b/buildfarm/__init__.py
@@ -17,6 +17,7 @@
 #   along with this program; if not, write to the Free Software
 #   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
+from buildfarm.build import BuildStatus
 from buildfarm.sqldb import distinct_builds, Cast, StormBuild, setup_schema, StormHostDatabase
 from buildfarm.tree import Tree
 from storm.database import create_database
@@ -143,6 +144,26 @@ class BuildFarm(object):
         result = self._get_store().find(StormBuild)
         return distinct_builds(result.order_by(Desc(StormBuild.upload_time)))
 
+    def get_summary_builds(self):
+        """Return last build age, status for each tree/host/compiler.
+
+        :return: iterator over tree, status
+        """
+        store = self._get_store()
+        return ((tree, BuildStatus.__deserialize__(status_str))
+                for (tree, status_str) in store.execute("""
+SELECT obd.tree, obd.status AS status_str
+FROM build obd
+INNER JOIN(
+    SELECT MAX(age) age, tree, host, compiler
+    FROM build
+    GROUP BY tree, host, compiler
+) ibd ON obd.age = ibd.age AND
+         obd.tree = ibd.tree AND
+         obd.host = ibd.host AND
+         obd.compiler = ibd.compiler;
+"""))
+
     def get_tree_builds(self, tree):
         result = self._get_store().find(StormBuild,
             Cast(StormBuild.tree, "TEXT") == Cast(tree, "TEXT"))
diff --git a/buildfarm/build.py b/buildfarm/build.py
index fae37a1..1348a96 100644
--- a/buildfarm/build.py
+++ b/buildfarm/build.py
@@ -566,8 +566,7 @@ class BuildResultStore(object):
         os.link(build.basename+".log", new_basename+".log")
         if os.path.exists(build.basename+".err"):
             os.link(build.basename+".err", new_basename+".err")
-        new_build = StormBuild(new_basename, build.tree, build.host,
-            build.compiler, rev)
+        new_build = StormBuild(new_basename, build.tree, build.host, build.compiler, rev)
         new_build.checksum = build.log_checksum()
         new_build.upload_time = build.upload_time
         new_build.status_str = build.status().__serialize__()
diff --git a/buildfarm/tests/test_buildfarm.py b/buildfarm/tests/test_buildfarm.py
index d78ed68..9091bf8 100644
--- a/buildfarm/tests/test_buildfarm.py
+++ b/buildfarm/tests/test_buildfarm.py
@@ -119,6 +119,25 @@ class BuildFarmTests(BuildFarmTestCase):
         self.assertEquals("12", builds[1].revision_details())
         self.assertEquals("other", builds[1].tree)
 
+    def test_get_summary_builds_empty(self):
+        self.assertEquals([], list(self.x.get_summary_builds()))
+
+    def test_get_summary_builds(self):
+        path = self.upload_mock_logfile(self.x.builds, "other", "myhost", "cc",
+            "BUILD COMMIT REVISION: 12\n", mtime=1200)
+        path = self.upload_mock_logfile(self.x.builds, "trivial", "myhost", "cc",
+            "BUILD COMMIT REVISION: 13\n", mtime=1300)
+        path = self.upload_mock_logfile(self.x.builds, "trivial", "myhost", "cc",
+            "BUILD COMMIT REVISION: 42\n", mtime=4200)
+        builds = list(self.x.get_summary_builds())
+        self.assertEquals(2, len(builds))
+        self.assertEquals(4200, builds[0].upload_time)
+        self.assertEquals("42", builds[0].revision_details())
+        self.assertEquals("trivial", builds[0].tree)
+        self.assertEquals(1200, builds[1].upload_time)
+        self.assertEquals("12", builds[1].revision_details())
+        self.assertEquals("other", builds[1].tree)
+
     def test_get_host_builds_empty(self):
         self.assertEquals([], list(self.x.get_host_builds("myhost")))
 
diff --git a/buildfarm/web/__init__.py b/buildfarm/web/__init__.py
index b1f0fb4..0368022 100755
--- a/buildfarm/web/__init__.py
+++ b/buildfarm/web/__init__.py
@@ -727,16 +727,15 @@ class ViewSummaryPage(BuildFarmPage):
         # output when we want
         broken_table = ""
 
-        builds = self.buildfarm.get_last_builds()
+        builds = self.buildfarm.get_summary_builds()
 
-        for build in builds:
-            host_count[build.tree]+=1
-            status = build.status()
+        for tree, status in builds:
+            host_count[tree]+=1
 
             if status.failed:
-                broken_count[build.tree]+=1
+                broken_count[tree]+=1
                 if "panic" in status.other_failures:
-                    panic_count[build.tree]+=1
+                    panic_count[tree]+=1
         return (host_count, broken_count, panic_count)
 
     def render_text(self, myself):


-- 
build.samba.org


More information about the samba-cvs mailing list