=== modified file 'fetch.py' --- fetch.py 2012-03-11 15:08:14 +0000 +++ fetch.py 2013-08-26 14:49:23 +0000 @@ -399,6 +399,8 @@ def import_git_commit(repo, mapping, hea base_tree = lookup_object(o.parents[0]).tree base_mode = stat.S_IFDIR store_updater = target_git_object_retriever._get_updater(rev) + mapping.set_tree(base_bzr_tree) + mapping.set_revid(rev.revision_id) tree_supplement = mapping.get_fileid_map(lookup_object, o.tree) inv_delta, unusual_modes = import_git_tree(repo.texts, mapping, "", "", (base_tree, o.tree), base_bzr_tree, === modified file 'mapping.py' --- mapping.py 2012-03-26 20:48:24 +0000 +++ mapping.py 2013-08-26 14:52:22 +0000 @@ -403,6 +403,35 @@ def __str__(self): return self.revid_prefix +class BzrGitMappingRevidBased(BzrGitMappingv1): + revid_prefix = 'git-revid' + revid_suffix = '' + + def set_tree(self, tree): + self.tree = tree + self.set_revid(None) + + def set_revid(self, revid): + if revid is None: + self.revid_suffix = '' + else: + self.revid_suffix = '@' + self.revision_id_bzr_to_foreign(revid)[0] + + def generate_file_id(self, path): + if path == "": + return ROOT_ID + file_id = self.tree.path2id(path) + if file_id is not None: + return file_id + if type(path) is unicode: + path = path.encode("utf-8") + return escape_file_id(path) + self.revid_suffix + + def parse_file_id(self, file_id): + if file_id == ROOT_ID: + return "" + return self.tree.id2path(file_id) + class BzrGitMappingExperimental(BzrGitMappingv1): revid_prefix = 'git-experimental' experimental = True @@ -459,6 +488,10 @@ def revision_id_bzr_to_foreign(self, bzr #mapping_registry.set_default('git-experimental') mapping_registry.set_default('git-v1') +mapping_registry.register_lazy('git-revid', "bzrlib.plugins.git.mapping", + "BzrGitMappingRevidBased") +mapping_registry.set_default('git-revid') + class ForeignGit(ForeignVcs): """The Git Stupid Content Tracker""" @@ -619,6 +652,7 @@ def lookup_file_id(self, path): file_id = self.file_ids[path] except KeyError: file_id = self.mapping.generate_file_id(path) + self.file_ids[path] = file_id assert type(file_id) is str return file_id