[PATCH 3 of 5] shelve: use an --unshelve parameter instead of a command

David Soria Parra dsp at experimentalworks.net
Tue Sep 17 10:55:19 CDT 2013


# HG changeset patch
# User David Soria Parra <dsp at experimentalworks.net>
# Date 1379432862 -7200
#      Tue Sep 17 17:47:42 2013 +0200
# Node ID 4a6bc39240c0f556ab3ab7eabfde347aadba3287
# Parent  f533657af87051e0a7a3d6ffc30a9dd7d2415d5a
shelve: use an --unshelve parameter instead of a command

Most Mercurial commands use a parameter to indicate the reverse
operation e.g. hg bookmark/hg bookmark -d, hg tag/hg tag --remove,
We add an --unshelve parameter and drop the unshelve command to
match the UI of recently added commands.

diff --git a/hgext/shelve.py b/hgext/shelve.py
--- a/hgext/shelve.py
+++ b/hgext/shelve.py
@@ -11,7 +11,7 @@
 and reverts those changes, resetting the working directory to a clean
 state.
 
-Later on, the "hg unshelve" command restores the changes saved by "hg
+Later on, the "hg shelve --unshelve" command restores the changes saved by "hg
 shelve". Changes can be restored even after updating to a different
 parent, in which case Mercurial's merge machinery will resolve any
 conflicts if necessary.
@@ -384,7 +384,8 @@
         if [f for f in ms if ms[f] == 'u']:
             raise util.Abort(
                 _("unresolved conflicts, can't continue"),
-                hint=_("see 'hg resolve', then 'hg unshelve --continue'"))
+                hint=_("see 'hg resolve', then 'hg shelve --unshelve "
+                       "--continue'"))
         finishmerge(ui, repo, ms, state.stripnodes, state.name, opts)
         lock = repo.lock()
         repair.strip(ui, repo, state.stripnodes, backup='none', topic='shelve')
@@ -393,15 +394,7 @@
     finally:
         lockmod.release(lock, wlock)
 
- at command('unshelve',
-         [('a', 'abort', None,
-           _('abort an incomplete unshelve operation')),
-          ('c', 'continue', None,
-           _('continue an incomplete unshelve operation')),
-          ('', 'keep', None,
-           _('save shelved change'))],
-         _('hg unshelve [SHELVED]'))
-def unshelve(ui, repo, *shelved, **opts):
+def unshelvecmd(ui, repo, shelved, opts):
     '''restore a shelved change to the working directory
 
     This command accepts an optional name of a shelved change to
@@ -498,7 +491,7 @@
                                *revertfiles, no_backup=True)
                 raise error.InterventionRequired(
                     _("unresolved conflicts (see 'hg resolve', then "
-                      "'hg unshelve --continue')"))
+                      "'hg shelve --unshelve --continue')"))
             finishmerge(ui, repo, ms, stripnodes, basename, opts)
         else:
             parent = tip.parents()[0]
@@ -520,12 +513,18 @@
 @command('shelve',
          [('A', 'addremove', None,
            _('mark new/missing files as added/removed before shelving')),
+          ('a', 'abort', None,
+           _('abort an incomplete unshelve operation')),
+          ('c', 'continue', None,
+           _('continue an incomplete unshelve operation')),
           ('', 'cleanup', None,
            _('delete all shelved changes')),
           ('', 'date', '',
            _('shelve with the specified commit date'), _('DATE')),
           ('d', 'delete', None,
            _('delete the named shelved change(s)')),
+          ('', 'keep', None,
+           _('save shelved change')),
           ('l', 'list', None,
            _('list current shelves')),
           ('m', 'message', '',
@@ -535,7 +534,9 @@
           ('p', 'patch', None,
            _('show patch')),
           ('', 'stat', None,
-           _('output diffstat-style summary of changes'))],
+           _('output diffstat-style summary of changes')),
+          ('', 'unshelve', None,
+           _('unshelve the last shelved change'))],
          _('hg shelve'))
 def shelvecmd(ui, repo, *pats, **opts):
     '''save and set aside changes from the working directory
@@ -571,14 +572,20 @@
                     raise util.Abort(_("options '--%s' and '--%s' may not be "
                                        "used together") % (opt, i))
             return True
-    if checkopt('cleanup', 'addremove delete list message name patch stat'):
+    if checkopt('cleanup', 'addremove unshelve delete list '
+                           'message name patch stat'):
         if pats:
             raise util.Abort(_("cannot specify names when using '--cleanup'"))
         return cleanupcmd(ui, repo)
-    elif checkopt('delete', 'addremove cleanup list message name patch stat'):
+    elif checkopt('delete','addremove unshelve abort continue '
+                           'cleanup list keep message name patch stat'):
         return deletecmd(ui, repo, pats)
