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