##// END OF EJS Templates
convert: get rid of "hg." prefix where not needed
Bryan O'Sullivan -
r5017:06329efa default
parent child Browse files
Show More
@@ -1,174 +1,174 b''
1 # hg backend for convert extension
1 # hg backend for convert extension
2
2
3 # Note for hg->hg conversion: Old versions of Mercurial didn't trim
3 # Note for hg->hg conversion: Old versions of Mercurial didn't trim
4 # the whitespace from the ends of commit messages, but new versions
4 # the whitespace from the ends of commit messages, but new versions
5 # do. Changesets created by those older versions, then converted, may
5 # do. Changesets created by those older versions, then converted, may
6 # thus have different hashes for changesets that are otherwise
6 # thus have different hashes for changesets that are otherwise
7 # identical.
7 # identical.
8
8
9
9
10 import os, time
10 import os, time
11 from mercurial.i18n import _
11 from mercurial.i18n import _
12 from mercurial.node import *
12 from mercurial.node import *
13 from mercurial import hg, lock, revlog, util
13 from mercurial import hg, lock, revlog, util
14
14
15 from common import NoRepo, commit, converter_source, converter_sink
15 from common import NoRepo, commit, converter_source, converter_sink
16
16
17 class mercurial_sink(converter_sink):
17 class mercurial_sink(converter_sink):
18 def __init__(self, ui, path):
18 def __init__(self, ui, path):
19 self.path = path
19 self.path = path
20 self.ui = ui
20 self.ui = ui
21 try:
21 try:
22 self.repo = hg.repository(self.ui, path)
22 self.repo = hg.repository(self.ui, path)
23 except:
23 except:
24 raise NoRepo("could not open hg repo %s as sink" % path)
24 raise NoRepo("could not open hg repo %s as sink" % path)
25 self.lock = None
25 self.lock = None
26 self.wlock = None
26 self.wlock = None
27
27
28 def before(self):
28 def before(self):
29 self.lock = self.repo.lock()
29 self.lock = self.repo.lock()
30 self.wlock = self.repo.wlock()
30 self.wlock = self.repo.wlock()
31
31
32 def after(self):
32 def after(self):
33 self.lock = None
33 self.lock = None
34 self.wlock = None
34 self.wlock = None
35
35
36 def revmapfile(self):
36 def revmapfile(self):
37 return os.path.join(self.path, ".hg", "shamap")
37 return os.path.join(self.path, ".hg", "shamap")
38
38
39 def authorfile(self):
39 def authorfile(self):
40 return os.path.join(self.path, ".hg", "authormap")
40 return os.path.join(self.path, ".hg", "authormap")
41
41
42 def getheads(self):
42 def getheads(self):
43 h = self.repo.changelog.heads()
43 h = self.repo.changelog.heads()
44 return [ hg.hex(x) for x in h ]
44 return [ hex(x) for x in h ]
45
45
46 def putfile(self, f, e, data):
46 def putfile(self, f, e, data):
47 self.repo.wwrite(f, data, e)
47 self.repo.wwrite(f, data, e)
48 if f not in self.repo.dirstate:
48 if f not in self.repo.dirstate:
49 self.repo.dirstate.add(f)
49 self.repo.dirstate.add(f)
50
50
51 def copyfile(self, source, dest):
51 def copyfile(self, source, dest):
52 self.repo.copy(source, dest)
52 self.repo.copy(source, dest)
53
53
54 def delfile(self, f):
54 def delfile(self, f):
55 try:
55 try:
56 os.unlink(self.repo.wjoin(f))
56 os.unlink(self.repo.wjoin(f))
57 #self.repo.remove([f])
57 #self.repo.remove([f])
58 except:
58 except:
59 pass
59 pass
60
60
61 def putcommit(self, files, parents, commit):
61 def putcommit(self, files, parents, commit):
62 if not files:
62 if not files:
63 return hex(self.repo.changelog.tip())
63 return hex(self.repo.changelog.tip())
64
64
65 seen = {hex(nullid): 1}
65 seen = {hex(nullid): 1}
66 pl = []
66 pl = []
67 for p in parents:
67 for p in parents:
68 if p not in seen:
68 if p not in seen:
69 pl.append(p)
69 pl.append(p)
70 seen[p] = 1
70 seen[p] = 1
71 parents = pl
71 parents = pl
72
72
73 if len(parents) < 2: parents.append("0" * 40)
73 if len(parents) < 2: parents.append("0" * 40)
74 if len(parents) < 2: parents.append("0" * 40)
74 if len(parents) < 2: parents.append("0" * 40)
75 p2 = parents.pop(0)
75 p2 = parents.pop(0)
76
76
77 text = commit.desc
77 text = commit.desc
78 extra = {}
78 extra = {}
79 if commit.branch:
79 if commit.branch:
80 extra['branch'] = commit.branch
80 extra['branch'] = commit.branch
81 if commit.rev:
81 if commit.rev:
82 extra['convert_revision'] = commit.rev
82 extra['convert_revision'] = commit.rev
83
83
84 while parents:
84 while parents:
85 p1 = p2
85 p1 = p2
86 p2 = parents.pop(0)
86 p2 = parents.pop(0)
87 a = self.repo.rawcommit(files, text, commit.author, commit.date,
87 a = self.repo.rawcommit(files, text, commit.author, commit.date,
88 hg.bin(p1), hg.bin(p2), extra=extra)
88 bin(p1), bin(p2), extra=extra)
89 self.repo.dirstate.invalidate()
89 self.repo.dirstate.invalidate()
90 text = "(octopus merge fixup)\n"
90 text = "(octopus merge fixup)\n"
91 p2 = hg.hex(self.repo.changelog.tip())
91 p2 = hg.hex(self.repo.changelog.tip())
92
92
93 return p2
93 return p2
94
94
95 def puttags(self, tags):
95 def puttags(self, tags):
96 try:
96 try:
97 old = self.repo.wfile(".hgtags").read()
97 old = self.repo.wfile(".hgtags").read()
98 oldlines = old.splitlines(1)
98 oldlines = old.splitlines(1)
99 oldlines.sort()
99 oldlines.sort()
100 except:
100 except:
101 oldlines = []
101 oldlines = []
102
102
103 k = tags.keys()
103 k = tags.keys()
104 k.sort()
104 k.sort()
105 newlines = []
105 newlines = []
106 for tag in k:
106 for tag in k:
107 newlines.append("%s %s\n" % (tags[tag], tag))
107 newlines.append("%s %s\n" % (tags[tag], tag))
108
108
109 newlines.sort()
109 newlines.sort()
110
110
111 if newlines != oldlines:
111 if newlines != oldlines:
112 self.ui.status("updating tags\n")
112 self.ui.status("updating tags\n")
113 f = self.repo.wfile(".hgtags", "w")
113 f = self.repo.wfile(".hgtags", "w")
114 f.write("".join(newlines))
114 f.write("".join(newlines))
115 f.close()
115 f.close()
116 if not oldlines: self.repo.add([".hgtags"])
116 if not oldlines: self.repo.add([".hgtags"])
117 date = "%s 0" % int(time.mktime(time.gmtime()))
117 date = "%s 0" % int(time.mktime(time.gmtime()))
118 self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
118 self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
119 date, self.repo.changelog.tip(), hg.nullid)
119 date, self.repo.changelog.tip(), nullid)
120 return hg.hex(self.repo.changelog.tip())
120 return hex(self.repo.changelog.tip())
121
121
122 class mercurial_source(converter_source):
122 class mercurial_source(converter_source):
123 def __init__(self, ui, path, rev=None):
123 def __init__(self, ui, path, rev=None):
124 converter_source.__init__(self, ui, path, rev)
124 converter_source.__init__(self, ui, path, rev)
125 self.repo = hg.repository(self.ui, path)
125 self.repo = hg.repository(self.ui, path)
126 self.lastrev = None
126 self.lastrev = None
127 self.lastctx = None
127 self.lastctx = None
128
128
129 def changectx(self, rev):
129 def changectx(self, rev):
130 if self.lastrev != rev:
130 if self.lastrev != rev:
131 self.lastctx = self.repo.changectx(rev)
131 self.lastctx = self.repo.changectx(rev)
132 self.lastrev = rev
132 self.lastrev = rev
133 return self.lastctx
133 return self.lastctx
134
134
135 def getheads(self):
135 def getheads(self):
136 return [hex(node) for node in self.repo.heads()]
136 return [hex(node) for node in self.repo.heads()]
137
137
138 def getfile(self, name, rev):
138 def getfile(self, name, rev):
139 try:
139 try:
140 return self.changectx(rev).filectx(name).data()
140 return self.changectx(rev).filectx(name).data()
141 except revlog.LookupError, err:
141 except revlog.LookupError, err:
142 raise IOError(err)
142 raise IOError(err)
143
143
144 def getmode(self, name, rev):
144 def getmode(self, name, rev):
145 m = self.changectx(rev).manifest()
145 m = self.changectx(rev).manifest()
146 return (m.execf(name) and 'x' or '') + (m.linkf(name) and 'l' or '')
146 return (m.execf(name) and 'x' or '') + (m.linkf(name) and 'l' or '')
147
147
148 def getchanges(self, rev):
148 def getchanges(self, rev):
149 ctx = self.changectx(rev)
149 ctx = self.changectx(rev)
150 m, a, r = self.repo.status(ctx.parents()[0].node(), ctx.node())[:3]
150 m, a, r = self.repo.status(ctx.parents()[0].node(), ctx.node())[:3]
151 changes = [(name, rev) for name in m + a + r]
151 changes = [(name, rev) for name in m + a + r]
152 changes.sort()
152 changes.sort()
153 return changes
153 return changes
154
154
155 def getcopies(self, ctx):
155 def getcopies(self, ctx):
156 added = self.repo.status(ctx.parents()[0].node(), ctx.node())[1]
156 added = self.repo.status(ctx.parents()[0].node(), ctx.node())[1]
157 copies = {}
157 copies = {}
158 for name in added:
158 for name in added:
159 try:
159 try:
160 copies[name] = ctx.filectx(name).renamed()[0]
160 copies[name] = ctx.filectx(name).renamed()[0]
161 except TypeError:
161 except TypeError:
162 pass
162 pass
163 return copies
163 return copies
164
164
165 def getcommit(self, rev):
165 def getcommit(self, rev):
166 ctx = self.changectx(rev)
166 ctx = self.changectx(rev)
167 parents = [hex(p.node()) for p in ctx.parents() if p.node() != nullid]
167 parents = [hex(p.node()) for p in ctx.parents() if p.node() != nullid]
168 return commit(author=ctx.user(), date=util.datestr(ctx.date()),
168 return commit(author=ctx.user(), date=util.datestr(ctx.date()),
169 desc=ctx.description(), parents=parents,
169 desc=ctx.description(), parents=parents,
170 branch=ctx.branch(), copies=self.getcopies(ctx))
170 branch=ctx.branch(), copies=self.getcopies(ctx))
171
171
172 def gettags(self):
172 def gettags(self):
173 tags = [t for t in self.repo.tagslist() if t[0] != 'tip']
173 tags = [t for t in self.repo.tagslist() if t[0] != 'tip']
174 return dict([(name, hex(node)) for name, node in tags])
174 return dict([(name, hex(node)) for name, node in tags])
General Comments 0
You need to be logged in to leave comments. Login now