Re: [PATCH v3] stash: handle specifying stashes with spaces
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 7, 2014, 18:42 UTC
- Message-ID
- <xmqq7gabeiqo.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <1389082935-16159-1-git-send-email-oystwa@gmail.com>
Øystein Walle <oystwa@gmail.com> writes:
Show 18 quoted lines
> When trying to pop/apply a stash specified with an argument containing
> spaces git-stash will throw an error:
>
> $ git stash pop 'stash@{two hours ago}'
> Too many revisions specified: stash@{two hours ago}
>
> This happens because word splitting is used to count non-option
> arguments. Make use of rev-parse's --sq option to quote the arguments
> for us to ensure a correct count. Add quotes where necessary.
>
> Also add a test that verifies correct behaviour.
>
> Helped-by: Thomas Rast <tr@thomasrast.ch>
> Signed-off-by: Øystein Walle <oystwa@gmail.com>
> ---
> v3 uses the same eval/--sq technique as v2, suggested by Thomas Rast.
> This is basically a resend except that I added a missing '&&' in the
> test that Eric Sunshine noticed when reading v1.The change looks good.
An unrelated tangent, but here is a tip-of-the-day for the approximate parser. You could have just said
git stash pop stash@{2.hours}and it would have been interpreted just the same ;-)
Show 11 quoted lines
> diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh > index debda7a..7eb011c 100755 > --- a/t/t3903-stash.sh > +++ b/t/t3903-stash.sh > @@ -673,4 +673,15 @@ test_expect_success 'store updates stash ref and reflog' ' > grep quux bazzy > ' > > +test_expect_success 'handle stash specification with spaces' ' > + git stash clear && > + echo pig > file &&
Style: no SP between redirection operator and its target, i.e.
echo pig >file &&
Show 5 quoted lines
> + git stash &&
> + test_tick &&
> + echo cow > file &&
> + git stash &&
> + git stash apply "stash@{Thu Apr 7 15:17:13 2005 -0700}" &&This is brittle. If new tests are added before this, the test_tick will give you different timestamp and this test will start failing.
Perhaps grab the timestamp out of the stash that was created, e.g.
...
test_tick &&
git stash &&
stamp=$(git log -g --format="%cd" -1 refs/stash) &&
test_tick &&
echo cow >file &&
git stash &&
git stash apply "stash@{$stamp}" &&or something?
> + grep pig file > +' > + > test_done