443
446
self._add_known_pack(final_pack)
444
447
return final_pack
449
def add_thin_pack(self):
450
"""Add a new thin pack to this object store.
452
Thin packs are packs that contain deltas with parents that exist
455
from cStringIO import StringIO
458
if len(f.getvalue()) > 0:
459
return self.move_in_thin_pack(f)
464
def move_in_thin_pack(self, f):
465
"""Move a specific file containing a pack into the pack directory.
467
:note: The file should be on the same file system as the
470
:param path: Path to the pack file.
473
data = ThinPackData.from_file(self.get_raw, f, len(f.getvalue()))
474
idx = MemoryPackIndex(data.sorted_entries(), data.get_stored_checksum())
475
p = Pack.from_objects(data, idx)
477
pack_sha = idx.objects_sha1()
479
datafile = self.pack_transport.open_write_stream("pack-%s.pack" % pack_sha)
481
entries, data_sum = write_pack_data(datafile, ((o, None) for o in p.iterobjects()), len(p))
485
idxfile = self.pack_transport.open_write_stream("pack-%s.idx" % pack_sha)
487
write_pack_index_v2(idxfile, data.sorted_entries(), data_sum)
490
final_pack = Pack("pack-%s" % pack_sha)
491
self._add_known_pack(final_pack)
446
496
def add_pack(self):
447
497
"""Add a new pack to this object store.