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 = 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, ((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") os.rename(temppath+".idx", newbasename+".idx") self._add_known_pack(newbasename)
def fetch_objects(self, determine_wants, graph_walker, progress=None): fd, path = tempfile.mkstemp(suffix=".pack") self.fetch_pack(determine_wants, graph_walker, lambda x: os.write(fd, x), progress) os.close(fd) basename = path[:-len(".pack")] p = PackData(path) p.create_index_v2(basename+".idx") pack = Pack(basename) os.remove(path) return (len(p), pack.iterobjects())
def fetch_objects(self, determine_wants, graph_walker, progress=None): fd, path = tempfile.mkstemp(suffix=".pack") self.fetch_pack(determine_wants, graph_walker, lambda x: os.write(fd, x), progress) os.close(fd) basename = path[:-len(".pack")] p = PackData(path) p.create_index_v2(basename + ".idx") pack = Pack(basename) os.remove(path) return (len(p), pack.iterobjects())
def commit(): from .fetch import import_git_objects os.fsync(fd) f.close() if os.path.getsize(path) == 0: return pd = PackData(path) pd.create_index_v2(path[:-5] + ".idx", self.object_store.get_raw) p = Pack(path[:-5]) with self.repository.lock_write(): self.repository.start_write_group() try: import_git_objects(self.repository, self.mapping, p.iterobjects(get_raw=self.get_raw), self.object_store) except BaseException: self.repository.abort_write_group() raise else: self.repository.commit_write_group()