def get_new_builds(self):
hostnames = set([host.name for host in self.hostdb.hosts()])
for build in self.upload_builds.get_new_builds():
- if build.tree in self.trees and build.compiler in self.compilers and build.host in hostnames:
+ if (build.tree in self.trees and
+ build.compiler in self.compilers and
+ build.host in hostnames):
yield build
def get_last_builds(self):
def get_host_builds(self, host):
from buildfarm import data
+ ret = []
for compiler in self.compilers:
for tree in sorted(self.trees.keys()):
try:
- yield self.get_build(tree, host, compiler)
+ ret.append(self.get_build(tree, host, compiler))
except data.NoSuchBuildError:
pass
+ ret.sort(reverse=True)
+ return ret
return ret
+def distinct_builds(builds):
+ done = set()
+ for build in builds:
+ key = (build.tree, build.compiler, build.host)
+ if key in done:
+ continue
+ done.add(key)
+ yield build
+
+
class StormCachingBuildFarm(BuildFarm):
def __init__(self, path=None, store=None, timeout=0.5):
def get_host_builds(self, host):
result = self._get_store().find(StormBuild, StormBuild.host == host)
- return result.group_by(StormBuild.compiler, StormBuild.tree)
+ return distinct_builds(result.order_by(Desc(StormBuild.upload_time)))
def get_tree_builds(self, tree):
result = self._get_store().find(StormBuild, StormBuild.tree == tree)
- return result.group_by(StormBuild.host, StormBuild.compiler).order_by(
- Desc(StormBuild.upload_time))
+ return distinct_builds(result.order_by(Desc(StormBuild.upload_time)))
def get_last_builds(self):
result = self._get_store().find(StormBuild)
- return result.group_by(
- StormBuild.tree, StormBuild.compiler, StormBuild.host).order_by(
- Desc(StormBuild.upload_time))
+ return distinct_builds(result.order_by(Desc(StormBuild.upload_time)))
def commit(self):
self.store.commit()
self.assertEquals([], list(self.x.get_tree_builds("trival")))
def test_get_tree_builds(self):
- path = self.upload_mock_logfile(self.x.builds, "tdb", "myhost", "cc",
+ path = self.upload_mock_logfile(self.x.builds, "tdb", "myhost", "gcc",
stdout_contents="BUILD COMMIT REVISION: 12\n", mtime=1200)
path = self.upload_mock_logfile(self.x.builds, "tdb", "myhost", "cc",
stdout_contents="BUILD COMMIT REVISION: 13\n", mtime=1300)
path = self.upload_mock_logfile(self.x.builds, "tdb", "myhost", "cc",
stdout_contents="BUILD COMMIT REVISION: 42\n", mtime=4200)
builds = list(self.x.get_tree_builds("tdb"))
- self.assertEquals(["42", "13", "12"], [x.revision for x in builds])
+ self.assertEquals(["42", "12"], [x.revision for x in builds])
def test_get_last_builds(self):
path = self.upload_mock_logfile(self.x.builds, "other", "myhost", "cc",