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.
--- a/hgext/histedit.py Tue Mar 18 15:56:24 2014 -0700
+++ b/hgext/histedit.py Thu Mar 13 16:05:06 2014 -0700
@@ -158,7 +158,6 @@
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 @@
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)
--- a/tests/test-histedit-arguments.t Tue Mar 18 15:56:24 2014 -0700
+++ b/tests/test-histedit-arguments.t Thu Mar 13 16:05:06 2014 -0700
@@ -72,6 +72,26 @@
[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 @@
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]