evolve: make split respect rev args passed without --rev or -r
authorKostia Balytskyi <ikostia@fb.com>
Thu, 04 Feb 2016 02:46:40 -0800
changeset 1598 2a08ef812b84
parent 1597 7876ed4fceb7
child 1602 f932853783a5
child 1614 99077dbb83e0
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.
hgext/evolve.py
tests/test-split.t
--- 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]
+