Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion bash completion: Support "divergence from upstream" warnings in __git_ps1
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Thomas Rast  
View profile  
 More options Jun 10 2010, 7:47 am
From: Thomas Rast <tr...@student.ethz.ch>
Date: Thu, 10 Jun 2010 13:47:24 +0200
Local: Thurs, Jun 10 2010 7:47 am
Subject: [PATCH 2/2] bash completion: Support "divergence from upstream" warnings in __git_ps1
From: Andrew Sayers <andrew-...@pileofstuff.org>

Add a notification in the command prompt specifying whether you're
ahead of or behind 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: Thomas Rast <tr...@student.ethz.ch>
---
 contrib/completion/git-completion.bash |   57 +++++++++++++++++++++++++++++++-
 1 files changed, 56 insertions(+), 1 deletions(-)

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.
+#
 # 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
+
+                               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
+
+                               p=$(git rev-list --count --left-right "$upstream"...HEAD 2>/dev/null)
+                               debug_p="$p"
+                               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

                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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.