histedit: make histedit's commands accept revsets (issue5746)
Earlier the code was only looking for rulehashes and neglecting
all other revision identifiers, this code intercepts the fromrule function
and calls scmutil.revsingle() on anything that is not a rulehash and then
obtains the rulehash from the changectx object returned, rest of the pipeline
follows as it was
Differential Revision: https://phab.mercurial-scm.org/D2394
--- a/hgext/histedit.py Sat Mar 17 17:54:33 2018 +0900
+++ b/hgext/histedit.py Fri Feb 23 11:48:58 2018 +0530
@@ -425,11 +425,18 @@
def fromrule(cls, state, rule):
"""Parses the given rule, returning an instance of the histeditaction.
"""
- rulehash = rule.strip().split(' ', 1)[0]
+ ruleid = rule.strip().split(' ', 1)[0]
+ # ruleid can be anything from rev numbers, hashes, "bookmarks" etc
+ # Check for validation of rule ids and get the rulehash
try:
- rev = node.bin(rulehash)
+ rev = node.bin(ruleid)
except TypeError:
- raise error.ParseError("invalid changeset %s" % rulehash)
+ try:
+ _ctx = scmutil.revsingle(state.repo, ruleid)
+ rulehash = _ctx.hex()
+ rev = node.bin(rulehash)
+ except error.RepoLookupError:
+ raise error.ParseError("invalid changeset %s" % ruleid)
return cls(state, rev)
def verify(self, prev, expected, seen):
--- a/tests/test-histedit-arguments.t Sat Mar 17 17:54:33 2018 +0900
+++ b/tests/test-histedit-arguments.t Fri Feb 23 11:48:58 2018 +0530
@@ -236,10 +236,10 @@
$ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF
> pick eb57da33312f 2 three
- > pick 0
+ > pick 0u98
> pick 08d98a8350f3 4 five
> EOF
- hg: parse error: invalid changeset 0
+ hg: parse error: invalid changeset 0u98
[255]
Test short version of command
@@ -552,3 +552,39 @@
#
$ cd ..
+
+Check that histedit's commands accept revsets
+ $ hg init bar
+ $ cd bar
+ $ echo w >> a
+ $ hg ci -qAm "adds a"
+ $ echo x >> b
+ $ hg ci -qAm "adds b"
+ $ echo y >> c
+ $ hg ci -qAm "adds c"
+ $ echo z >> d
+ $ hg ci -qAm "adds d"
+ $ hg log -G -T '{rev} {desc}\n'
+ @ 3 adds d
+ |
+ o 2 adds c
+ |
+ o 1 adds b
+ |
+ o 0 adds a
+
+ $ HGEDITOR=cat hg histedit "2" --commands - << EOF
+ > base -4 adds c
+ > pick 2 adds c
+ > pick tip adds d
+ > EOF
+ $ hg log -G -T '{rev} {desc}\n'
+ @ 5 adds d
+ |
+ o 4 adds c
+ |
+ | o 1 adds b
+ |/
+ o 0 adds a
+
+