##// END OF EJS Templates
Teach convert-repo about tags...
mpm@selenic.com -
r694:51eb248d default
parent child Browse files
Show More
@@ -20,7 +20,7 b''
20 20 # This updates the mapfile on each commit copied, so it can be
21 21 # interrupted and can be run repeatedly to copy new commits.
22 22
23 import sys, os, zlib, sha
23 import sys, os, zlib, sha, time
24 24 from mercurial import hg, ui, util
25 25
26 26 class convert_git:
@@ -35,7 +35,7 b' class convert_git:'
35 35 if rev == "0" * 40: raise IOError()
36 36 path = os.getcwd()
37 37 os.chdir(self.path)
38 fh = os.popen("git-cat-file %s %s" % (type, rev))
38 fh = os.popen("git-cat-file %s %s 2>/dev/null" % (type, rev))
39 39 os.chdir(path)
40 40 return fh.read()
41 41
@@ -81,6 +81,18 b' class convert_git:'
81 81 if n == "parent": parents.append(v)
82 82 return (parents, author, date, message)
83 83
84 def gettags(self):
85 tags = {}
86 for f in os.listdir(self.path + "/.git/refs/tags"):
87 try:
88 h = file(self.path + "/.git/refs/tags/" + f).read().strip()
89 p, a, d, m = self.getcommit(h)
90 if not p: p = [h] # git is ugly, don't blame me
91 tags[f] = p[0]
92 except:
93 pass
94 return tags
95
84 96 class convert_mercurial:
85 97 def __init__(self, path):
86 98 self.path = path
@@ -128,6 +140,32 b' class convert_mercurial:'
128 140
129 141 return hg.hex(self.repo.changelog.tip())
130 142
143 def puttags(self, tags):
144 try:
145 old = self.repo.wfile(".hgtags").read()
146 oldlines = old.splitlines(1)
147 oldlines.sort()
148 except:
149 oldlines = []
150
151 k = tags.keys()
152 k.sort()
153 newlines = []
154 for tag in k:
155 newlines.append("%s %s\n" % (tags[tag], tag))
156
157 newlines.sort()
158
159 if newlines != oldlines:
160 print "updating tags"
161 f = self.repo.wfile(".hgtags", "w")
162 f.write("".join(newlines))
163 f.close()
164 if not oldlines: self.repo.add([".hgtags"])
165 date = "%s 0" % time.mktime(time.gmtime())
166 self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
167 date, self.repo.changelog.tip(), hg.nullid)
168
131 169 class convert:
132 170 def __init__(self, source, dest, mapfile):
133 171 self.source = source
@@ -229,6 +267,15 b' class convert:'
229 267 print num, desc
230 268 self.copy(c)
231 269
270 tags = self.source.gettags()
271 ctags = {}
272 for k in tags:
273 v = tags[k]
274 if v in self.map:
275 ctags[k] = self.map[v]
276
277 self.dest.puttags(ctags)
278
232 279 gitpath, hgpath, mapfile = sys.argv[1:]
233 280
234 281 c = convert(convert_git(gitpath), convert_mercurial(hgpath), mapfile)
General Comments 0
You need to be logged in to leave comments. Login now