-    elif checkopt('list', 'addremove cleanup delete message name'):
+    elif checkopt('list', 'addremove unshelve abort continue cleanup delete '
+                          'keep message name'):
         return listcmd(ui, repo, pats, opts)
+    elif checkopt('unshelve', 'addremove cleanup delete message name '
+                              'patch stat name'):
+        return unshelvecmd(ui, repo, pats, opts)
     else:
         for i in ('patch', 'stat'):
             if opts[i]:
diff --git a/tests/test-shelve.t b/tests/test-shelve.t
--- a/tests/test-shelve.t
+++ b/tests/test-shelve.t
@@ -93,7 +93,7 @@
 local edits should prevent a shelved change from applying
 
   $ echo e>>a/a
-  $ hg unshelve
+  $ hg shelve --unshelve
   unshelving change 'default-01'
   the following shelved files have been modified:
     a/a
@@ -106,7 +106,7 @@
 
 apply it and make sure our state is as expected
 
-  $ hg unshelve
+  $ hg shelve --unshelve
   unshelving change 'default-01'
   adding changesets
   adding manifests
@@ -122,10 +122,10 @@
   R b/b
   $ hg shelve -l
 
-  $ hg unshelve
+  $ hg shelve --unshelve
   abort: no shelved changes to apply!
   [255]
-  $ hg unshelve foo
+  $ hg shelve --unshelve foo
   abort: shelved change 'foo' not found
   [255]
 
@@ -155,7 +155,7 @@
 
 and now "a/a" should reappear
 
-  $ hg unshelve -q wibble
+  $ hg shelve --unshelve -q wibble
   $ hg status -C
   M a/a
   A b.rename/b
@@ -180,7 +180,7 @@
 
 force a conflicted merge to occur
 
-  $ hg unshelve
+  $ hg shelve --unshelve
   unshelving change 'default'
   adding changesets
   adding manifests
@@ -191,7 +191,7 @@
   merging a/a incomplete! (edit conflicts, then use 'hg resolve --mark')
   2 files updated, 0 files merged, 1 files removed, 1 files unresolved
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  unresolved conflicts (see 'hg resolve', then 'hg shelve --unshelve --continue')
   [1]
 
 ensure that we have a merge with unresolved conflicts
@@ -258,7 +258,7 @@
   A foo/foo
   R b/b
   ? a/a.orig
-  $ hg unshelve -a
+  $ hg shelve --unshelve -a
   unshelve of 'default' aborted
   $ hg heads -q
   2:ceefc37abe1e
@@ -276,7 +276,7 @@
 
 try to continue with no unshelve underway
 
-  $ hg unshelve -c
+  $ hg shelve --unshelve -c
   abort: no unshelve operation underway
   [255]
   $ hg status
@@ -285,23 +285,23 @@
 
 redo the unshelve to get a conflict
 
-  $ hg unshelve -q
+  $ hg shelve --unshelve -q
   warning: conflicts during merge.
   merging a/a incomplete! (edit conflicts, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  unresolved conflicts (see 'hg resolve', then 'hg shelve --unshelve --continue')
   [1]
 
 attempt to continue
 
-  $ hg unshelve -c
+  $ hg shelve --unshelve -c
   abort: unresolved conflicts, can't continue
-  (see 'hg resolve', then 'hg unshelve --continue')
+  (see 'hg resolve', then 'hg shelve --unshelve --continue')
   [255]
 
   $ hg revert -r . a/a
   $ hg resolve -m a/a
 
-  $ hg unshelve -c
+  $ hg shelve --unshelve -c
   unshelve of 'default' complete
 
 ensure the repo is as we hope
@@ -339,7 +339,7 @@
   $ chmod +x a/a
   $ hg shelve -q -n execbit a/a
   $ hg status a/a
-  $ hg unshelve -q execbit
+  $ hg shelve --unshelve -q execbit
   $ hg status a/a
   M a/a
   $ hg revert a/a
@@ -352,7 +352,7 @@
   $ ln -s foo a/a
   $ hg shelve -q -n symlink a/a
   $ hg status a/a
-  $ hg unshelve -q symlink
+  $ hg shelve --unshelve -q symlink
   $ hg status a/a
   M a/a
   $ hg revert a/a
@@ -370,7 +370,7 @@
 
 if we resolve a conflict while unshelving, the unshelve should succeed
 
-  $ HGMERGE=true hg unshelve
+  $ HGMERGE=true hg shelve --unshelve
   unshelving change 'default'
   adding changesets
   adding manifests


More information about the Mercurial-devel mailing list