]> git.phdru.name Git - dotfiles.git/blobdiff - admin/prog/bash_prompt
bash_prompt: Show -behind/+ahead counters
[dotfiles.git] / admin / prog / bash_prompt
index 13d0c2dc599dd78313cfb470cc8eb199da693d72..4e428f398450283bf5d72833cab7e453e776e420 100644 (file)
@@ -40,19 +40,14 @@ prompt_git() {
             # ensure index is up to date
             #git update-index --really-refresh -q &>/dev/null
 
-            # check for uncommitted changes in the index
-            if ! $(git diff --quiet --ignore-submodules --cached); then
-                s="$s+";
-            fi
-
             # check for unstaged changes
             if [ -n "$(git ls-files --modified)" ]; then
                 s="$s*";
             fi
 
-            # check for untracked files
-            if [ -n "$(git ls-files --others --exclude-standard)" ]; then
-                s="$s%";
+            # check for uncommitted changes in the index
+            if ! $(git diff --quiet --ignore-submodules --cached); then
+                s="$s+";
             fi
 
             # check for stashed files
@@ -60,6 +55,11 @@ prompt_git() {
                 s="$s$";
             fi
 
+            # check for untracked files
+            if [ -n "$(git ls-files --others --exclude-standard)" ]; then
+                s="$s%";
+            fi
+
         fi
 
         # get the short symbolic ref
@@ -69,11 +69,40 @@ prompt_git() {
                       git rev-parse --short HEAD 2> /dev/null || \
                       printf "(unknown)")"
 
-        [ -n "$s" ] && s=" [$s]"
-        printf "%s" "$branchName$s "
+        up=`git rev-parse --abbrev-ref @{u} 2>/dev/null`
+        if [ -n "$up" ]; then
+            local left right
+            set -- `git rev-list --count --left-right @{u}...@`
+            left=$1
+            right=$2
+            if [ "$left" -gt 0 -o "$right" -gt 0 ]; then
+                if [ "$left" -gt 0 ]; then
+                    s="$s-$left"
+                fi
+                if [ "$right" -gt 0 ]; then
+                    s="$s+$right"
+                fi
+            fi
+        fi
+
+        [ -n "$s" ] && s=" $s"
+        printf " (%s)" "$branchName$s"
     fi
 }
 
+#if test -x /usr/bin/git >/dev/null 2>&1; then
+#   if [ "`type -t __git_ps1`" != function ]; then
+#      git_sh_prompt=`git --exec-path`/git-sh-prompt
+#      test -r $git_sh_prompt && . $git_sh_prompt || :
+#   fi
+#   if [ "`type -t __git_ps1`" = function ]; then
+#      GIT_PS1_SHOWDIRTYSTATE=true
+#      GIT_PS1_SHOWSTASHSTATE=true
+#      GIT_PS1_SHOWUNTRACKEDFILES=true
+#      GIT_PS1_SHOWUPSTREAM=verbose
+#   fi
+#fi
+
 set_prompts() {
       OPS1=''
       # display the user, host and current working directory
@@ -95,10 +124,16 @@ set_prompts() {
       esac
 
    OPS1+="${debian_chroot:+($debian_chroot)}"
-   OPS1+="\`cgmem_which_prompt\`\u@\${HOSTNAME::5}:\`short_curdir\` "
+   OPS1+="\`cgmem_which_prompt\`\u@\${HOSTNAME::5}:\`short_curdir\`"
    if test -x /usr/bin/git >/dev/null 2>&1; then
-      OPS1+="\$(prompt_git)"
+      #if [ "`type -t __git_ps1`" = function ]; then
+      #   OPS1+="\$(__git_ps1)"
+      #else
+         OPS1+="\$(prompt_git)"
+      #fi
    fi
-   OPS1+="\\$\$SHLVL "
+   # This is for .screenrc: shelltitle "\$ |$SHELL"
+   #OPS1+="\[\033k\033\\\\\]"
+   OPS1+=" \$SHLVL\\$ "
    export OPS1
 }