Skip to content

Commit

Permalink
stash: default listing to working-tree diff
Browse files Browse the repository at this point in the history
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 defaulting to "--first-parent -m", which will
show the diff against the working tree. This omits the
index portion of the stash entirely, but it's simple and it
matches what "git stash show" provides.

People who are more clueful about stash's true form can use
"--cc" to override the "-m", and the "--first-parent" will
then do nothing. For diffs, it only affects non-combined
diffs, so "--cc" overrides it. And for the traversal, we are
walking the linear reflog anyway, so we do not even care
about the parents.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
peff authored and gitster committed Aug 7, 2014
1 parent d31f3ad commit 288c67c
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
2 changes: 1 addition & 1 deletion git-stash.sh
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ have_stash () {

list_stash () {
have_stash || return 0
git log --format="%gd: %gs" -g "$@" $ref_stash --
git log --format="%gd: %gs" -g --first-parent -m "$@" $ref_stash --
}

show_stash () {
Expand Down
42 changes: 42 additions & 0 deletions t/t3903-stash.sh
Original file line number Diff line number Diff line change
Expand Up @@ -685,4 +685,46 @@ test_expect_success 'handle stash specification with spaces' '
grep pig file
'

test_expect_success 'setup stash with index and worktree changes' '
git stash clear &&
git reset --hard &&
echo index >file &&
git add file &&
echo working >file &&
git stash
'

test_expect_success 'stash list implies --first-parent -m' '
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
git stash list -p >actual &&
test_cmp expect actual
'

test_expect_success 'stash list --cc shows combined diff' '
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
git stash list -p --cc >actual &&
test_cmp expect actual
'

test_done

0 comments on commit 288c67c

Please sign in to comment.