diff --git a/git_handler.py b/git_handler.py index 814499406d4ce999f28fc3a05cc3260d1676a690_Z2l0X2hhbmRsZXIucHk=..88fdcb23294efba55037a02f3e37c1303c7e66f4_Z2l0X2hhbmRsZXIucHk= 100644 --- a/git_handler.py +++ b/git_handler.py @@ -189,7 +189,7 @@ return dict(filter(is_local_head, refs.items())) def export_git_objects(self): - self.manifest_renames = {} + self.previous_entries = {} self.written_trees = {} self.ui.status(_("importing Hg objects into Git\n")) total = len(self.repo.changelog) @@ -332,6 +332,8 @@ def write_git_tree(self, ctx): trees = {} man = ctx.manifest() + ctx_id = hex(ctx.node()) + renames = [] for filenm, nodesha in man.iteritems(): file_id = hex(nodesha) @@ -335,4 +337,8 @@ renames = [] for filenm, nodesha in man.iteritems(): file_id = hex(nodesha) + if ctx_id not in self.previous_entries: + self.previous_entries[ctx_id] = {} + self.previous_entries[ctx_id][filenm] = file_id + # write blob if not in our git database @@ -338,9 +344,14 @@ # write blob if not in our git database - fctx = ctx.filectx(filenm) - filerename = None - if file_id in self.manifest_renames: - filerename = self.manifest_renames[file_id] - else: + fctx = ctx.filectx(filenm) + + same_as_last = False + for par in ctx.parents(): + par_id = hex(par.node()) + if par_id in self.previous_entries: + if filenm in self.previous_entries[par_id]: + if self.previous_entries[par_id][filenm] == file_id: + same_as_last = True + if not same_as_last: rename = fctx.renamed() if rename: filerename, sha = rename @@ -344,11 +355,7 @@ rename = fctx.renamed() if rename: filerename, sha = rename - self.manifest_renames[file_id] = filerename - else: - self.manifest_renames[file_id] = None - if filerename: - renames.append((filerename, filenm)) + renames.append((filerename, filenm)) is_exec = 'x' in fctx.flags() is_link = 'l' in fctx.flags() blob_sha = self.map_git_get(file_id)