evolve: make split respect rev args passed without --rev or -r
Currently, if one runs `hg split .` or `hg split`, it will fail
with an exception. This happens becuase we only expect revision
args to be passed as --rev/-r ones and don't treat unnamed args
properly or add default values if no args are provided.
--- a/hgext/evolve.py Thu Feb 04 01:19:14 2016 +0000
+++ b/hgext/evolve.py Thu Feb 04 02:46:40 2016 -0800
@@ -2723,16 +2723,13 @@
tr = wlock = lock = None
newcommits = []
- revopt = opts.get('rev')
- if revopt:
- revs = scmutil.revrange(repo, revopt)
- if len(revs) != 1:
- raise error.Abort(_("you can only specify one revision to split"))
- else:
- rev = list(revs)[0]
- else:
- rev = '.'
-
+ revarg = (list(revs) + opts.get('rev')) or ['.']
+ if len(revarg) != 1:
+ msg = _("more than one revset is given")
+ hnt = _("use either `hg split <rs>` or `hg split --rev <rs>`, not both")
+ raise error.Abort(msg, hint=hnt)
+
+ rev = scmutil.revsingle(repo, revarg[0])
try:
wlock = repo.wlock()
lock = repo.lock()
--- a/tests/test-split.t Thu Feb 04 01:19:14 2016 +0000
+++ b/tests/test-split.t Thu Feb 04 02:46:40 2016 -0800
@@ -320,9 +320,14 @@
bookA 19:a2b5c9d9b362
* bookB 19:a2b5c9d9b362
-Cannot specify multiple revisions with -r
+Lastest revision is selected if multiple are given to -r
$ hg split -r "desc(_a)::"
- abort: you can only specify one revision to split
+ (leaving bookmark bookB)
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ adding _d
+ diff --git a/_d b/_d
+ new file mode 100644
+ examine changes to '_d'? [Ynesfdaq?] abort: response expected
[255]
Cannot split a commit that is not a head if instability is not allowed
@@ -335,4 +340,41 @@
abort: cannot split commit: ced8fbcce3a7 not a head
[255]
+Changing evolution level to createmarkers
+ $ echo "[experimental]" >> $HGRCPATH
+ $ echo "evolution=createmarkers" >> $HGRCPATH
+Running split without any revision operates on the parent of the working copy
+ $ hg split << EOF
+ > q
+ > EOF
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ adding _d
+ diff --git a/_d b/_d
+ new file mode 100644
+ examine changes to '_d'? [Ynesfdaq?] q
+
+ abort: user quit
+ [255]
+
+Running split with tip revision, specified as unnamed argument
+ $ hg split . << EOF
+ > q
+ > EOF
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ adding _d
+ diff --git a/_d b/_d
+ new file mode 100644
+ examine changes to '_d'? [Ynesfdaq?] q
+
+ abort: user quit
+ [255]
+
+Running split with both unnamed and named revision arguments shows an error msg
+ $ hg split . --rev .^ << EOF
+ > q
+ > EOF
+ abort: more than one revset is given
+ (use either `hg split <rs>` or `hg split --rev <rs>`, not both)
+ [255]
+