Re: [PATCH v3] stash: handle specifying stashes with spaces
flat view
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:59:37
Øystein Walle [off-list ref] writes:
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 [off-list ref]
Signed-off-by: Øystein Walle <redacted>
---
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 ;-)
quoted hunk
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 &&
quoted hunk
+ 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?
quoted hunk
+ grep pig file +' + test_done