[PATCH 3 of 5] shelve: use an --unshelve parameter instead of a command
David Soria Parra
dsp at experimentalworks.net
Tue Sep 17 15:55:19 UTC 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