--- a/hgext/evolve.py Fri Feb 07 09:36:42 2014 +0100
+++ b/hgext/evolve.py Tue Feb 11 00:02:18 2014 -0600
@@ -1387,6 +1387,7 @@
[('n', 'new', [], _("successor changeset (DEPRECATED)")),
('s', 'succ', [], _("successor changeset")),
('r', 'rev', [], _("revisions to prune")),
+ ('', 'biject', False, _("do a 1-1 map between rev and successor ranges")),
('B', 'bookmark', '', _("remove revs only reachable from given"
" bookmark"))] + metadataopts,
_('[OPTION] [-r] REV...'))
@@ -1402,13 +1403,19 @@
When the working directory parent is pruned the repository is updated to a
non obsolete parents.
- you can use the ``--succ`` option to informs mercurial that a newer version
+ You can use the ``--succ`` option to informs mercurial that a newer version
of the pruned changeset exists.
+
+ You can use the ``--biject`` option to specify a 1-1 (bijection) between
+ revisions to prune and successor changesets. This option may be removed in
+ a future release (with the functionality absored automatically).
+
"""
revs = set(scmutil.revrange(repo, list(revs) + opts.get('rev')))
succs = opts['new'] + opts['succ']
bookmark = opts.get('bookmark')
metadata = _getmetadata(**opts)
+ biject = opts.get('biject')
if bookmark:
marks,revs = _reachablefrombookmark(repo, revs, bookmark)
@@ -1438,11 +1445,20 @@
# defines successors changesets
sucs = tuple(repo[n] for n in sortedrevs(succs))
- if len(sucs) > 1 and len(precs) > 1:
+ if not biject and len(sucs) > 1 and len(precs) > 1:
msg = "Can't use multiple successors for multiple precursors"
raise util.Abort(msg)
+
+ if biject and len(sucs) != len(precs):
+ msg = "Can't use %d successors for %d precursors" % (len(sucs), len(precs))
+ raise util.Abort(msg)
+
+ relations = [(p, sucs) for p in precs]
+ if biject:
+ relations = [(p, (s,)) for p, s in zip(precs, sucs)]
+
# create markers
- createmarkers(repo, [(p, sucs) for p in precs], metadata=metadata)
+ createmarkers(repo, relations, metadata=metadata)
# informs that changeset have been pruned
ui.status(_('%i changesets pruned\n') % len(precs))