f = open(self._filename, 'rb')
try:
header = f.read(12)
+ f.seek(self._size-20)
+ self._stored_checksum = f.read(20)
finally:
f.close()
assert header[:4] == "PACK"
"""Returns the number of objects in this pack."""
return self._num_objects
+ def calculate_checksum(self):
+ f = open(self._filename, 'rb')
+ try:
+ map = simple_mmap(f, 0, self._size)
+ return hashlib.sha1(map[:-20]).digest()
+ finally:
+ f.close()
+
+ def check(self):
+ return (self.calculate_checksum() == self._stored_checksum)
+
def get_object_at(self, offset):
"""Given an offset in to the packfile return the object that is there.
return obj
-class SHA1Writer(f):
+class SHA1Writer(object):
def __init__(self, f):
self.f = f
self.assertEquals("\xf2\x84\x8e*\xd1o2\x9a\xe1\xc9.;\x95\xe9\x18\x88\xda\xa5\xbd\x01", str(p.get_stored_checksums()[1]))
self.assertEquals( 'r\x19\x80\xe8f\xaf\x9a_\x93\xadgAD\xe1E\x9b\x8b\xa3\xe7\xb7' , str(p.get_stored_checksums()[0]))
- def test_check(self):
+ def test_index_check(self):
p = self.get_pack_index(pack1_sha)
self.assertEquals(True, p.check())
+ def test_index_check(self):
+ p = self.get_pack_data(pack1_sha)
+ self.assertEquals(True, p.check())
+
def test_iterentries(self):
p = self.get_pack_index(pack1_sha)
self.assertEquals([('og\x0c\x0f\xb5?\x94cv\x0br\x95\xfb\xb8\x14\xe9e\xfb \xc8', 178, None), ('\xb2\xa2vj(y\xc2\t\xab\x11v\xe7\xe7x\xb8\x1a\xe4"\xee\xaa', 138, None), ('\xf1\x8f\xaa\x16S\x1a\xc5p\xa3\xfd\xc8\xc7\xca\x16h%H\xda\xfd\x12', 12, None)], list(p.iterentries()))