Mercurial > public > mercurial-scm > evolve
diff hgext/evolve.py @ 789:0d2bb0282e78
prune: add biject option
This option allows two ranges to be given for successors and precursors such
that there is a one-to-one match between each range.
Test coverage has been added.
author | Sean Farley <sean.michael.farley@gmail.com> |
---|---|
date | Tue, 11 Feb 2014 00:02:18 -0600 |
parents | e973dd5bf583 |
children | 80e078959129 97d8a652f9b9 |
line wrap: on
line diff
--- 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))