changeset 5374:e710874247d1

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.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Thu, 04 Oct 2007 23:21:37 -0300
parents 6aba1835a7b3
children dae323e453aa
files hgext/convert/__init__.py hgext/convert/common.py
diffstat 2 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/convert/__init__.py
+++ b/hgext/convert/__init__.py
@@ -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 @@ class converter(object):
         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 @@ class converter(object):
             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
+++ b/hgext/convert/common.py
@@ -17,6 +17,8 @@ def decodeargs(s):
 
 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