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

[PATCH 2/4] git-prompt: make upstream state indicator location consistent

From
Justin Donnelly via GitGitGadget <gitgitgadget@gmail.com>
Date
Feb 25, 2022, 11:44 UTC
Message-ID
<b503cac5ae3e89aa7b6f996567a5d7b4d2a05d29.1645789446.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1162.git.1645789446.gitgitgadget@gmail.com>
From: Justin Donnelly <justinrdonnelly@gmail.com>

Make upstream state indicator location more consistent with similar state indicators (e.g. sparse). Group the short state indicator (`=`, `<`, `>`, or `<>`) with other short state indicators immediately after the branch name. Group the long state indicator (e.g. `u+2-1 origin/main`) with other long state indicators after the short state indicators. Previously short and long upstream state indicators appeared after all other state indicators.

Use a separator (`SP` or `GIT_PS1_STATESEPARATOR`) between branch name and short upstream state indicator. Previously the short upstream state indicator would sometimes appear directly adjacent to the branch name (e.g. `(main=)`) instead of being separated (e.g. `(main =)`).

Signed-off-by: Justin Donnelly <justinrdonnelly@gmail.com>
---
 contrib/completion/git-prompt.sh | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 3997e099aa7..613389a53bc 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -109,7 +109,7 @@
 __git_printf_supports_v=
 printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1
 
-# stores the divergence from upstream in $p
+# stores the divergence from upstream in $p (for short status) or $upstream (for verbose status)
 # used by GIT_PS1_SHOWUPSTREAM
 __git_ps1_show_upstream ()
 {
@@ -214,26 +214,26 @@ __git_ps1_show_upstream ()
 		*)	    # diverged from upstream
 			p="<>" ;;
 		esac
-	else
+	else # verbose, set upstream instead of p
 		case "$count" in
 		"") # no upstream
-			p="" ;;
+			upstream="" ;;
 		"0	0") # equal to upstream
-			p=" u=" ;;
+			upstream=" u=" ;;
 		"0	"*) # ahead of upstream
-			p=" u+${count#0	}" ;;
+			upstream=" u+${count#0	}" ;;
 		*"	0") # behind upstream
-			p=" u-${count%	0}" ;;
+			upstream=" u-${count%	0}" ;;
 		*)	    # diverged from upstream
-			p=" u+${count#*	}-${count%	*}" ;;
+			upstream=" u+${count#*	}-${count%	*}" ;;
 		esac
 		if [[ -n "$count" && -n "$name" ]]; then
 			__git_ps1_upstream_name=$(git rev-parse \
 				--abbrev-ref "$upstream_type" 2>/dev/null)
 			if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
-				p="$p \${__git_ps1_upstream_name}"
+				upstream="$upstream \${__git_ps1_upstream_name}"
 			else
-				p="$p ${__git_ps1_upstream_name}"
+				upstream="$upstream ${__git_ps1_upstream_name}"
 				# not needed anymore; keep user's
 				# environment clean
 				unset __git_ps1_upstream_name
@@ -512,7 +512,8 @@ __git_ps1 ()
 	local u=""
 	local h=""
 	local c=""
-	local p=""
+	local p="" # short version of upstream state indicator
+	local upstream="" # verbose version of upstream state indicator
 
 	if [ "true" = "$inside_gitdir" ]; then
 		if [ "true" = "$bare_repo" ]; then
@@ -568,8 +569,8 @@ __git_ps1 ()
 		b="\${__git_ps1_branch_name}"
 	fi
 
-	local f="$h$w$i$s$u"
-	local gitstring="$c$b${f:+$z$f}${sparse}$r$p"
+	local f="$h$w$i$s$u$p"
+	local gitstring="$c$b${f:+$z$f}${sparse}$r${upstream}"
 
 	if [ $pcmode = yes ]; then
 		if [ "${__git_printf_supports_v-}" != yes ]; then
-- 
gitgitgadget
Previous: Justin Donnelly via GitGitGadgetNext: Justin Donnelly via GitGitGadget
Message 4 of 15 in “In PS1 prompt, make upstream state indicators consistent with other state indicators”
  1. 0/4 In PS1 prompt, make upstream state indicators consistent with other state indicatorsJustin Donnelly via GitGitGadget, Feb 25, 2022
  2. 1/4 git-prompt: rename `upstream` to `upstream_type`Justin Donnelly via GitGitGadget, Feb 25, 2022
  3. 3/4 git-prompt: make long upstream state indicator consistentJustin Donnelly via GitGitGadget, Feb 25, 2022
  4. 2/4 git-prompt: make upstream state indicator location consistentJustin Donnelly via GitGitGadget, Feb 25, 2022
  5. 4/4 git-prompt: put upstream comments togetherJustin Donnelly via GitGitGadget, Feb 25, 2022
  6. Ævar Arnfjörð BjarmasonFeb 25, 2022
  7. Justin DonnellyFeb 27, 2022
  8. Ævar Arnfjörð BjarmasonFeb 27, 2022
  9. 0/4 In PS1 prompt, make upstream state indicators consistent with other state indicatorsJustin Donnelly via GitGitGadget, Feb 27, 2022
  10. 1/4 git-prompt: rename `upstream` to `upstream_type`Justin Donnelly via GitGitGadget, Feb 27, 2022
  11. 2/4 git-prompt: make upstream state indicator location consistentJustin Donnelly via GitGitGadget, Feb 27, 2022
  12. 3/4 git-prompt: make long upstream state indicator consistentJustin Donnelly via GitGitGadget, Feb 27, 2022
  13. 4/4 git-prompt: put upstream comments togetherJustin Donnelly via GitGitGadget, Feb 27, 2022
  14. Ævar Arnfjörð BjarmasonMar 22, 2022
  15. Junio C HamanoMar 23, 2022

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.