a pointer in to the corresponding packfile.
"""
+import hashlib
import mmap
import os
import struct
def __len__(self):
return len(self.array) - self.offset
+ def __str__(self):
+ return str(self.array[self.offset:])
+
mem = mmap.mmap(f.fileno(), size+offset, access=access)
if offset == 0:
return mem
(ret[i],) = struct.unpack(">L", contents[i*4:(i+1)*4])
return ret
- def file_sha1(self):
- """Return the SHA1 file stored for this header file itself."""
+ def check(self):
+ """Check that the stored checksum matches the actual checksum."""
+ return self.get_checksum() == self.get_stored_checksum()
+
+ def get_checksum(self):
+ f = open(self._filename, 'r')
+ try:
+ contents = simple_mmap(f, 0, self._size-20)
+ return hashlib.sha1(contents).digest()
+ finally:
+ f.close()
+
+ def get_stored_checksum(self):
+ """Return the SHA1 checksum stored for this header file itself."""
f = open(self._filename, 'r')
try:
- return simple_mmap(f, self._size-20, 20)
+ return str(simple_mmap(f, self._size-20, 20))
finally:
f.close()
"like that" % self._filename
f = open(self._filename, 'rb')
try:
- map = simple_mmap(f, offset, size)
+ map = simple_mmap(f, offset, size-offset)
return self._get_object_at(map)
finally:
f.close()
p = self.get_pack_index(pack1_sha)
self.assertEquals(3, len(p))
- def test_file_sha1(self):
+ def test_get_stored_checksum(self):
p = self.get_pack_index(pack1_sha)
- self.assertEquals("bla", p.file_sha1())
+ self.assertEquals("\xf2\x84\x8e*\xd1o2\x9a\xe1\xc9.;\x95\xe9\x18\x88\xda\xa5\xbd\x01", str(p.get_stored_checksum()))
+
+ def test_check(self):
+ p = self.get_pack_index(pack1_sha)
+ self.assertEquals(True, p.check())
class TestHexToSha(unittest.TestCase):