All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael J Gruber <git@drmicha.warpmail.net>
To: Andrew Sayers <andrew-git@pileofstuff.org>
Cc: Thomas Rast <trast@student.ethz.ch>,
	"Shawn O. Pearce" <spearce@spearce.org>,
	Git Mailing List <git@vger.kernel.org>
Subject: Re: [RFC/PATCHv2] bash completion: Support "divergence from upstream" warnings in __git_ps1
Date: Wed, 09 Jun 2010 11:17:26 +0200	[thread overview]
Message-ID: <4C0F5C26.5080108@drmicha.warpmail.net> (raw)
In-Reply-To: <4C0EB7F1.1030707@pileofstuff.org>

[I haven't followed the previous discussion, just this RFC.]

Andrew Sayers venit, vidit, dixit 08.06.2010 23:36:
> Add a notification in the command prompt specifying whether you're ahead of
> (>), behind (<), diverged from (<>) or at (=) your upstream.  This is
> especially helpful in small teams that (forget to) push to each other very
> frequently.
> 
> Support git-svn upstream detection as a special case, as migraters from
> centralised version control systems are especially likely to forget to push.
> 
> Support for other types of upstream than SVN should be easy to add if anyone is
> so inclined.
> 
> Signed-off-by: Andrew Sayers <andrew-git@pileofstuff.org>
> ---
> 
> This patch includes Thomas Rast's feedback - thanks Thomas for the education :)
> 
> This patch makes unashamed use of shell arrays and substring expansion that
> would normally not be allowed.  As Jakub Narebski mentioned, this is probably ok
> in a bash-specific script.
> 
> Unlike other prompt options, I've put the divergence characters on the left of the
> branch name.  I'm really not sure about this, and I'd like to hear people's
> opinions.

I'd say it would make sense to you use the same order as "branch -vv"
and "status -s", i.e. after the branch name.

> 
> This patch produces output like this when I have unpushed commits:
> 
> [andrew@pc myrepo >master] # my master is ahead of upstream
> 
> Intuitively, I like having a ">" when I'm ahead, although it would be more
> logical to have something like this:

That is really illogical, please don't.

> 
> [andrew@pc myrepo <master] # upstream less-than master
> 
> Putting the symbol on the right makes this problem go away, but looks ridiculous
> if you use a prompt like PS1='\W:$(__git_ps1 "(%s)")> '

Patient: If I move my arm like this then it hurts.
Doctor: Then don't do that ;)

> 
> myrepo:master>> # master greater-than upstream
> myrepo:master<> # master less-than upstream
> myrepo:master<>> # master and upstream have diverged
> 
> I'd rather not rely on colour prompts to clear this up - using colour as the
> only way to convey important information to the user rarely ends well.
> 
> Adding a "u" to the symbol could also clear this up:
> 
> [andrew@pc myrepo u<master] # upstream less-than master
> 
> Using "u<", "u=", "u>" and "<>" would mean that the prompt always used either
> two or zero characters, which would keep prompts lined up over time.  But it
> would also eat horizontal space for an issue you'd stop seeing after a few
> minutes.
> 

I think a simple space would help already, i.e.
myrepo:master<> >

An alternative would be to use something like
myrepo:master+5-3

The numbers should make this distinguishable from the "--cached +". Of
course it eats up more space and is slightly confusing unless it is read
master = upstream + 5 -3.
OTOH it is very analogous to status -s and branch -vv.

> Finally, my apologies to anyone that tried to apply my previous patch - to make
> a long story short, it turns out I need this feature more than I realised :)
> 

;)

>  contrib/completion/git-completion.bash |   58 +++++++++++++++++++++++++++++++-
>  1 files changed, 57 insertions(+), 1 deletions(-)
> 
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 57245a8..1dc80fd 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.
> +#       Unpushed commits (>), unmerged commits (<), both (<>) and
> +#       neither (=) will be shown on the left of the branch name.  You
> +#       can enable git-svn mode by setting GIT_PS1_SHOWUPSTREAM=svn
> +#       and set the value per-repository with the bash.showUpstream
> +#       variable.
> +#
>  # 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,57 @@ __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
> +
> +				if p="$(git config --get bash.showUpstream)"
> +				then
> +					GIT_PS1_SHOWUPSTREAM="$p"
> +				fi
> +
> +				local upstream
> +
> +				if [ "${GIT_PS1_SHOWUPSTREAM-}" = "svn" ]; then
> +
> +					# 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/}
> +
> +				else # git upstream checking
> +				  upstream="@{upstream}"
> +				fi
> +
> +				if p="$( git rev-list \
> +						--left-right "$upstream"...HEAD 2>/dev/null )"

