Fix use with multiple builds with the same checksum.
authorJelmer Vernooij <jelmer@samba.org>
Mon, 22 Nov 2010 02:22:17 +0000 (03:22 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 22 Nov 2010 02:22:17 +0000 (03:22 +0100)
buildfarm/sqldb.py

index 47c33d329ce8dcdb548ee6be6404bcd408b64720..56be24b403ef15d4bfc02edc59a9c74b24cbede6 100644 (file)
@@ -173,7 +173,8 @@ class StormCachingBuildResultStore(BuildResultStore):
         self.store = store
 
     def __contains__(self, build):
-        return (self._get_by_checksum(build) is not None)
+        return not (self.store.find(StormBuild,
+            Cast(StormBuild.checksum, "TEXT") == build.log_checksum()).is_empty())
 
     def get_previous_revision(self, tree, host, compiler, revision):
         result = self.store.find(StormBuild,
@@ -208,13 +209,9 @@ class StormCachingBuildResultStore(BuildResultStore):
             raise NoSuchBuildError(tree, host, compiler)
         return build.revision
 
-    def _get_by_checksum(self, build):
-        result = self.store.find(StormBuild,
-            Cast(StormBuild.checksum, "TEXT") == build.log_checksum())
-        return result.one()
-
     def upload_build(self, build):
-        existing_build = self._get_by_checksum(build)
+        existing_build = self.store.find(StormBuild,
+            Cast(StormBuild.checksum, "TEXT") == build.log_checksum()).order_by(StormBuild.upload_time).first()
         if existing_build is not None:
             # Already present
             assert build.tree == existing_build.tree