bash prompt: indicate dirty index even on orphan branches
authorSZEDER Gábor <szeder@ira.uka.de>
Sat, 21 Nov 2015 11:30:09 +0000 (12:30 +0100)
committerJeff King <peff@peff.net>
Tue, 24 Nov 2015 20:27:01 +0000 (15:27 -0500)
__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>
contrib/completion/git-prompt.sh
t/t9903-bash-prompt.sh
index 7a95fbdcfdbedac1aa4c06b720a356a41fd0b356..64219e631ab9babdc9eb78137478bde2c2cabec8 100644 (file)
@@ -477,9 +477,8 @@ __git_ps1 ()
                   [ "$(git config --bool bash.showDirtyState)" != "false" ]
                then
                        git diff --no-ext-diff --quiet || w="*"
-                       if [ -n "$short_sha" ]; then
-                               git diff-index --cached --quiet HEAD -- || i="+"
-                       else
+                       git diff --no-ext-diff --cached --quiet || i="+"
+                       if [ -z "$short_sha" ] && [ -z "$i" ]; then
                                i="#"
                        fi
                fi
index 2c9d1f928ae4a0ec9db6ee2fb6c26e986a27ce3c..af82049f82e89c3275c0f1e6c5da9d7f9c7041f5 100755 (executable)
@@ -285,7 +285,7 @@ test_expect_success 'prompt - dirty status indicator - orphan branch - clean' '
        test_cmp expected "$actual"
 '
 
-test_expect_failure 'prompt - dirty status indicator - orphan branch - dirty index' '
+test_expect_success 'prompt - dirty status indicator - orphan branch - dirty index' '
        printf " (orphan +)" >expected &&
        test_when_finished "git checkout master" &&
        git checkout --orphan orphan &&
@@ -296,7 +296,7 @@ test_expect_failure 'prompt - dirty status indicator - orphan branch - dirty ind
        test_cmp expected "$actual"
 '
 
-test_expect_failure 'prompt - dirty status indicator - orphan branch - dirty index and worktree' '
+test_expect_success 'prompt - dirty status indicator - orphan branch - dirty index and worktree' '
        printf " (orphan *+)" >expected &&
        test_when_finished "git checkout master" &&
        git checkout --orphan orphan &&