commit 36602eca84faa0db0a6b3d461eb9abbe36819415 from: jelmer@jelmer.uk date: Mon Oct 28 13:45:14 2024 UTC Add ObjectStore.iter_prefix commit - afb120714f2a8ef93a58a99cf7af042c7f9b7bb9 commit + 36602eca84faa0db0a6b3d461eb9abbe36819415 blob - 0e7886f680e54e6e0e0534c1062ee3ec2198671e blob + 37deae8cc77160b4de42eb1d14e80a8da475ce37 --- dulwich/object_store.py +++ dulwich/object_store.py @@ -1041,7 +1041,8 @@ class DiskObjectStore(PackBasedObjectStore): def iter_prefix(self, prefix): if len(prefix) < 2: - return super().iter_prefix(prefix) + yield from super().iter_prefix(prefix) + return seen = set() dir = prefix[:2].decode() rest = prefix[2:].decode() @@ -1053,7 +1054,11 @@ class DiskObjectStore(PackBasedObjectStore): yield sha for p in self.packs: - bin_prefix = binascii.unhexlify(prefix) if len(prefix) % 2 == 0 else binascii.unhexlify(prefix[:-1]) + bin_prefix = ( + binascii.unhexlify(prefix) + if len(prefix) % 2 == 0 + else binascii.unhexlify(prefix[:-1]) + ) for sha in p.index.iter_prefix(bin_prefix): sha = sha_to_hex(sha) if sha.startswith(prefix) and sha not in seen: blob - 47f4fcfc2f0fba13b71a0d6caaa2998ead2784fb blob + aba93f4f9469844bbd81e40a6a74da1ab04576fb --- dulwich/tests/test_object_store.py +++ dulwich/tests/test_object_store.py @@ -238,8 +238,14 @@ class ObjectStoreTests: def test_iter_prefix(self): self.store.add_object(testobject) + self.assertEqual([testobject.id], list(self.store.iter_prefix(testobject.id))) + self.assertEqual( + [testobject.id], list(self.store.iter_prefix(testobject.id[:10])) + ) + self.assertEqual( + [testobject.id], list(self.store.iter_prefix(testobject.id[:4])) + ) self.assertEqual([testobject.id], list(self.store.iter_prefix(b""))) - self.assertEqual([testobject.id], list(self.store.iter_prefix(testobject.id[:10]))) class PackBasedObjectStoreTests(ObjectStoreTests):