@ -1,33 +1,25 @@
if [ " x $__GIT_STATUS_CMD " = = "x" ]
then
__GIT_STATUS_CMD = ~/.bash/gitstatus.py
fi
#!/bin/sh
function git_prompt_config( )
{
# Colors
# Reset
ResetColor = "\[\033[0m\]" # Text Reset
# fetch remote revisions every other $GIT_PROMPT_FETCH_TIMEOUT (default 5) minutes
GIT_PROMPT_FETCH_TIMEOUT = ${ 1 -5 }
# Regular Colors
Red = "\[\033[0;31m\]" # Red
Yellow = "\[\033[0;33m\]" # Yellow
Blue = "\[\033[0;34m\]" # Blue
WHITE = '\[\033[37m\]'
ResetColor = "\[\033[0m\]" # Text reset
# Bold
BGreen = "\[\033[1;32m\]" # Green
local BoldGreen = "\[\033[1;32m\]" # Green
local BoldBlue = "\[\033[1;34m\]" # Blue
# High Intensty
IBlack = "\[\033[0;90m\]" # Black
local IntenseBlack = "\[\033[0;90m\]" # Grey
# Bold High Intensty
Magenta = "\[\033[1;95m\]" # Purple
local Magenta = "\[\033[1;95m\]" # Purple
# Various variables you might want for your PS1 prompt instead
Time12a = "\@"
PathShort = "\w"
# Regular Colors
local Yellow = "\[\033[0;33m\]"
local White = '\[\033[37m\]'
local Red = "\[\033[0;31m\]"
Blue = "\[\033[0;34m\]"
# Default values for the appearance of the prompt. Configure at will.
GIT_PROMPT_PREFIX = "["
@ -39,83 +31,108 @@ GIT_PROMPT_CONFLICTS="${Red}✖ "
GIT_PROMPT_CHANGED = " ${ Blue } ✚ "
GIT_PROMPT_REMOTE = " "
GIT_PROMPT_UNTRACKED = "…"
GIT_PROMPT_CLEAN = " ${ BGreen } ✔ "
GIT_PROMPT_CLEAN = " ${ Bold Green } ✔ "
PROMPT_START = " $Yellow $PathShort $ResetColor "
PROMPT_END = " \n $WHITE $Time12a $ResetColor $ "
# Various variables you might want for your PS1 prompt instead
local Time12a = "\@"
local PathShort = "\w"
PROMPT_START = " ${ Yellow } ${ PathShort } ${ ResetColor } "
PROMPT_END = " \n ${ White } ${ Time12a } ${ ResetColor } $ "
function update_current_git_vars( ) {
unset __CURRENT_GIT_STATUS
EMPTY_PROMPT = " ${ PROMPT_START } ${ PROMPT_END } "
_GIT_STATUS = $( python $__GIT_STATUS_CMD )
__CURRENT_GIT_STATUS = ( $_GIT_STATUS )
GIT_BRANCH = ${ __CURRENT_GIT_STATUS [0] }
GIT_REMOTE = ${ __CURRENT_GIT_STATUS [1] }
if [ [ "." = = " $GIT_REMOTE " ] ] ; then
unset GIT_REMOTE
# fetch remote revisions every other $GIT_PROMPT_FETCH_TIMEOUT (default 5) minutes
GIT_PROMPT_FETCH_TIMEOUT = ${ 1 -5 }
if [ " x $__GIT_STATUS_CMD " = = "x" ]
then
__GIT_STATUS_CMD = " ${ __GIT_PROMPT_DIR :- ${ HOME } /.bash } /gitstatus.py "
fi
GIT_STAGED = ${ __CURRENT_GIT_STATUS [2] }
GIT_CONFLICTS = ${ __CURRENT_GIT_STATUS [3] }
GIT_CHANGED = ${ __CURRENT_GIT_STATUS [4] }
GIT_UNTRACKED = ${ __CURRENT_GIT_STATUS [5] }
GIT_CLEAN = ${ __CURRENT_GIT_STATUS [6] }
}
function setGitPrompt( ) {
repo = ` git rev-parse --show-toplevel 2> /dev/null`
if [ [ ! -e $repo ] ] ; then
PS1 = " $PROMPT_START $PROMPT_END "
local GIT_PROMPT_PREFIX
local GIT_PROMPT_SUFFIX
local GIT_PROMPT_SEPARATOR
local GIT_PROMPT_BRANCH
local GIT_PROMPT_STAGED
local GIT_PROMPT_CONFLICTS
local GIT_PROMPT_CHANGED
local GIT_PROMPT_REMOTE
local GIT_PROMPT_UNTRACKED
local GIT_PROMPT_CLEAN
local PROMPT_START
local PROMPT_END
local EMPTY_PROMPT
local ResetColor
local Blue
local GIT_PROMPT_FETCH_TIMEOUT
local __GIT_STATUS_CMD
git_prompt_config
local repo = ` git rev-parse --show-toplevel 2> /dev/null`
if [ [ ! -e " ${ repo } " ] ] ; then
PS1 = " ${ EMPTY_PROMPT } "
return
fi
FETCH_HEAD = $repo /.git/FETCH_HEAD
local FETCH_HEAD = " ${ repo } /.git/FETCH_HEAD "
# Fech repo if local is stale for more than $GIT_FETCH_TIMEOUT minutes
if [ [ ! -e $FETCH_HEAD || -e ` find $FETCH_HEAD -mmin +$GIT_PROMPT_FETCH_TIMEOUT ` ] ]
if [ [ ! -e " ${ FETCH_HEAD } " || -e ` find ${ FETCH_HEAD } -mmin +${ GIT_PROMPT_FETCH_TIMEOUT } ` ] ]
then
git fetch --quiet
fi
update_current_git_vars
set_virtualenv
if [ -n " $__CURRENT_GIT_STATUS " ] ; then
STATUS = " $GIT_PROMPT_PREFIX $GIT_PROMPT_BRANCH $GIT_BRANCH $ResetColor "
local -a GitStatus
GitStatus = ( $( " ${ __GIT_STATUS_CMD } " 2>/dev/null) )
if [ -n " $GIT_REMOTE " ] ; then
STATUS = " $STATUS $GIT_PROMPT_REMOTE $GIT_REMOTE $ResetColor "
local GIT_BRANCH = ${ GitStatus [0] }
local GIT_REMOTE = ${ GitStatus [1] }
if [ [ "." = = " $GIT_REMOTE " ] ] ; then
unset GIT_REMOTE
fi
local GIT_STAGED = ${ GitStatus [2] }
local GIT_CONFLICTS = ${ GitStatus [3] }
local GIT_CHANGED = ${ GitStatus [4] }
local GIT_UNTRACKED = ${ GitStatus [5] }
local GIT_CLEAN = ${ GitStatus [6] }
STATUS = " $STATUS $GIT_PROMPT_SEPARATOR "
if [ " $GIT_STAGED " -ne "0" ] ; then
STATUS = " $STATUS $GIT_PROMPT_STAGED $GIT_STAGED $ResetColor "
if [ [ -n " ${ GitStatus } " ] ] ; then
local STATUS = " ${ GIT_PROMPT_PREFIX } ${ GIT_PROMPT_BRANCH } ${ GIT_BRANCH } ${ ResetColor } "
if [ [ -n " ${ GIT_REMOTE } " ] ] ; then
STATUS = " ${ STATUS } ${ GIT_PROMPT_REMOTE } ${ GIT_REMOTE } ${ ResetColor } "
fi
STATUS = " ${ STATUS } ${ GIT_PROMPT_SEPARATOR } "
if [ " ${ GIT_STAGED } " -ne "0" ] ; then
STATUS = " ${ STATUS } ${ GIT_PROMPT_STAGED } ${ GIT_STAGED } ${ ResetColor } "
fi
if [ " $GIT_CONFLICTS " -ne "0" ] ; then
STATUS = " $STATUS $GIT_PROMPT_CONFLICTS $GIT_CONFLICTS $ResetColor "
if [ " ${ GIT_CONFLICTS } " -ne "0" ] ; then
STATUS = " ${ STATUS } ${ GIT_PROMPT_CONFLICTS } ${ GIT_CONFLICTS } ${ ResetColor } "
fi
if [ " $GIT_CHANGED " -ne "0" ] ; then
STATUS = " $STATUS $GIT_PROMPT_CHANGED $GIT_CHANGED $ResetColor "
if [ " ${ GIT_CHANGED } " -ne "0" ] ; then
STATUS = " ${ STATUS } ${ GIT_PROMPT_CHANGED } ${ GIT_CHANGED } ${ ResetColor } "
fi
if [ " $ GIT_UNTRACKED" -ne "0" ] ; then
STATUS = " $STATUS $GIT_PROMPT_UNTRACKED $GIT_UNTRACKED $ResetColor "
if [ " ${ GIT_UNTRACKED } " -ne "0" ] ; then
STATUS = " ${ STATUS } ${ GIT_PROMPT_UNTRACKED } ${ GIT_UNTRACKED } ${ ResetColor } "
fi
if [ " $ GIT_CLEAN" -eq "1" ] ; then
STATUS = " $STATUS $GIT_PROMPT_CLEAN "
if [ " ${ GIT_CLEAN } " -eq "1" ] ; then
STATUS = " ${ STATUS } ${ GIT_PROMPT_CLEAN } "
fi
STATUS = " $ STATUS$ ResetColor$ GIT_PROMPT_SUFFIX"
STATUS = " ${ STATUS } ${ ResetColor } ${ GIT_PROMPT_SUFFIX } "
PS1 = " $PYTHON_VIRTUALENV $PROMPT_START $STATUS $PROMPT_END "
else
PS1 = " $PROMPT_START $PROMPT_END "
PS1 = " ${ PROMPT_START } ${ STATUS } ${ PROMPT_END } "
if [ [ -n " ${ VIRTUAL_ENV } " ] ] ; then
PS1 = " ${ Blue } ( $( basename " ${ VIRTUAL_ENV } " ) ) ${ ResetColor } ${ PS1 } "
fi
}
# Determine active Python virtualenv details.
function set_virtualenv ( ) {
if test -z " $VIRTUAL_ENV " ; then
PYTHON_VIRTUALENV = ""
else
PYTHON_VIRTUALENV = " ${ BLUE } (`basename \" $VIRTUAL_ENV \"`) ${ ResetColor } "
PS1 = " ${ EMPTY_PROMPT } "
fi
}