diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -361,6 +361,17 @@ def listcmd(ui, repo, pats, opts): 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 @@ def shelvecmd(ui, repo, *pats, **opts): ('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 @@ def shelvecmd(ui, repo, *pats, **opts): 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): diff --git a/tests/test-shelve.t b/tests/test-shelve.t --- a/tests/test-shelve.t +++ b/tests/test-shelve.t @@ -862,4 +862,45 @@ Test interactive shelve 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] +