convert: document splicemap, allow setting of multiple parents
authorBryan O'Sullivan <bos@serpentine.com>
Tue, 19 Feb 2008 10:53:40 -0800
changeset 6143 5b159ebb19cf
parent 6142 50a277e6ceae
child 6144 08e0825b8106
child 6150 aafdea37f796
convert: document splicemap, allow setting of multiple parents
hgext/convert/__init__.py
hgext/convert/convcmd.py
--- a/hgext/convert/__init__.py	Mon Feb 18 19:21:33 2008 +0100
+++ b/hgext/convert/__init__.py	Tue Feb 19 10:53:40 2008 -0800
@@ -67,6 +67,17 @@
     subdirectory into the root of the repository, use '.' as the path to
     rename to.
 
+    The splicemap is a file that allows insertion of synthetic
+    history, letting you specify the parents of a revision.  This is
+    useful if you want to e.g. give a Subversion merge two parents, or
+    graft two disconnected series of history together.  Each entry
+    contains a key, followed by a space, followed by one or two
+    values, separated by spaces.  The key is the revision ID in the
+    source revision control system whose parents should be modified
+    (same format as a key in .hg/shamap).  The values are the revision
+    IDs (in either the source or destination revision control system)
+    that should be used as the new parents for that node.
+
     Back end options:
 
     --config convert.hg.clonebranches=False   (boolean)
@@ -100,6 +111,7 @@
           ('', 'filemap', '', 'remap file names using contents of file'),
           ('r', 'rev', '', 'import up to target revision REV'),
           ('s', 'source-type', '', 'source repository type'),
+          ('', 'splicemap', '', 'splice synthesized history into place'),
           ('', 'datesort', None, 'try to sort changesets by date')],
          'hg convert [OPTION]... SOURCE [DEST [MAPFILE]]'),
     "debugsvnlog":
--- a/hgext/convert/convcmd.py	Mon Feb 18 19:21:33 2008 +0100
+++ b/hgext/convert/convcmd.py	Tue Feb 19 10:53:40 2008 -0800
@@ -84,7 +84,7 @@
             self.readauthormap(opts.get('authors'))
             self.authorfile = self.dest.authorfile()
 
-        self.splicemap = mapfile(ui, ui.config('convert', 'splicemap'))
+        self.splicemap = mapfile(ui, opts.get('splicemap'))
 
     def walktree(self, heads):
         '''Return a mapping that identifies the uncommitted parents of every
@@ -252,9 +252,10 @@
                         self.dest.copyfile(copyf, f)
 
         try:
-            parents = [self.splicemap[rev]]
-            self.ui.debug('spliced in %s as parents of %s\n' %
-                          (parents, rev))
+            parents = self.splicemap[rev].replace(',', ' ').split()
+            self.ui.status('spliced in %s as parents of %s\n' %
+                           (parents, rev))
+            parents = [self.map.get(p, p) for p in parents]
         except KeyError:
             parents = [b[0] for b in pbranches]
         newnode = self.dest.putcommit(filenames, parents, commit)