Prechádzať zdrojové kódy

iter_prefix: fix handling of missing loose object directories (#1428)

Jelmer Vernooij 4 mesiacov pred
rodič
commit
e7e83d6e97
3 zmenil súbory, kde vykonal 17 pridanie a 6 odobranie
  1. 5 0
      NEWS
  2. 9 6
      dulwich/object_store.py
  3. 3 0
      dulwich/tests/test_object_store.py

+ 5 - 0
NEWS

@@ -1,3 +1,8 @@
+0.22.6	UNRELEASED
+
+ * ``ObjectStore.iter_prefix``: fix handling of missing
+   loose object directories. (Jelmer Vernooij)
+
 0.22.5	2024-11-07
 
  * Drop support for Python 3.8. (Jelmer Vernooij)

+ 9 - 6
dulwich/object_store.py

@@ -1039,12 +1039,15 @@ class DiskObjectStore(PackBasedObjectStore):
         seen = set()
         dir = prefix[:2].decode()
         rest = prefix[2:].decode()
-        for name in os.listdir(os.path.join(self.path, dir)):
-            if name.startswith(rest):
-                sha = os.fsencode(dir + name)
-                if sha not in seen:
-                    seen.add(sha)
-                    yield sha
+        try:
+            for name in os.listdir(os.path.join(self.path, dir)):
+                if name.startswith(rest):
+                    sha = os.fsencode(dir + name)
+                    if sha not in seen:
+                        seen.add(sha)
+                        yield sha
+        except FileNotFoundError:
+            pass
 
         for p in self.packs:
             bin_prefix = (

+ 3 - 0
dulwich/tests/test_object_store.py

@@ -247,6 +247,9 @@ class ObjectStoreTests:
         )
         self.assertEqual([testobject.id], list(self.store.iter_prefix(b"")))
 
+    def test_iter_prefix_not_found(self):
+        self.assertEqual([], list(self.store.iter_prefix(b"1" * 40)))
+
 
 class PackBasedObjectStoreTests(ObjectStoreTests):
     def tearDown(self):