convert: fix non-ASCII filenames retrieval from git sources (issue 1360)
authorPatrick Mezard <pmezard@gmail.com>
Sun, 26 Oct 2008 13:23:02 +0100
changeset 7242 d1dff8c492dd
parent 7222 c1dc903dc7b6
child 7246 2fef3051ebb3
child 7381 b965605dfb2e
convert: fix non-ASCII filenames retrieval from git sources (issue 1360)
hgext/convert/git.py
--- a/hgext/convert/git.py	Thu Oct 23 14:05:11 2008 +0200
+++ b/hgext/convert/git.py	Sun Oct 26 13:23:02 2008 +0100
@@ -56,22 +56,26 @@
 
     def getchanges(self, version):
         self.modecache = {}
-        fh = self.gitcmd("git diff-tree --root -m -r %s" % version)
+        fh = self.gitcmd("git diff-tree -z --root -m -r %s" % version)
         changes = []
         seen = {}
-        for l in fh:
-            if "\t" not in l:
-                continue
-            m, f = l[:-1].split("\t")
-            if f in seen:
+        entry = None
+        for l in fh.read().split('\x00'):
+            if not entry:
+                if not l.startswith(':'):
+                    continue
+                entry = l
                 continue
-            seen[f] = 1
-            m = m.split()
-            h = m[3]
-            p = (m[1] == "100755")
-            s = (m[1] == "120000")
-            self.modecache[(f, h)] = (p and "x") or (s and "l") or ""
-            changes.append((f, h))
+            f = l
+            if f not in seen:
+                seen[f] = 1
+                entry = entry.split()
+                h = entry[3]
+                p = (entry[1] == "100755")
+                s = (entry[1] == "120000")
+                self.modecache[(f, h)] = (p and "x") or (s and "l") or ""
+                changes.append((f, h))
+            entry = None
         return (changes, {})
 
     def getcommit(self, version):