Mercurial > hg
comparison contrib/convert-repo @ 3821:158fce02dc40
Teach convert-repo to deal with mixed charsets in git
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 07 Dec 2006 18:03:28 -0600 |
parents | e6a7a6a33a62 |
children | 4bc5a2405b12 |
comparison
equal
deleted
inserted
replaced
3820:4f056896c093 | 3821:158fce02dc40 |
---|---|
19 # | 19 # |
20 # This updates the mapfile on each commit copied, so it can be | 20 # This updates the mapfile on each commit copied, so it can be |
21 # interrupted and can be run repeatedly to copy new commits. | 21 # interrupted and can be run repeatedly to copy new commits. |
22 | 22 |
23 import sys, os, zlib, sha, time | 23 import sys, os, zlib, sha, time |
24 | |
25 os.environ["HGENCODING"] = "utf-8" | |
26 | |
24 from mercurial import hg, ui, util | 27 from mercurial import hg, ui, util |
28 | |
29 def recode(s): | |
30 try: | |
31 return s.decode("utf-8").encode("utf-8") | |
32 except: | |
33 try: | |
34 return s.decode("latin-1").encode("utf-8") | |
35 except: | |
36 return s.decode("utf-8", "replace").encode("utf-8") | |
25 | 37 |
26 class convert_git: | 38 class convert_git: |
27 def __init__(self, path): | 39 def __init__(self, path): |
28 self.path = path | 40 self.path = path |
29 | 41 |
53 | 65 |
54 def getcommit(self, version): | 66 def getcommit(self, version): |
55 c = self.catfile(version, "commit") # read the commit hash | 67 c = self.catfile(version, "commit") # read the commit hash |
56 end = c.find("\n\n") | 68 end = c.find("\n\n") |
57 message = c[end+2:] | 69 message = c[end+2:] |
70 message = recode(message) | |
58 l = c[:end].splitlines() | 71 l = c[:end].splitlines() |
59 manifest = l[0].split()[1] | 72 manifest = l[0].split()[1] |
60 parents = [] | 73 parents = [] |
61 for e in l[1:]: | 74 for e in l[1:]: |
62 n,v = e.split(" ", 1) | 75 n,v = e.split(" ", 1) |
63 if n == "author": | 76 if n == "author": |
64 p = v.split() | 77 p = v.split() |
65 tm, tz = p[-2:] | 78 tm, tz = p[-2:] |
66 author = " ".join(p[:-2]) | 79 author = " ".join(p[:-2]) |
67 if author[0] == "<": author = author[1:-1] | 80 if author[0] == "<": author = author[1:-1] |
81 author = recode(author) | |
68 if n == "committer": | 82 if n == "committer": |
69 p = v.split() | 83 p = v.split() |
70 tm, tz = p[-2:] | 84 tm, tz = p[-2:] |
71 committer = " ".join(p[:-2]) | 85 committer = " ".join(p[:-2]) |
72 if committer[0] == "<": committer = committer[1:-1] | 86 if committer[0] == "<": committer = committer[1:-1] |
87 committer = recode(committer) | |
73 message += "\ncommitter: %s\n" % v | 88 message += "\ncommitter: %s\n" % v |
74 if n == "parent": parents.append(v) | 89 if n == "parent": parents.append(v) |
75 | 90 |
76 tzs, tzh, tzm = tz[-5:-4] + "1", tz[-4:-2], tz[-2:] | 91 tzs, tzh, tzm = tz[-5:-4] + "1", tz[-4:-2], tz[-2:] |
77 tz = -int(tzs) * (int(tzh) * 3600 + int(tzm)) | 92 tz = -int(tzs) * (int(tzh) * 3600 + int(tzm)) |