##// END OF EJS Templates
convert extension: Save a few opens on the map file...
Edouard Gomez -
r4588:9855939d default
parent child Browse files
Show More
@@ -33,15 +33,18 b' class convert(object):'
33 33 self.source = source
34 34 self.dest = dest
35 35 self.ui = ui
36 self.mapfile = mapfile
37 36 self.opts = opts
38 37 self.commitcache = {}
38 self.mapfile = mapfile
39 self.mapfilefd = None
39 40
40 41 self.map = {}
41 42 try:
42 for l in file(self.mapfile):
43 origmapfile = open(self.mapfile, 'r')
44 for l in origmapfile:
43 45 sv, dv = l[:-1].split()
44 46 self.map[sv] = dv
47 origmapfile.close()
45 48 except IOError:
46 49 pass
47 50
@@ -118,6 +121,16 b' class convert(object):'
118 121
119 122 return s
120 123
124 def mapentry(self, src, dst):
125 if self.mapfilefd is None:
126 try:
127 self.mapfilefd = open(self.mapfile, "a")
128 except IOError, (errno, strerror):
129 raise util.Abort("Could not open map file %s: %s, %s\n" % (self.mapfile, errno, strerror))
130 self.map[src] = dst
131 self.mapfilefd.write("%s %s\n" % (src, dst))
132 self.mapfilefd.flush()
133
121 134 def copy(self, rev):
122 135 c = self.commitcache[rev]
123 136 files = self.source.getchanges(rev)
@@ -133,40 +146,47 b' class convert(object):'
133 146
134 147 r = [self.map[v] for v in c.parents]
135 148 f = [f for f, v in files]
136 self.map[rev] = self.dest.putcommit(f, r, c)
137 file(self.mapfile, "a").write("%s %s\n" % (rev, self.map[rev]))
149 newnode = self.dest.putcommit(f, r, c)
150 self.mapentry(rev, newnode)
138 151
139 152 def convert(self):
140 self.ui.status("scanning source...\n")
141 heads = self.source.getheads()
142 parents = self.walktree(heads)
143 self.ui.status("sorting...\n")
144 t = self.toposort(parents)
145 num = len(t)
146 c = None
153 try:
154 self.ui.status("scanning source...\n")
155 heads = self.source.getheads()
156 parents = self.walktree(heads)
157 self.ui.status("sorting...\n")
158 t = self.toposort(parents)
159 num = len(t)
160 c = None
161
162 self.ui.status("converting...\n")
163 for c in t:
164 num -= 1
165 desc = self.commitcache[c].desc
166 if "\n" in desc:
167 desc = desc.splitlines()[0]
168 self.ui.status("%d %s\n" % (num, desc))
169 self.copy(c)
147 170
148 self.ui.status("converting...\n")
149 for c in t:
150 num -= 1
151 desc = self.commitcache[c].desc
152 if "\n" in desc:
153 desc = desc.splitlines()[0]
154 self.ui.status("%d %s\n" % (num, desc))
155 self.copy(c)
171 tags = self.source.gettags()
172 ctags = {}
173 for k in tags:
174 v = tags[k]
175 if v in self.map:
176 ctags[k] = self.map[v]
156 177
157 tags = self.source.gettags()
158 ctags = {}
159 for k in tags:
160 v = tags[k]
161 if v in self.map:
162 ctags[k] = self.map[v]
178 if c and ctags:
179 nrev = self.dest.puttags(ctags)
180 # write another hash correspondence to override the previous
181 # one so we don't end up with extra tag heads
182 if nrev:
183 self.mapentry(c, nrev)
184 finally:
185 self.cleanup()
163 186
164 if c and ctags:
165 nrev = self.dest.puttags(ctags)
166 # write another hash correspondence to override the previous
167 # one so we don't end up with extra tag heads
168 if nrev:
169 file(self.mapfile, "a").write("%s %s\n" % (c, nrev))
187 def cleanup(self):
188 if self.mapfilefd:
189 self.mapfilefd.close()
170 190
171 191 def _convert(ui, src, dest=None, mapfile=None, **opts):
172 192 '''Convert a foreign SCM repository to a Mercurial one.
General Comments 0
You need to be logged in to leave comments. Login now