def move_in_thin_pack(self, path): """Move a specific file containing a pack into the pack directory. :note: The file should be on the same file system as the packs directory. :param path: Path to the pack file. """ data = ThinPackData(self.get_raw, 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) 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, ((o, None) for o in p.iterobjects()), 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") os.rename(temppath+".idx", newbasename+".idx") final_pack = Pack(newbasename) self._add_known_pack(final_pack) return final_pack
def test_thin_from_file(self): test_sha = "1" * 40 def resolve(sha): self.assertEqual(test_sha, sha) return 3, "data" path = os.path.join(self.datadir, "pack-%s.pack" % pack1_sha) data = ThinPackData.from_file(resolve, open(path), os.path.getsize(path)) idx = self.get_pack_index(pack1_sha) Pack.from_objects(data, idx) self.assertEqual((None, 3, "data"), data.get_ref(test_sha))