Mercurial > hg
changeset 25104:d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
It's annoying having to specify --list and --patch/--stat when all you
really want to do is to dump a patch. This creates an explicit
--patch/--stat command that is executed if --list is not specified. It
ensures that 1) there is only one shelf name specified and 2) that the
shelf exists. Then it redirects to the original listcmd code.
author | Tony Tung <tonytung@fb.com> |
---|---|
date | Tue, 14 Apr 2015 16:23:54 -0400 |
parents | ce00b2e96d09 |
children | 2f34746c27df |
files | hgext/shelve.py tests/test-shelve.t |
diffstat | 2 files changed, 59 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/shelve.py Tue Apr 14 16:23:07 2015 -0400 +++ b/hgext/shelve.py Tue Apr 14 16:23:54 2015 -0400 @@ -361,6 +361,17 @@ finally: fp.close() +def singlepatchcmds(ui, repo, pats, opts, subcommand): + """subcommand that displays a single shelf""" + if len(pats) != 1: + raise util.Abort(_("--%s expects a single shelf") % subcommand) + shelfname = pats[0] + + if not shelvedfile(repo, shelfname, 'patch').exists(): + raise util.Abort(_("cannot find shelf %s") % shelfname) + + listcmd(ui, repo, pats, opts) + def checkparents(repo, state): """check parent while resuming an unshelve""" if state.parents != repo.dirstate.parents(): @@ -699,8 +710,8 @@ ('list', set(['list'])), ('message', set(['create'])), ('name', set(['create'])), - ('patch', set(['list'])), - ('stat', set(['list'])), + ('patch', set(['patch', 'list'])), + ('stat', set(['stat', 'list'])), ] def checkopt(opt): if opts[opt]: @@ -717,11 +728,11 @@ return deletecmd(ui, repo, pats) elif checkopt('list'): return listcmd(ui, repo, pats, opts) + elif checkopt('patch'): + return singlepatchcmds(ui, repo, pats, opts, subcommand='patch') + elif checkopt('stat'): + return singlepatchcmds(ui, repo, pats, opts, subcommand='stat') else: - for i in ('patch', 'stat'): - if opts[i]: - raise util.Abort(_("option '--%s' may not be " - "used when shelving a change") % (i,)) return createcmd(ui, repo, pats, opts) def extsetup(ui):
--- a/tests/test-shelve.t Tue Apr 14 16:23:07 2015 -0400 +++ b/tests/test-shelve.t Tue Apr 14 16:23:54 2015 -0400 @@ -862,4 +862,45 @@ c x x - $ cd .. + +shelve --patch and shelve --stat should work with a single valid shelfname + + $ hg up --clean . + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg shelve --list + $ echo 'patch a' > shelf-patch-a + $ hg add shelf-patch-a + $ hg shelve + shelved as default + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo 'patch b' > shelf-patch-b + $ hg add shelf-patch-b + $ hg shelve + shelved as default-01 + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg shelve --patch default default-01 + abort: --patch expects a single shelf + [255] + $ hg shelve --stat default default-01 + abort: --stat expects a single shelf + [255] + $ hg shelve --patch default + default (* ago) changes to 'create conflict' (glob) + + diff --git a/shelf-patch-a b/shelf-patch-a + new file mode 100644 + --- /dev/null + +++ b/shelf-patch-a + @@ -0,0 +1,1 @@ + +patch a + $ hg shelve --stat default + default (* ago) changes to 'create conflict' (glob) + shelf-patch-a | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + $ hg shelve --patch nonexistentshelf + abort: cannot find shelf nonexistentshelf + [255] + $ hg shelve --stat nonexistentshelf + abort: cannot find shelf nonexistentshelf + [255] +