Here you have all the info to do a "grep \<|wc -l" etc. instead of the
below if you go for the +5-3.

> +				then
> +					case "$p" in
> +						\<*\>*|\>*\<* ) p="<>" ;;
> +						*\<*          ) p="<"  ;;
> +						*\>*          ) p=">"  ;;
> +						""            ) p="="  ;;
> +
> +						# the following case shouldn't be possible
> +						# if you see this, please report it as a bug
> +						* ) p="?ERROR($p)?" ;;
> +
> +					esac
> +				else
> +					p=""
> +				fi
> +
> +			fi
> +
>  		fi
>  
>  		local f="$w$i$s$u"
> -		printf "${1:- (%s)}" "$c${b##refs/heads/}${f:+ $f}$r"
> +		printf "${1:- (%s)}" "$c$p${b##refs/heads/}${f:+ $f}$r"
>  	fi
>  }
>  

Cheers,
Michael

  parent reply	other threads:[~2010-06-09  9:18 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-06  0:05 [PATCH] bash completion: Support "unpushed commits" warnings in __git_ps1 Andrew Sayers
2010-06-06 18:14 ` Thomas Rast
2010-06-06 20:49   ` Andrew Sayers
2010-06-06 21:07     ` Jakub Narebski
2010-06-06 22:19       ` Andrew Sayers
2010-06-07  7:42     ` Thomas Rast
2010-06-08 21:36       ` [RFC/PATCHv2] bash completion: Support "divergence from upstream" " Andrew Sayers
2010-06-09  8:21         ` Peter Kjellerstedt
2010-06-09  8:45         ` John Tapsell
2010-06-09 21:02           ` Steven Michalske
2010-06-09  9:17         ` Michael J Gruber [this message]
2010-06-09 20:48           ` Michael J Gruber
2010-06-09 21:03             ` Michael J Gruber
2010-06-10 11:47         ` [PATCH 0/2] " Thomas Rast
2010-06-10 11:47           ` [PATCH 1/2] rev-list: introduce --count option Thomas Rast
2010-06-10 11:47           ` [PATCH 2/2] bash completion: Support "divergence from upstream" warnings in __git_ps1 Thomas Rast
2010-06-12  0:00             ` SZEDER Gábor
2010-06-12 10:03               ` [PATCH v2 0/2] " Thomas Rast
2010-06-12  9:59                 ` [PATCH v2 1/2] rev-list: introduce --count option Thomas Rast
2010-06-12  9:59                 ` [PATCH v2 2/2] bash completion: Support "divergence from upstream" warnings in __git_ps1 Thomas Rast
2010-06-14  3:13                   ` Junio C Hamano
2010-06-14  7:44                     ` Thomas Rast
2010-06-14 12:36                   ` SZEDER Gábor
2010-06-12 10:11                 ` vger doesn't like UTF-8 from send-email Thomas Rast
2010-06-12 15:06                   ` [PATCH] send-email: ask about and declare 8bit mails Thomas Rast
2010-06-12 16:28                     ` Junio C Hamano
2010-06-13 15:09                       ` Thomas Rast
2010-06-13  4:15                   ` vger doesn't like UTF-8 from send-email Michael Witten
2010-06-14 11:57                     ` Erik Faye-Lund
2010-06-12 20:50                 ` [PATCH] bash completion: Support "divergence from upstream" messages in __git_ps1 Andrew Sayers
2010-06-14  7:42                   ` Thomas Rast
2010-06-15 21:50                     ` [PATCHv4] " Andrew Sayers
2010-06-16 19:05                       ` Junio C Hamano
2010-06-16 19:11                         ` Thomas Rast
2010-06-17 21:31                         ` [PATCHv5 0/2] " Andrew Sayers
2010-06-18 16:10                           ` Junio C Hamano
2010-06-18 21:02                             ` Andrew Sayers
2010-06-17 21:32                         ` [PATCHv5 1/2] " Andrew Sayers
2010-06-17 21:32                         ` [PATCHv5 2/2] bash-completion: Fix __git_ps1 to work with "set -u" Andrew Sayers
2010-06-10 13:31           ` [PATCH 0/2] bash completion: Support "divergence from upstream" warnings in __git_ps1 Michael J Gruber
2010-06-10 12:03         ` [RFC/PATCHv2] " Thomas Rast
2010-06-06 20:12 ` [PATCH] bash completion: Support "unpushed commits" " Thomas Rast

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C0F5C26.5080108@drmicha.warpmail.net \
    --to=git@drmicha.warpmail.net \
    --cc=andrew-git@pileofstuff.org \
    --cc=git@vger.kernel.org \
    --cc=spearce@spearce.org \
    --cc=trast@student.ethz.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.