From 3fcb88785da831ad7d53cf18b4398099179c9c87 Mon Sep 17 00:00:00 2001 From: Brandon Casey Date: Fri, 24 Sep 2010 15:40:38 -0500 Subject: [PATCH 1/2] t/t3903-stash: improve testing of git-stash show Recently, the 'stash show' functionality was broken for the case when a stash-like argument was supplied. Since, commit 9bf09e, 'stash show' when supplied a stash-like argument prints nothing and still exists with a zero status. Unfortunately, the flaw slipped through the test suite cracks since the output of 'stash show' was not verified to be correct. Improve and expand on the existing tests so that this flaws is detected. Signed-off-by: Brandon Casey Signed-off-by: Junio C Hamano --- t/t3903-stash.sh | 62 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index a283dca25f..e8a7338862 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -406,7 +406,7 @@ test_expect_success 'stash branch - stashes on stack, stash-like argument' ' test $(git ls-files --modified | wc -l) -eq 1 ' -test_expect_success 'stash show - stashes on stack, stash-like argument' ' +test_expect_failure 'stash show - stashes on stack, stash-like argument' ' git stash clear && test_when_finished "git reset --hard HEAD" && git reset --hard && @@ -416,16 +416,70 @@ test_expect_success 'stash show - stashes on stack, stash-like argument' ' echo bar >> file && STASH_ID=$(git stash create) && git reset --hard && - git stash show ${STASH_ID} + cat >expected <<-EOF && + file | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + EOF + git stash show ${STASH_ID} >actual && + test_cmp expected actual ' -test_expect_success 'stash show - no stashes on stack, stash-like argument' ' + +test_expect_failure 'stash show -p - stashes on stack, stash-like argument' ' + git stash clear && + test_when_finished "git reset --hard HEAD" && + git reset --hard && + echo foo >> file && + git stash && + test_when_finished "git stash drop" && + echo bar >> file && + STASH_ID=$(git stash create) && + git reset --hard && + cat >expected <<-EOF && + diff --git a/file b/file + index 7601807..935fbd3 100644 + --- a/file + +++ b/file + @@ -1 +1,2 @@ + baz + +bar + EOF + git stash show -p ${STASH_ID} >actual && + test_cmp expected actual +' + +test_expect_failure 'stash show - no stashes on stack, stash-like argument' ' git stash clear && test_when_finished "git reset --hard HEAD" && git reset --hard && echo foo >> file && STASH_ID=$(git stash create) && git reset --hard && - git stash show ${STASH_ID} + cat >expected <<-EOF && + file | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + EOF + git stash show ${STASH_ID} >actual && + test_cmp expected actual +' + +test_expect_failure 'stash show -p - no stashes on stack, stash-like argument' ' + git stash clear && + test_when_finished "git reset --hard HEAD" && + git reset --hard && + echo foo >> file && + STASH_ID=$(git stash create) && + git reset --hard && + cat >expected <<-EOF && + diff --git a/file b/file + index 7601807..71b52c4 100644 + --- a/file + +++ b/file + @@ -1 +1,2 @@ + baz + +foo + EOF + git stash show -p ${STASH_ID} >actual && + test_cmp expected actual ' test_expect_success 'stash drop - fail early if specified stash is not a stash reference' ' From 9027fa9eb7df606b6658dd48a40bb993ce222ddd Mon Sep 17 00:00:00 2001 From: Brian Gernhardt Date: Fri, 24 Sep 2010 18:15:34 -0400 Subject: [PATCH 2/2] git-stash: fix flag parsing Currently git-stash uses `git rev-parse --no-revs -- "$@"` to set its FLAGS variable. This is the same as `FLAGS="-- $@"`. It should use `git rev-parse --no-revs --flags "$@"`, but that eats any "-q" or "--quiet" argument. So move the check for quiet before rev-parse. Signed-off-by: Brian Gernhardt Signed-off-by: Junio C Hamano --- git-stash.sh | 15 +++++++++++---- t/t3903-stash.sh | 8 ++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/git-stash.sh b/git-stash.sh index 7ce818bd1b..57f36ce8dd 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -264,8 +264,18 @@ parse_flags_and_rev() b_tree= i_tree= + # Work around rev-parse --flags eating -q + for opt + do + case "$opt" in + -q|--quiet) + GIT_QUIET=t + ;; + esac + done + REV=$(git rev-parse --no-flags --symbolic "$@" 2>/dev/null) - FLAGS=$(git rev-parse --no-revs -- "$@" 2>/dev/null) + FLAGS=$(git rev-parse --no-revs --flags "$@" 2>/dev/null) set -- $FLAGS @@ -273,9 +283,6 @@ parse_flags_and_rev() while test $# -ne 0 do case "$1" in - -q|--quiet) - GIT_QUIET=-t - ;; --index) INDEX_OPTION=--index ;; diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index e8a7338862..9ed2396e29 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -406,7 +406,7 @@ test_expect_success 'stash branch - stashes on stack, stash-like argument' ' test $(git ls-files --modified | wc -l) -eq 1 ' -test_expect_failure 'stash show - stashes on stack, stash-like argument' ' +test_expect_success 'stash show - stashes on stack, stash-like argument' ' git stash clear && test_when_finished "git reset --hard HEAD" && git reset --hard && @@ -424,7 +424,7 @@ test_expect_failure 'stash show - stashes on stack, stash-like argument' ' test_cmp expected actual ' -test_expect_failure 'stash show -p - stashes on stack, stash-like argument' ' +test_expect_success 'stash show -p - stashes on stack, stash-like argument' ' git stash clear && test_when_finished "git reset --hard HEAD" && git reset --hard && @@ -447,7 +447,7 @@ test_expect_failure 'stash show -p - stashes on stack, stash-like argument' ' test_cmp expected actual ' -test_expect_failure 'stash show - no stashes on stack, stash-like argument' ' +test_expect_success 'stash show - no stashes on stack, stash-like argument' ' git stash clear && test_when_finished "git reset --hard HEAD" && git reset --hard && @@ -462,7 +462,7 @@ test_expect_failure 'stash show - no stashes on stack, stash-like argument' ' test_cmp expected actual ' -test_expect_failure 'stash show -p - no stashes on stack, stash-like argument' ' +test_expect_success 'stash show -p - no stashes on stack, stash-like argument' ' git stash clear && test_when_finished "git reset --hard HEAD" && git reset --hard &&