Thread (31 messages) flat view 31 messages, 10 authors, 2016-06-15

Re: [PATCH 2/2] bash completion: Support "divergence from upstream" warnings in __git_ps1

From: SZEDER Gábor <hidden>
Date: 2016-06-15 22:48:57

Hi,


On Thu, Jun 10, 2010 at 01:47:24PM +0200, Thomas Rast wrote:
From: Andrew Sayers <redacted>
quoted hunk ↗ jump to hunk
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index de5e6c1..49253a1 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -42,6 +42,14 @@
 #       set GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're
 #       untracked files, then a '%' will be shown next to the branch name.
 #
+#       If you would like to see the difference bitween HEAD and its
+#       upstream, set GIT_PS1_SHOWUPSTREAM to a nonempty value.  The
+#       difference will be shown as, e.g., "u+7-5" meaning that you
+#       are 7 commits ahead of and 5 commits behind the upstream.  You
+#       can enable git-svn mode by setting GIT_PS1_SHOWUPSTREAM=svn
+#       and set the value per-repository with the bash.showUpstream
+#       variable.
I find the last sentence of this description ambiguous.  What value
should bash.showUpstream be set to?  Do I really need to set both
GIT_PS1_SHOWUPSTREAM and bash.showUpstream?  What if
GIT_PS1_SHOWUPSTREAM=foo and bash.showUpstream=svn?

Furthermore, I think it would be good to provide means to disable this
feature for some repositories while keeping it enabled for others.  In
the current version I could either disable or enable it globally.
Perhaps we could disable it when bash.showUpstream is set to an empty
value.
quoted hunk ↗ jump to hunk
+#
 # To submit patches:
 #
 #    *) Read Documentation/SubmittingPatches
@@ -132,6 +140,7 @@ __git_ps1 ()
 		local s
 		local u
 		local c
+		local p
 
 		if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
 			if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
@@ -159,10 +168,56 @@ __git_ps1 ()
 			      u="%"
 			   fi
 			fi
+
+			if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
+
+				# Note: 'p' is used as a temporary throughout this block,
+				# before finally being assigned its correct value
+
Back in the old days when I was just learning programming, I got my
ass kicked when I dared to reuse the same variable for different
purposes.  C'mon, just how much shorter it is to create one more
variable than this two lines long comment?! ;)  It could even be
squashed together with the "local upstream" line.
+				if p="$(git config --get bash.showUpstream)"
+				then
+					GIT_PS1_SHOWUPSTREAM="$p"
+				fi
+
+				local upstream
+
+				if [ "${GIT_PS1_SHOWUPSTREAM-}" = "svn" ]; then
No need to use default value here, because GIT_PS1_SHOWUPSTREAM has
already been set above.
+
+					# git-svn upstream checking
+					p="$( git config --get svn-remote.svn.url )"
+					upstream=( $( git log --first-parent -1 \
+						--grep="^git-svn-id: $p" ) )
+					upstream=${upstream[ ${#upstream[@]} - 2 ]}
+					upstream=${upstream%@*}
+					upstream=${upstream#*$p/}
+
Unnecessary empty lines before and after this block of code.
+				else # git upstream checking
+					upstream="@{upstream}"
+				fi
+
+				p=$(git rev-list --count --left-right "$upstream"...HEAD 2>/dev/null)
+				debug_p="$p"
The leftover debugging mentioned by Michael.
+				case "$p" in
+				"0	0"|"") # empty means no --count support or no upstream
+					p=
+					;;
+				"0	"*)
+					p="+${p#0	}"
+					;;
+				*"	0")
+					p="-${p%	0}"
+					;;
+				*)
+					p="+${p#*	}-${p%	*}"
+					;;
+				esac
+
+			fi
+
 		fi
Unnecessary empty lines before both fi.
 
 		local f="$w$i$s$u"
-		printf "${1:- (%s)}" "$c${b##refs/heads/}${f:+ $f}$r"
+		printf "${1:- (%s)}" "$c${b##refs/heads/}${f:+ $f}$r${p:+ u$p}"
 	fi
 }
 
-- 
1.7.1.553.ge4d5c.dirty
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help