stash: fix show referencing stash index
authorThomas Gummerer <t.gummerer@gmail.com>
Sat, 15 Jun 2019 11:26:18 +0000 (12:26 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 19 Jun 2019 21:47:49 +0000 (14:47 -0700)
commit63b50c8ffe7133d2ec7d243dd9240c14ddfe8a26
tree140febf05a4e4d8f3fa16d820650a877654788ac
parentb697d92f56511e804b8ba20ccbe7bdc85dc66810
stash: fix show referencing stash index

In the conversion of 'stash show' to C in dc7bd382b1 ("stash: convert
show to builtin", 2019-02-25), 'git stash show <n>', where n is the
index of a stash got broken, if n is not a file or a valid revision by
itself.

'stash show' accepts any flag 'git diff' accepts for changing the
output format.  Internally we use 'setup_revisions()' to parse these
command line flags.  Currently we pass the whole argv through to
'setup_revisions()', which includes the stash index.

As the stash index is not a valid revision or a file in the working
tree in most cases however, this 'setup_revisions()' call (and thus
the whole command) ends up failing if we use this form of 'git stash
show'.

Instead of passing the whole argv to 'setup_revisions()', only pass
the flags (and the command name) through, while excluding the stash
reference.  The stash reference is parsed (and validated) in
'get_stash_info()' already.

This separate parsing also means that we currently do produce the
correct output if the command succeeds.

Reported-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/stash.c
t/t3903-stash.sh