Kiln » Dependencies » Dulwich Read More
Clone URL:  
Pushed to one repository · View In Graph Contained in master

add support for writing large pack files

Changeset fd9f85cc0d9b

Parent 4e6388232ec3

by Jameson Nash

Changes to one file · Browse files at fd9f85cc0d9b Showing diff from parent 4e6388232ec3 Diff from another changeset...

Change 1 of 4 Show Entire File dulwich/​pack.py Stacked
 
618
619
620
621
622
623
624
 
1567
1568
1569
 
1570
1571
1572
 
1714
1715
1716
 
1717
1718
1719
 
1722
1723
1724
1725
1726
1727
 
 
 
 
 
 
 
1728
1729
1730
 
618
619
620
 
621
622
623
 
1566
1567
1568
1569
1570
1571
1572
 
1714
1715
1716
1717
1718
1719
1720
 
1723
1724
1725
 
 
 
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
@@ -618,7 +618,6 @@
  self._pack_offset_largetable_offset = (self._pack_offset_table_offset +   4 * len(self))   -   def _unpack_entry(self, i):   return (self._unpack_name(i), self._unpack_offset(i),   self._unpack_crc32_checksum(i)) @@ -1567,6 +1566,7 @@
  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   f.write(struct.pack('>L20s', offset, name))   assert len(pack_checksum) == 20   f.write(pack_checksum) @@ -1714,6 +1714,7 @@
  for (name, offset, entry_checksum) in entries:   fan_out_table[ord(name[0])] += 1   # Fan-out table + largetable = []   for i in range(0x100):   f.write(struct.pack('>L', fan_out_table[i]))   fan_out_table[i+1] += fan_out_table[i] @@ -1722,9 +1723,13 @@
  for (name, offset, entry_checksum) in entries:   f.write(struct.pack('>L', entry_checksum))   for (name, offset, entry_checksum) in entries: - # FIXME: handle if MSBit is set in offset - f.write(struct.pack('>L', offset)) - # FIXME: handle table for pack files > 8 Gb + if offset < 0x80000000: + f.write(struct.pack('>L', offset)) + else: + f.write(struct.pack('>L', 0x80000000 + len(largetable))) + largetable.append(offset) + for offset in largetable: + f.write(struct.pack('>Q', offset))   assert len(pack_checksum) == 20   f.write(pack_checksum)   return f.write_sha()