convert: allow the converter_source to say "skip this revision"
If getchanges returns a string, it's assumed to be the id of an
already converted revision. We map the current revision to the same
revision this converted revision was mapped to.
To allow skipping a root revision, getchanges can return the special
string 'hg-convert-skipped-revision' (a.k.a. common.SKIPREV), which
hopefully won't clash with any real id.
The converter_source is responsible for rewriting the parents of the
commit objects to make sure the revision graph makes sense.
--- a/hgext/convert/__init__.py Thu Oct 04 23:21:37 2007 -0300
+++ b/hgext/convert/__init__.py Thu Oct 04 23:21:37 2007 -0300
@@ -5,7 +5,7 @@
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
-from common import NoRepo, converter_source, converter_sink
+from common import NoRepo, SKIPREV, converter_source, converter_sink
from cvs import convert_cvs
from darcs import darcs_source
from git import convert_git
@@ -202,7 +202,15 @@
do_copies = hasattr(self.dest, 'copyfile')
filenames = []
- files, copies = self.source.getchanges(rev)
+ changes = self.source.getchanges(rev)
+ if isinstance(changes, basestring):
+ if changes == SKIPREV:
+ dest = SKIPREV
+ else:
+ dest = self.map[changes]
+ self.mapentry(rev, dest)
+ return
+ files, copies = changes
parents = [self.map[r] for r in commit.parents]
if commit.parents:
prev = commit.parents[0]
@@ -263,7 +271,7 @@
ctags = {}
for k in tags:
v = tags[k]
- if v in self.map:
+ if self.map.get(v, SKIPREV) != SKIPREV:
ctags[k] = self.map[v]
if c and ctags:
--- a/hgext/convert/common.py Thu Oct 04 23:21:37 2007 -0300
+++ b/hgext/convert/common.py Thu Oct 04 23:21:37 2007 -0300
@@ -17,6 +17,8 @@
class NoRepo(Exception): pass
+SKIPREV = 'hg-convert-skipped-revision'
+
class commit(object):
def __init__(self, author, date, desc, parents, branch=None, rev=None):
self.author = author