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

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

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Jun 12, 2010, 00:00 UTC
Message-ID
<20100612000002.GA30196@neumann>
In-Reply-To
<a798e1b7f5ce3872a794829555c7295e588e2c61.1276169807.git.trast@student.ethz.ch>
Hi,
On Thu, Jun 10, 2010 at 01:47:24PM +0200, Thomas Rast wrote:
> From: Andrew Sayers <andrew-git@pileofstuff.org>
Show 15 quoted lines
> 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.

Show 22 quoted lines
> +#
>  # 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.

Show 8 quoted lines
> +				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.

Show 9 quoted lines
> +
> +					# 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.
Show 6 quoted lines
> +				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.
Show 18 quoted lines
> +				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.
Show 11 quoted lines
>  
>  		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
> 
> 
Previous: Thomas RastNext: Michael J Gruber
Message 17 of 20 in “bash completion: Support "unpushed commits" warnings in __git_ps1”
  1. bash completion: Support "unpushed commits" warnings in __git_ps1Andrew Sayers, Jun 6, 2010
  2. Thomas RastJun 6, 2010
  3. Andrew SayersJun 6, 2010
  4. Jakub NarebskiJun 6, 2010
  5. Andrew SayersJun 6, 2010
  6. Thomas RastJun 7, 2010
  7. [RFC/PATCHv2] bash completion: Support "divergence from upstream" warnings in __git_ps1Andrew Sayers, Jun 8, 2010
  8. Peter KjellerstedtJun 9, 2010
  9. John TapsellJun 9, 2010
  10. Steven MichalskeJun 9, 2010
  11. Michael J GruberJun 9, 2010
  12. Michael J GruberJun 9, 2010
  13. Michael J GruberJun 9, 2010
  14. 0/2 bash completion: Support "divergence from upstream" warnings in __git_ps1Thomas Rast, Jun 10, 2010
  15. 1/2 rev-list: introduce --count optionThomas Rast, Jun 10, 2010
  16. 2/2 bash completion: Support "divergence from upstream" warnings in __git_ps1Thomas Rast, Jun 10, 2010
  17. SZEDER GáborJun 12, 2010
  18. Michael J GruberJun 10, 2010
  19. Thomas RastJun 10, 2010
  20. Thomas RastJun 6, 2010

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.