Changeset 84010d1db06f…
Parent 320d6e8e7c2e…
by
Changes to 2 files · Browse files at 84010d1db06f Showing diff from parent 320d6e8e7c2e Diff from another changeset...
@@ -629,7 +629,7 @@ def _unpack_offset(self, i):
offset = self._pack_offset_table_offset + i * 4
offset = unpack_from('>L', self._contents, offset)[0]
- if (offset&(2**31)):
+ if offset & (2**31):
offset = self._pack_offset_largetable_offset + (offset&(2**31-1)) * 8L
offset = unpack_from('>Q', self._contents, offset)[0]
return offset
@@ -1566,7 +1566,8 @@ f.write(struct.pack('>L', fan_out_table[i]))
fan_out_table[i+1] += fan_out_table[i]
for (name, offset, entry_checksum) in entries:
- assert offset <= 0xffffffff
+ if not (offset <= 0xffffffff):
+ raise TypeError("pack format 1 only supports offsets < 2Gb")
f.write(struct.pack('>L20s', offset, name))
assert len(pack_checksum) == 20
f.write(pack_checksum)
|
@@ -476,17 +476,36 @@ self.assertEqual(idx.get_pack_checksum(), pack_checksum)
self.assertEqual(0, len(idx))
+ def test_large(self):
+ entry1_sha = hex_to_sha('4e6388232ec39792661e2e75db8fb117fc869ce6')
+ entry2_sha = hex_to_sha('e98f071751bd77f59967bfa671cd2caebdccc9a2')
+ entries = [(entry1_sha, 0xf2972d0830529b87, 24),
+ (entry2_sha, (~0xf2972d0830529b87)&(2**64-1), 92)]
+ if not self._supports_large:
+ self.assertRaises(TypeError, self.index, 'single.idx',
+ entries, pack_checksum)
+ return
+ idx = self.index('single.idx', entries, pack_checksum)
+ self.assertEqual(idx.get_pack_checksum(), pack_checksum)
+ self.assertEqual(2, len(idx))
+ actual_entries = list(idx.iterentries())
+ self.assertEqual(len(entries), len(actual_entries))
+ for mine, actual in zip(entries, actual_entries):
+ my_sha, my_offset, my_crc = mine
+ actual_sha, actual_offset, actual_crc = actual
+ self.assertEqual(my_sha, actual_sha)
+ self.assertEqual(my_offset, actual_offset)
+ if self._has_crc32_checksum:
+ self.assertEqual(my_crc, actual_crc)
+ else:
+ self.assertTrue(actual_crc is None)
+
def test_single(self):
entry_sha = hex_to_sha('6f670c0fb53f9463760b7295fbb814e965fb20c8')
my_entries = [(entry_sha, 178, 42)]
- if self._has_crc32_checksum:
- entry_sha = hex_to_sha('4e6388232ec39792661e2e75db8fb117fc869ce6')
- my_entries.append([entry_sha, 0xf2972d0830529b87, 24])
- entry_sha = hex_to_sha('e98f071751bd77f59967bfa671cd2caebdccc9a2')
- my_entries.append([entry_sha, (~0xf2972d0830529b87)&(2**64-1), 92])
idx = self.index('single.idx', my_entries, pack_checksum)
self.assertEqual(idx.get_pack_checksum(), pack_checksum)
- self.assertEqual(len(my_entries), len(idx))
+ self.assertEqual(1, len(idx))
actual_entries = list(idx.iterentries())
self.assertEqual(len(my_entries), len(actual_entries))
for mine, actual in zip(my_entries, actual_entries):
@@ -530,6 +549,7 @@ def setUp(self):
TestCase.setUp(self)
self._has_crc32_checksum = True
+ self._supports_large = True
def index(self, filename, entries, pack_checksum):
return MemoryPackIndex(entries, pack_checksum)
@@ -545,6 +565,7 @@ BaseTestFilePackIndexWriting.setUp(self)
self._has_crc32_checksum = False
self._expected_version = 1
+ self._supports_large = False
self._write_fn = write_pack_index_v1
def tearDown(self):
@@ -558,6 +579,7 @@ TestCase.setUp(self)
BaseTestFilePackIndexWriting.setUp(self)
self._has_crc32_checksum = True
+ self._supports_large = True
self._expected_version = 2
self._write_fn = write_pack_index_v2
|
Loading...