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" ]; thenNo 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
+
fiUnnecessary 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