# HG changeset patch # User Patrick Mezard # Date 2008-10-26 12:23:02 # Node ID d1dff8c492dda5d683e6cb6712455da9b49765a1 # Parent c1dc903dc7b65eafb56eaf3808942dde29cf12ff convert: fix non-ASCII filenames retrieval from git sources (issue 1360) diff --git a/hgext/convert/git.py b/hgext/convert/git.py --- a/hgext/convert/git.py +++ b/hgext/convert/git.py @@ -56,22 +56,26 @@ class convert_git(converter_source): 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):