bash prompt: indicate dirty index even on orphan branches

__git_ps1() doesn't indicate dirty index while on an orphan branch. To check the dirtiness of the index, __git_ps1() runs 'git diff-index --cached ... HEAD', which doesn't work on an orphan branch, because HEAD doesn't point to a valid commit. Run 'git diff ... --cached' instead, as it does the right thing both on valid and invalid HEAD, i.e. compares the index to the existing HEAD in the former case and to the empty tree in the latter. This fixes the two failing tests added in the first commit of this series. The dirtiness of the worktree is already checked with 'git diff' and is displayed correctly even on an orphan branch. Signed-off-by: SZEDER Gábor <szeder@ira.uka.de> Signed-off-by: Jeff King <peff@peff.net>

SZEDER Gábor committed Nov 21, 2015 at 12:30 UTC c26f70ceb3960603a78010c87f8ad11820ab6561
2 files changed +4 -5
contrib/completion/git-prompt.sh
+2 -3
@@ -477,9 +477,8 @@ __git_ps1 ()
477 [ "$(git config --bool bash.showDirtyState)" != "false" ]
478 then
479 git diff --no-ext-diff --quiet || w="*"
480 - if [ -n "$short_sha" ]; then
481 - git diff-index --cached --quiet HEAD -- || i="+"
482 - else
480 + git diff --no-ext-diff --cached --quiet || i="+"
481 + if [ -z "$short_sha" ] && [ -z "$i" ]; then
482 i="#"
483 fi
484 fi
t/t9903-bash-prompt.sh
+2 -2
@@ -285,7 +285,7 @@ test_expect_success 'prompt - dirty status indicator - orphan branch - clean' '
285 test_cmp expected "$actual"
286 '
287
288 -test_expect_failure 'prompt - dirty status indicator - orphan branch - dirty index' '
288 +test_expect_success 'prompt - dirty status indicator - orphan branch - dirty index' '
289 printf " (orphan +)" >expected &&
290 test_when_finished "git checkout master" &&
291 git checkout --orphan orphan &&
@@ -296,7 +296,7 @@ test_expect_failure 'prompt - dirty status indicator - orphan branch - dirty ind
296 test_cmp expected "$actual"
297 '
298
299 -test_expect_failure 'prompt - dirty status indicator - orphan branch - dirty index and worktree' '
299 +test_expect_success 'prompt - dirty status indicator - orphan branch - dirty index and worktree' '
300 printf " (orphan *+)" >expected &&
301 test_when_finished "git checkout master" &&
302 git checkout --orphan orphan &&