Show More
@@ -16,24 +16,36 b'' | |||||
16 | # identifier to be stored in the converted revision. This will cause |
|
16 | # identifier to be stored in the converted revision. This will cause | |
17 | # the converted revision to have a different identity than the |
|
17 | # the converted revision to have a different identity than the | |
18 | # source. |
|
18 | # source. | |
|
19 | from __future__ import absolute_import | |||
19 |
|
20 | |||
|
21 | import cStringIO | |||
|
22 | import os | |||
|
23 | import re | |||
|
24 | import time | |||
20 |
|
25 | |||
21 | import os, time, cStringIO |
|
26 | from mercurial import ( | |
|
27 | bookmarks, | |||
|
28 | context, | |||
|
29 | error, | |||
|
30 | exchange, | |||
|
31 | hg, | |||
|
32 | lock as lockmod, | |||
|
33 | merge as mergemod, | |||
|
34 | node as nodemod, | |||
|
35 | phases, | |||
|
36 | scmutil, | |||
|
37 | util, | |||
|
38 | ) | |||
22 | from mercurial.i18n import _ |
|
39 | from mercurial.i18n import _ | |
23 | from mercurial.node import bin, hex, nullid |
|
40 | from . import common | |
24 | from mercurial import hg, util, context, bookmarks, error, scmutil, exchange |
|
41 | mapfile = common.mapfile | |
25 | from mercurial import phases |
|
42 | NoRepo = common.NoRepo | |
26 | from mercurial import lock as lockmod |
|
|||
27 | from mercurial import merge as mergemod |
|
|||
28 |
|
43 | |||
29 | from common import NoRepo, commit, converter_source, converter_sink, mapfile |
|
|||
30 |
|
||||
31 | import re |
|
|||
32 | sha1re = re.compile(r'\b[0-9a-f]{12,40}\b') |
|
44 | sha1re = re.compile(r'\b[0-9a-f]{12,40}\b') | |
33 |
|
45 | |||
34 | class mercurial_sink(converter_sink): |
|
46 | class mercurial_sink(common.converter_sink): | |
35 | def __init__(self, ui, path): |
|
47 | def __init__(self, ui, path): | |
36 | converter_sink.__init__(self, ui, path) |
|
48 | common.converter_sink.__init__(self, ui, path) | |
37 | self.branchnames = ui.configbool('convert', 'hg.usebranchnames', True) |
|
49 | self.branchnames = ui.configbool('convert', 'hg.usebranchnames', True) | |
38 | self.clonebranches = ui.configbool('convert', 'hg.clonebranches', False) |
|
50 | self.clonebranches = ui.configbool('convert', 'hg.clonebranches', False) | |
39 | self.tagsbranch = ui.config('convert', 'hg.tagsbranch', 'default') |
|
51 | self.tagsbranch = ui.config('convert', 'hg.tagsbranch', 'default') | |
@@ -132,7 +144,7 b' class mercurial_sink(converter_sink):' | |||||
132 | continue |
|
144 | continue | |
133 | revid = revmap.get(source.lookuprev(s[0])) |
|
145 | revid = revmap.get(source.lookuprev(s[0])) | |
134 | if not revid: |
|
146 | if not revid: | |
135 |
if s[0] == |
|
147 | if s[0] == nodemod.nullhex: | |
136 | revid = s[0] |
|
148 | revid = s[0] | |
137 | else: |
|
149 | else: | |
138 | continue |
|
150 | continue | |
@@ -148,7 +160,7 b' class mercurial_sink(converter_sink):' | |||||
148 |
|
160 | |||
149 | revid = s[0] |
|
161 | revid = s[0] | |
150 | subpath = s[1] |
|
162 | subpath = s[1] | |
151 |
if revid != |
|
163 | if revid != nodemod.nullhex: | |
152 | revmap = self.subrevmaps.get(subpath) |
|
164 | revmap = self.subrevmaps.get(subpath) | |
153 | if revmap is None: |
|
165 | if revmap is None: | |
154 | revmap = mapfile(self.ui, |
|
166 | revmap = mapfile(self.ui, | |
@@ -250,13 +262,13 b' class mercurial_sink(converter_sink):' | |||||
250 | parents = pl |
|
262 | parents = pl | |
251 | nparents = len(parents) |
|
263 | nparents = len(parents) | |
252 | if self.filemapmode and nparents == 1: |
|
264 | if self.filemapmode and nparents == 1: | |
253 | m1node = self.repo.changelog.read(bin(parents[0]))[0] |
|
265 | m1node = self.repo.changelog.read(nodemod.bin(parents[0]))[0] | |
254 | parent = parents[0] |
|
266 | parent = parents[0] | |
255 |
|
267 | |||
256 | if len(parents) < 2: |
|
268 | if len(parents) < 2: | |
257 | parents.append(nullid) |
|
269 | parents.append(nodemod.nullid) | |
258 | if len(parents) < 2: |
|
270 | if len(parents) < 2: | |
259 | parents.append(nullid) |
|
271 | parents.append(nodemod.nullid) | |
260 | p2 = parents.pop(0) |
|
272 | p2 = parents.pop(0) | |
261 |
|
273 | |||
262 | text = commit.desc |
|
274 | text = commit.desc | |
@@ -283,12 +295,12 b' class mercurial_sink(converter_sink):' | |||||
283 |
|
295 | |||
284 | # Only transplant stores its reference in binary |
|
296 | # Only transplant stores its reference in binary | |
285 | if label == 'transplant_source': |
|
297 | if label == 'transplant_source': | |
286 | node = hex(node) |
|
298 | node = nodemod.hex(node) | |
287 |
|
299 | |||
288 | newrev = revmap.get(node) |
|
300 | newrev = revmap.get(node) | |
289 | if newrev is not None: |
|
301 | if newrev is not None: | |
290 | if label == 'transplant_source': |
|
302 | if label == 'transplant_source': | |
291 | newrev = bin(newrev) |
|
303 | newrev = nodemod.bin(newrev) | |
292 |
|
304 | |||
293 | extra[label] = newrev |
|
305 | extra[label] = newrev | |
294 |
|
306 | |||
@@ -302,7 +314,7 b' class mercurial_sink(converter_sink):' | |||||
302 | p2 = parents.pop(0) |
|
314 | p2 = parents.pop(0) | |
303 | p1ctx = self.repo[p1] |
|
315 | p1ctx = self.repo[p1] | |
304 | p2ctx = None |
|
316 | p2ctx = None | |
305 | if p2 != nullid: |
|
317 | if p2 != nodemod.nullid: | |
306 | p2ctx = self.repo[p2] |
|
318 | p2ctx = self.repo[p2] | |
307 | fileset = set(files) |
|
319 | fileset = set(files) | |
308 | if full: |
|
320 | if full: | |
@@ -324,7 +336,7 b' class mercurial_sink(converter_sink):' | |||||
324 | phases.phasenames[commit.phase], 'convert') |
|
336 | phases.phasenames[commit.phase], 'convert') | |
325 |
|
337 | |||
326 | with self.repo.transaction("convert") as tr: |
|
338 | with self.repo.transaction("convert") as tr: | |
327 | node = hex(self.repo.commitctx(ctx)) |
|
339 | node = nodemod.hex(self.repo.commitctx(ctx)) | |
328 |
|
340 | |||
329 | # If the node value has changed, but the phase is lower than |
|
341 | # If the node value has changed, but the phase is lower than | |
330 | # draft, set it back to draft since it hasn't been exposed |
|
342 | # draft, set it back to draft since it hasn't been exposed | |
@@ -340,7 +352,7 b' class mercurial_sink(converter_sink):' | |||||
340 |
|
352 | |||
341 | if self.filemapmode and nparents == 1: |
|
353 | if self.filemapmode and nparents == 1: | |
342 | man = self.repo.manifest |
|
354 | man = self.repo.manifest | |
343 | mnode = self.repo.changelog.read(bin(p2))[0] |
|
355 | mnode = self.repo.changelog.read(nodemod.bin(p2))[0] | |
344 | closed = 'close' in commit.extra |
|
356 | closed = 'close' in commit.extra | |
345 | if not closed and not man.cmp(m1node, man.revision(mnode)): |
|
357 | if not closed and not man.cmp(m1node, man.revision(mnode)): | |
346 | self.ui.status(_("filtering out empty revision\n")) |
|
358 | self.ui.status(_("filtering out empty revision\n")) | |
@@ -354,7 +366,7 b' class mercurial_sink(converter_sink):' | |||||
354 | tagparent = parentctx.node() |
|
366 | tagparent = parentctx.node() | |
355 | except error.RepoError: |
|
367 | except error.RepoError: | |
356 | parentctx = None |
|
368 | parentctx = None | |
357 | tagparent = nullid |
|
369 | tagparent = nodemod.nullid | |
358 |
|
370 | |||
359 | oldlines = set() |
|
371 | oldlines = set() | |
360 | for branch, heads in self.repo.branchmap().iteritems(): |
|
372 | for branch, heads in self.repo.branchmap().iteritems(): | |
@@ -397,7 +409,7 b' class mercurial_sink(converter_sink):' | |||||
397 | [".hgtags"], getfilectx, "convert-repo", date, |
|
409 | [".hgtags"], getfilectx, "convert-repo", date, | |
398 | extra) |
|
410 | extra) | |
399 | node = self.repo.commitctx(ctx) |
|
411 | node = self.repo.commitctx(ctx) | |
400 | return hex(node), hex(tagparent) |
|
412 | return nodemod.hex(node), nodemod.hex(tagparent) | |
401 |
|
413 | |||
402 | def setfilemapmode(self, active): |
|
414 | def setfilemapmode(self, active): | |
403 | self.filemapmode = active |
|
415 | self.filemapmode = active | |
@@ -413,7 +425,7 b' class mercurial_sink(converter_sink):' | |||||
413 | self.ui.status(_("updating bookmarks\n")) |
|
425 | self.ui.status(_("updating bookmarks\n")) | |
414 | destmarks = self.repo._bookmarks |
|
426 | destmarks = self.repo._bookmarks | |
415 | for bookmark in updatedbookmark: |
|
427 | for bookmark in updatedbookmark: | |
416 | destmarks[bookmark] = bin(updatedbookmark[bookmark]) |
|
428 | destmarks[bookmark] = nodemod.bin(updatedbookmark[bookmark]) | |
417 | destmarks.recordchange(tr) |
|
429 | destmarks.recordchange(tr) | |
418 | tr.close() |
|
430 | tr.close() | |
419 | finally: |
|
431 | finally: | |
@@ -430,9 +442,9 b' class mercurial_sink(converter_sink):' | |||||
430 | 'are not implemented)') % rev) |
|
442 | 'are not implemented)') % rev) | |
431 | return rev in self.repo |
|
443 | return rev in self.repo | |
432 |
|
444 | |||
433 | class mercurial_source(converter_source): |
|
445 | class mercurial_source(common.converter_source): | |
434 | def __init__(self, ui, path, revs=None): |
|
446 | def __init__(self, ui, path, revs=None): | |
435 | converter_source.__init__(self, ui, path, revs) |
|
447 | common.converter_source.__init__(self, ui, path, revs) | |
436 | self.ignoreerrors = ui.configbool('convert', 'hg.ignoreerrors', False) |
|
448 | self.ignoreerrors = ui.configbool('convert', 'hg.ignoreerrors', False) | |
437 | self.ignored = set() |
|
449 | self.ignored = set() | |
438 | self.saverev = ui.configbool('convert', 'hg.saverev', False) |
|
450 | self.saverev = ui.configbool('convert', 'hg.saverev', False) | |
@@ -493,7 +505,7 b' class mercurial_source(converter_source)' | |||||
493 | return [p for p in ctx.parents() if p and self.keep(p.node())] |
|
505 | return [p for p in ctx.parents() if p and self.keep(p.node())] | |
494 |
|
506 | |||
495 | def getheads(self): |
|
507 | def getheads(self): | |
496 | return [hex(h) for h in self._heads if self.keep(h)] |
|
508 | return [nodemod.hex(h) for h in self._heads if self.keep(h)] | |
497 |
|
509 | |||
498 | def getfile(self, name, rev): |
|
510 | def getfile(self, name, rev): | |
499 | try: |
|
511 | try: | |
@@ -572,18 +584,23 b' class mercurial_source(converter_source)' | |||||
572 | parents = [p.hex() for p in self._parents(ctx)] |
|
584 | parents = [p.hex() for p in self._parents(ctx)] | |
573 | crev = rev |
|
585 | crev = rev | |
574 |
|
586 | |||
575 | return commit(author=ctx.user(), |
|
587 | return common.commit(author=ctx.user(), | |
576 |
date=util.datestr(ctx.date(), |
|
588 | date=util.datestr(ctx.date(), | |
577 | desc=ctx.description(), rev=crev, parents=parents, |
|
589 | '%Y-%m-%d %H:%M:%S %1%2'), | |
578 | branch=ctx.branch(), extra=ctx.extra(), |
|
590 | desc=ctx.description(), | |
579 |
|
|
591 | rev=crev, | |
580 |
|
|
592 | parents=parents, | |
|
593 | branch=ctx.branch(), | |||
|
594 | extra=ctx.extra(), | |||
|
595 | sortkey=ctx.rev(), | |||
|
596 | saverev=self.saverev, | |||
|
597 | phase=ctx.phase()) | |||
581 |
|
598 | |||
582 | def gettags(self): |
|
599 | def gettags(self): | |
583 | # This will get written to .hgtags, filter non global tags out. |
|
600 | # This will get written to .hgtags, filter non global tags out. | |
584 | tags = [t for t in self.repo.tagslist() |
|
601 | tags = [t for t in self.repo.tagslist() | |
585 | if self.repo.tagtype(t[0]) == 'global'] |
|
602 | if self.repo.tagtype(t[0]) == 'global'] | |
586 | return dict([(name, hex(node)) for name, node in tags |
|
603 | return dict([(name, nodemod.hex(node)) for name, node in tags | |
587 | if self.keep(node)]) |
|
604 | if self.keep(node)]) | |
588 |
|
605 | |||
589 | def getchangedfiles(self, rev, i): |
|
606 | def getchangedfiles(self, rev, i): | |
@@ -622,7 +639,7 b' class mercurial_source(converter_source)' | |||||
622 |
|
639 | |||
623 | def lookuprev(self, rev): |
|
640 | def lookuprev(self, rev): | |
624 | try: |
|
641 | try: | |
625 | return hex(self.repo.lookup(rev)) |
|
642 | return nodemod.hex(self.repo.lookup(rev)) | |
626 | except (error.RepoError, error.LookupError): |
|
643 | except (error.RepoError, error.LookupError): | |
627 | return None |
|
644 | return None | |
628 |
|
645 |
@@ -29,7 +29,6 b'' | |||||
29 | hgext/convert/common.py not using absolute_import |
|
29 | hgext/convert/common.py not using absolute_import | |
30 | hgext/convert/convcmd.py not using absolute_import |
|
30 | hgext/convert/convcmd.py not using absolute_import | |
31 | hgext/convert/cvs.py not using absolute_import |
|
31 | hgext/convert/cvs.py not using absolute_import | |
32 | hgext/convert/hg.py not using absolute_import |
|
|||
33 | hgext/convert/monotone.py not using absolute_import |
|
32 | hgext/convert/monotone.py not using absolute_import | |
34 | hgext/convert/p4.py not using absolute_import |
|
33 | hgext/convert/p4.py not using absolute_import | |
35 | hgext/convert/subversion.py not using absolute_import |
|
34 | hgext/convert/subversion.py not using absolute_import |
General Comments 0
You need to be logged in to leave comments.
Login now