Parcourir la source

Add PackData.iterobjects().

Jelmer Vernooij il y a 16 ans
Parent
commit
12c4ee2aa9
2 fichiers modifiés avec 13 ajouts et 6 suppressions
  1. 9 6
      dulwich/pack.py
  2. 4 0
      dulwich/tests/test_pack.py

+ 9 - 6
dulwich/pack.py

@@ -53,10 +53,12 @@ def read_zlib(data, offset, dec_size):
     x = ""
     fed = 0
     while obj.unused_data == "":
-        fed += 1024
-        x += obj.decompress(data[offset+fed-1024:offset+fed])
+        add = data[offset+fed:offset+fed+1024]
+        fed += len(add)
+        x += obj.decompress(add)
     assert len(x) == dec_size
-    return x, fed-len(obj.unused_data)
+    comp_len = fed-len(obj.unused_data)
+    return x, comp_len
 
 
 def hex_to_sha(hex):
@@ -324,15 +326,16 @@ class PackData(object):
     finally:
         f.close()
 
-  def iterentries(self):
+  def iterobjects(self):
     """Yields (name, offset, crc32 checksum)."""
     offset = self._header_size
     f = open(self._filename, 'rb')
-    f.close()
-    for i in len(self):
+    for i in range(len(self)):
         map = simple_mmap(f, offset, self._size-offset)
         (type, obj, total_size) = self._unpack_object(map)
+        yield type, obj
         offset += total_size
+    f.close()
 
   def check(self):
     return (self.calculate_checksum() == self._stored_checksum)

+ 4 - 0
dulwich/tests/test_pack.py

@@ -106,6 +106,10 @@ class TestPackData(PackTests):
     p = self.get_pack_data(pack1_sha)
     self.assertEquals(True, p.check())
 
+  def test_iterobjects(self):
+    p = self.get_pack_data(pack1_sha)
+    self.assertEquals([(1, 'tree b2a2766a2879c209ab1176e7e778b81ae422eeaa\nauthor James Westby <jw+debian@jameswestby.net> 1174945067 +0100\ncommitter James Westby <jw+debian@jameswestby.net> 1174945067 +0100\n\nTest commit\n'), (2, '100644 a\x00og\x0c\x0f\xb5?\x94cv\x0br\x95\xfb\xb8\x14\xe9e\xfb \xc8'), (3, 'test 1\n')], list(p.iterobjects()))
+
 
 class TestPack(PackTests):