changeset 177:88fdcb23294e

only look for renames if the file has changed
author Scott Chacon <schacon@gmail.com>
date Wed, 03 Jun 2009 16:32:03 -0700
parents 814499406d4c
children 53ef6f725598
files git_handler.py
diffstat 1 files changed, 18 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- 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,23 +332,30 @@
     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)
+            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
-            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
-                    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)