Make checking for objects present a bit faster.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 26 Mar 2009 20:04:34 +0000 (20:04 +0000)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 26 Mar 2009 20:04:34 +0000 (20:04 +0000)
dulwich/object_store.py

index 1e4bd13f3fe25ac2e93a7484993bb48778722a52..63cd7b96f8890850998c26001a54f44c26b8aa70 100644 (file)
@@ -60,12 +60,13 @@ class ObjectStore(object):
         return ObjectStoreIterator(self, shas)
 
     def __contains__(self, sha):
-        # TODO: This can be more efficient
-        try:
-            self[sha]
+        for pack in self.packs:
+            if sha in pack:
+                return True
+        ret = self._get_shafile(sha)
+        if ret is not None:
             return True
-        except KeyError:
-            return False
+        return False
 
     @property
     def packs(self):
@@ -256,11 +257,7 @@ class ObjectStoreIterator(ObjectIterator):
 
         :param needle: SHA1 of the object to check for
         """
-        # FIXME: This could be more efficient
-        for sha, path in self.itershas():
-            if sha == needle:
-                return True
-        return False
+        return needle in self.store
 
     def __getitem__(self, key):
         """Find an object by SHA1."""