def move_in_thin_pack(self, f): """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. """ f.seek(0) p = Pack('', resolve_ext_ref=self.get_raw) p._data = PackData.from_file(f, len(f.getvalue())) p._data.pack = p p._idx_load = lambda: MemoryPackIndex(p.data.sorted_entries(), p.data.get_stored_checksum()) pack_sha = p.index.objects_sha1() datafile = self.pack_transport.open_write_stream( "pack-%s.pack" % pack_sha.decode('ascii')) try: entries, data_sum = write_pack_objects(datafile, p.pack_tuples()) finally: datafile.close() entries = sorted([(k, v[0], v[1]) for (k, v) in entries.items()]) idxfile = self.pack_transport.open_write_stream( "pack-%s.idx" % pack_sha.decode('ascii')) try: write_pack_index_v2(idxfile, entries, data_sum) finally: idxfile.close() # TODO(jelmer): Just add new pack to the cache self._flush_pack_cache()