:param path: Path to the pack file.
"""
- p = PackData(path)
+ data = PackData(path)
+
+ # Write index for the thin pack (do we really need this?)
+ temppath = os.path.join(self.pack_dir,
+ sha_to_hex(urllib2.randombytes(20))+".tempidx")
+ data.create_index_v2(temppath, self.get_raw)
+ p = Pack.from_objects(data, load_pack_index(temppath))
+
+ # Write a full pack version
temppath = os.path.join(self.pack_dir,
sha_to_hex(urllib2.randombytes(20))+".temppack")
- write_pack(temppath, p.iterobjects(self.get_raw), len(p))
+ write_pack(temppath, ((o, None) for o in p.iterobjects(self.get_raw)),
+ len(p))
pack_sha = load_pack_index(temppath+".idx").objects_sha1()
newbasename = os.path.join(self.pack_dir, "pack-%s" % pack_sha)
os.rename(temppath+".pack", newbasename+".pack")
pass
raise Postpone, (sha, )
extra = []
- todo = chain(self.iterobjects(progress), extra)
+ todo = chain(self.iterobjects(progress=progress), extra)
for (offset, type, obj, crc32) in todo:
assert isinstance(offset, int)
assert isinstance(type, int)
self._data = None
self._idx = None
+ @classmethod
+ def from_objects(self, data, idx):
+ ret = Pack("")
+ ret._data = data
+ ret._idx = idx
+ return ret
+
def name(self):
"""The SHA over the SHAs of the objects in this pack."""
return self.idx.objects_sha1()