##// END OF EJS Templates
git -> hg conversion script...
Florian La Roche -
r1335:bea6356b default
parent child Browse files
Show More
@@ -28,26 +28,18 b' class convert_git:'
28 self.path = path
28 self.path = path
29
29
30 def getheads(self):
30 def getheads(self):
31 h = file(self.path + "/.git/HEAD").read()[:-1]
31 return [file(self.path + "/HEAD").read()[:-1]]
32 return [h]
33
32
34 def catfile(self, rev, type):
33 def catfile(self, rev, type):
35 if rev == "0" * 40: raise IOError()
34 if rev == "0" * 40: raise IOError()
36 path = os.getcwd()
35 fh = os.popen("GIT_DIR=%s git-cat-file %s %s 2>/dev/null" % (self.path, type, rev))
37 os.chdir(self.path)
38 fh = os.popen("git-cat-file %s %s 2>/dev/null" % (type, rev))
39 os.chdir(path)
40 return fh.read()
36 return fh.read()
41
37
42 def getfile(self, name, rev):
38 def getfile(self, name, rev):
43 return self.catfile(rev, "blob")
39 return self.catfile(rev, "blob")
44
40
45 def getchanges(self, version):
41 def getchanges(self, version):
46 path = os.getcwd()
42 fh = os.popen("GIT_DIR=%s git-diff-tree --root -m -r %s" % (self.path, version))
47 os.chdir(self.path)
48 fh = os.popen("git-diff-tree --root -m -r %s" % (version))
49 os.chdir(path)
50
51 changes = []
43 changes = []
52 for l in fh:
44 for l in fh:
53 if "\t" not in l: continue
45 if "\t" not in l: continue
@@ -83,9 +75,9 b' class convert_git:'
83
75
84 def gettags(self):
76 def gettags(self):
85 tags = {}
77 tags = {}
86 for f in os.listdir(self.path + "/.git/refs/tags"):
78 for f in os.listdir(self.path + "/refs/tags"):
87 try:
79 try:
88 h = file(self.path + "/.git/refs/tags/" + f).read().strip()
80 h = file(self.path + "/refs/tags/" + f).read().strip()
89 tags[f] = h
81 tags[f] = h
90 except:
82 except:
91 pass
83 pass
@@ -99,8 +91,7 b' class convert_mercurial:'
99
91
100 def getheads(self):
92 def getheads(self):
101 h = self.repo.changelog.heads()
93 h = self.repo.changelog.heads()
102 h = [ hg.hex(x) for x in h ]
94 return [ hg.hex(x) for x in h ]
103 return h
104
95
105 def putfile(self, f, e, data):
96 def putfile(self, f, e, data):
106 self.repo.wfile(f, "w").write(data)
97 self.repo.wfile(f, "w").write(data)
@@ -155,12 +146,12 b' class convert_mercurial:'
155 newlines.sort()
146 newlines.sort()
156
147
157 if newlines != oldlines:
148 if newlines != oldlines:
158 print "updating tags"
149 #print "updating tags"
159 f = self.repo.wfile(".hgtags", "w")
150 f = self.repo.wfile(".hgtags", "w")
160 f.write("".join(newlines))
151 f.write("".join(newlines))
161 f.close()
152 f.close()
162 if not oldlines: self.repo.add([".hgtags"])
153 if not oldlines: self.repo.add([".hgtags"])
163 date = "%s 0" % time.mktime(time.gmtime())
154 date = "%s 0" % int(time.mktime(time.gmtime()))
164 self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
155 self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
165 date, self.repo.changelog.tip(), hg.nullid)
156 date, self.repo.changelog.tip(), hg.nullid)
166
157
@@ -262,7 +253,7 b' class convert:'
262 num -= 1
253 num -= 1
263 if c in self.map: continue
254 if c in self.map: continue
264 desc = self.commitcache[c][3].splitlines()[0]
255 desc = self.commitcache[c][3].splitlines()[0]
265 print num, desc
256 #print num, desc
266 self.copy(c)
257 self.copy(c)
267
258
268 tags = self.source.gettags()
259 tags = self.source.gettags()
@@ -275,6 +266,8 b' class convert:'
275 self.dest.puttags(ctags)
266 self.dest.puttags(ctags)
276
267
277 gitpath, hgpath, mapfile = sys.argv[1:]
268 gitpath, hgpath, mapfile = sys.argv[1:]
269 if os.path.isdir(gitpath + "/.git"):
270 gitpath += "/.git"
278
271
279 c = convert(convert_git(gitpath), convert_mercurial(hgpath), mapfile)
272 c = convert(convert_git(gitpath), convert_mercurial(hgpath), mapfile)
280 c.convert()
273 c.convert()
General Comments 0
You need to be logged in to leave comments. Login now