# HG changeset patch # User David Soria Parra # Date 2014-03-13 23:05:06 # Node ID d66862b87ae69a92b233b88a212f79c4abcc1327 # Parent c5aaeca0cfbfaad91eaa9c1a40f04b424bce2bd9 histedit: select the lowest rev when looking for a root in a revset (bc) When we specify a revision or a revset we just get the last element from the list. For revsets this can lead to unintended effects where you specify a revset like only() but instead histedit selects the highest revision in the set as root. Therefore we should always use the lowest revision number as root. diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -158,7 +158,6 @@ from mercurial import context from mercurial import hg from mercurial import node from mercurial import repair -from mercurial import scmutil from mercurial import util from mercurial import obsolete from mercurial import merge as mergemod @@ -568,8 +567,11 @@ def _histedit(ui, repo, *freeargs, **opt remote = None root = findoutgoing(ui, repo, remote, force, opts) else: - root = revs[0] - root = scmutil.revsingle(repo, root).node() + rootrevs = list(repo.set('roots(%lr)', revs)) + if len(rootrevs) != 1: + raise util.Abort(_('The specified revisions must have ' + + 'exactly one common root')) + root = rootrevs[0].node() keep = opts.get('keep', False) revs = between(repo, root, topmost, keep) diff --git a/tests/test-histedit-arguments.t b/tests/test-histedit-arguments.t --- a/tests/test-histedit-arguments.t +++ b/tests/test-histedit-arguments.t @@ -72,6 +72,26 @@ Run on a revision not ancestors of the c [255] $ hg up --quiet + +Test that we pick the minimum of a revrange +--------------------------------------- + + $ HGEDITOR=cat hg histedit '2::' --commands - << EOF + > pick eb57da33312f 2 three + > pick c8e68270e35a 3 four + > pick 08d98a8350f3 4 five + > EOF + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg up --quiet + + $ HGEDITOR=cat hg histedit 'tip:2' --commands - << EOF + > pick eb57da33312f 2 three + > pick c8e68270e35a 3 four + > pick 08d98a8350f3 4 five + > EOF + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg up --quiet + Run on a revision not descendants of the initial parent -------------------------------------------------------------------- @@ -198,3 +218,12 @@ short hash. This tests issue3893. 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 0 files updated, 0 files merged, 0 files removed, 0 files unresolved saved backup bundle to $TESTTMP/foo/.hg/strip-backup/*-backup.hg (glob) + + $ hg update -q 2 + $ echo x > x + $ hg add x + $ hg commit -m'x' x + created new head + $ hg histedit -r 'heads(all())' + abort: The specified revisions must have exactly one common root + [255]