You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.2 KiB
122 lines
3.2 KiB
if [ "x$__GIT_STATUS_CMD" == "x" ]
|
|
then
|
|
__GIT_STATUS_CMD=~/.bash/gitstatus.py
|
|
fi
|
|
|
|
# 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\]'
|
|
|
|
# Bold
|
|
BGreen="\[\033[1;32m\]" # Green
|
|
|
|
# High Intensty
|
|
IBlack="\[\033[0;90m\]" # Black
|
|
|
|
# Bold High Intensty
|
|
Magenta="\[\033[1;95m\]" # Purple
|
|
|
|
# Various variables you might want for your PS1 prompt instead
|
|
Time12a="\@"
|
|
PathShort="\w"
|
|
|
|
# Default values for the appearance of the prompt. Configure at will.
|
|
GIT_PROMPT_PREFIX="["
|
|
GIT_PROMPT_SUFFIX="]"
|
|
GIT_PROMPT_SEPARATOR="|"
|
|
GIT_PROMPT_BRANCH="${Magenta}"
|
|
GIT_PROMPT_STAGED="${Red}● "
|
|
GIT_PROMPT_CONFLICTS="${Red}✖ "
|
|
GIT_PROMPT_CHANGED="${Blue}✚ "
|
|
GIT_PROMPT_REMOTE=" "
|
|
GIT_PROMPT_UNTRACKED="…"
|
|
GIT_PROMPT_CLEAN="${BGreen}✔"
|
|
|
|
PROMPT_START="$Yellow$PathShort$ResetColor"
|
|
PROMPT_END=" \n$WHITE$Time12a$ResetColor $ "
|
|
|
|
|
|
function update_current_git_vars() {
|
|
unset __CURRENT_GIT_STATUS
|
|
|
|
_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
|
|
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"
|
|
return
|
|
fi
|
|
|
|
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` ]]
|
|
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"
|
|
|
|
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"
|
|
fi
|
|
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"
|
|
fi
|
|
if [ "$GIT_CLEAN" -eq "1" ]; then
|
|
STATUS="$STATUS$GIT_PROMPT_CLEAN"
|
|
fi
|
|
STATUS="$STATUS$ResetColor$GIT_PROMPT_SUFFIX"
|
|
|
|
PS1="$PYTHON_VIRTUALENV$PROMPT_START$STATUS$PROMPT_END"
|
|
else
|
|
PS1="$PROMPT_START$PROMPT_END"
|
|
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} "
|
|
fi
|
|
}
|
|
|
|
PROMPT_COMMAND=setGitPrompt
|
|
|