diff --git a/hgext/convert/common.py b/hgext/convert/common.py --- a/hgext/convert/common.py +++ b/hgext/convert/common.py @@ -55,11 +55,13 @@ SKIPREV = 'SKIP' class commit(object): def __init__(self, author, date, desc, parents, branch=None, rev=None, - extra={}, sortkey=None, saverev=True, phase=phases.draft): + extra={}, sortkey=None, saverev=True, phase=phases.draft, + optparents=None): self.author = author or 'unknown' self.date = date or '0 0' self.desc = desc - self.parents = parents + self.parents = parents # will be converted and used as parents + self.optparents = optparents or [] # will be used if already converted self.branch = branch self.rev = rev self.extra = extra diff --git a/hgext/convert/convcmd.py b/hgext/convert/convcmd.py --- a/hgext/convert/convcmd.py +++ b/hgext/convert/convcmd.py @@ -472,6 +472,9 @@ class converter(object): parents = [self.map.get(p, p) for p in parents] except KeyError: parents = [b[0] for b in pbranches] + parents.extend(self.map[x] + for x in commit.optparents + if x in self.map) if len(pbranches) != 2: cleanp2 = set() if len(parents) < 3: diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py --- a/hgext/convert/hg.py +++ b/hgext/convert/hg.py @@ -582,7 +582,9 @@ class mercurial_source(common.converter_ def getcommit(self, rev): ctx = self._changectx(rev) - parents = [p.hex() for p in self._parents(ctx)] + _parents = self._parents(ctx) + parents = [p.hex() for p in _parents] + optparents = [p.hex() for p in ctx.parents() if p and p not in _parents] crev = rev return common.commit(author=ctx.user(), @@ -591,6 +593,7 @@ class mercurial_source(common.converter_ desc=ctx.description(), rev=crev, parents=parents, + optparents=optparents, branch=ctx.branch(), extra=ctx.extra(), sortkey=ctx.rev(), diff --git a/tests/test-convert-hg-startrev.t b/tests/test-convert-hg-startrev.t --- a/tests/test-convert-hg-startrev.t +++ b/tests/test-convert-hg-startrev.t @@ -222,7 +222,7 @@ Convert from specified revs o 0 "0: add a b f" files: a b f Convert in multiple steps that doesn't overlap - the link to the parent is -currently missing +preserved anyway $ hg convert --config convert.hg.revs=::1 source multistep initializing destination multistep repository @@ -237,8 +237,8 @@ currently missing converting... 0 2: copy e from a, change b $ glog multistep - o 2 "2: copy e from a, change b" files: a b c d e - + o 2 "2: copy e from a, change b" files: b e + | o 1 "1: add c, move f to d" files: c d f | o 0 "0: add a b f" files: a b f