When you list stashes, you can provide arbitrary git-log options to change the display. However, adding just "-p" does nothing, because each stash is actually a merge commit. This implementation detail is easy to forget, leading to confused users who think "-p" is not working. We can make this easier by specifying "--cc" as a default ourselves (which does nothing if no diff format is requested by the user). The resulting diff would then be a combined diff between the base commit and the stashed index state. In many cases, though, the user did not stash anything in the index. We can further simplify this to a normal pairwise diff by using "--simplify-combined-diff". Signed-off-by: Jeff King <peff@xxxxxxxx> --- git-stash.sh | 3 ++- t/t3903-stash.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/git-stash.sh b/git-stash.sh index bcc757b..a0246d5 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -297,7 +297,8 @@ have_stash () { list_stash () { have_stash || return 0 - git log --format="%gd: %gs" -g "$@" $ref_stash -- + git log --format="%gd: %gs" -g --cc --simplify-combined-diff \ + "$@" $ref_stash -- } show_stash () { diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index 5b79b21..465f824 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -685,4 +685,67 @@ test_expect_success 'handle stash specification with spaces' ' grep pig file ' +test_expect_success 'stash list implies --cc' ' + git stash clear && + git reset --hard && + echo index >file && + git add file && + echo working >file && + git stash && + git stash list -p >actual && + cat >expect <<-\EOF && + stash@{0}: WIP on master: b27a2bc subdir + + diff --cc file + index 257cc56,9015a7a..d26b33d + --- a/file + +++ b/file + @@@ -1,1 -1,1 +1,1 @@@ + - foo + -index + ++working + EOF + test_cmp expect actual +' + +test_expect_success 'stash list implies --simplify-combined-diff' ' + git stash clear && + git reset --hard && + echo working >file && + git stash && + git stash list -p >actual && + cat >expect <<-\EOF && + stash@{0}: WIP on master: b27a2bc subdir + + diff --git a/file b/file + index 257cc56..d26b33d 100644 + --- a/file + +++ b/file + @@ -1 +1 @@ + -foo + +working + EOF + test_cmp expect actual +' + +test_expect_success '--no-simplify-combined-diff overrides default' ' + git stash clear && + git reset --hard && + echo working >file && + git stash && + git stash list -p --no-simplify-combined-diff >actual && + cat >expect <<-\EOF && + stash@{0}: WIP on master: b27a2bc subdir + + diff --cc file + index 257cc56,257cc56..d26b33d + --- a/file + +++ b/file + @@@ -1,1 -1,1 +1,1 @@@ + --foo + ++working + EOF + test_cmp expect actual +' + test_done -- 2.1.0.rc0.286.g5c67d74 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html