git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/3] bash prompt: indicate dirty index even on orphan branches

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Nov 21, 2015, 11:30 UTC
Message-ID
<1448105409-4494-3-git-send-email-szeder@ira.uka.de>
In-Reply-To
<1448105409-4494-1-git-send-email-szeder@ira.uka.de>
__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>
---
 contrib/completion/git-prompt.sh | 5 ++---
 t/t9903-bash-prompt.sh           | 4 ++--
 2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 7a95fbdcfd..64219e631a 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -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
diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
index 2c9d1f928a..af82049f82 100755
--- a/t/t9903-bash-prompt.sh
+++ b/t/t9903-bash-prompt.sh
@@ -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 &&
-- 
2.6.3.402.geb6a0f7
Previous: SZEDER Gábor
Message 4 of 4 in “bash prompt: test dirty index and worktree while on an orphan branch”
  1. 1/3 bash prompt: test dirty index and worktree while on an orphan branchSZEDER Gábor, Nov 21, 2015
  2. 2/3 bash prompt: remove a redundant command line optionSZEDER Gábor, Nov 21, 2015
  3. 2/3 bash prompt: remove a redundant 'git diff' optionSZEDER Gábor, Nov 21, 2015
  4. 3/3 bash prompt: indicate dirty index even on orphan branchesSZEDER Gábor, Nov 21, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.