Anton Shestakov <engored@ya.ru>, Wed, 27 Aug 2014 22:21:17 +0900
Behind and ahead of branches in git.
.bash_prompt
Permissions: -rw-r--r--
function prompt_command
{ if [[ $EUID == 0 ]] ; then # getting hg and git info is disabled for root local HG_INFO=" ${P}-${RESET}" local GIT_INFO=" ${G}-${RESET}" # testing if current dir is a part of hg/git repo [[ -d
"$TEST_DIR/.hg" ]] && local HG_TRACKED=1 && break [[ -d
"$TEST_DIR/.git" ]] && local GIT_TRACKED=1 && break [[ "$TEST_DIR" == '/' ]] && break TEST_DIR=$(dirname
"$TEST_DIR") if [[ $HG_TRACKED ]] ; then local SUM=$(LC_ALL=C hg sum
2>/dev/null
) local PARENTS=($(grep -Po
'(?<=parent: ).*(?=:)' <<< "$SUM")) local BRANCH=$(grep -Po
'(?<=branch: ).*$' <<< "$SUM") local COMMIT=$(grep -Po
'(?<=commit: ).*$' <<< "$SUM") local UPDATE=$(grep -Po
'(?<=update: ).*$' <<< "$SUM") local MERGEREV=${PARENTS[1]} BRANCH=${BRANCH/default/} [ -z
"$MERGEREV" ] || MERGEREV="+$MERGEREV" *added*
|*modified*
|*deleted*
) local HG_INFO=" ${P}${BRANCH}☿${REV}${R}${UPDATE}${G}${MERGEREV}${R}${COMMIT}${RESET}" if [[ $GIT_TRACKED ]] ; then local GIT_STATUS=$(LC_ALL=C git status
2>/dev/null
) local GIT_BRANCH=$(grep -Po
'(?<=On branch ).*$' <<< "$GIT_STATUS") local GIT_REV=$(LC_ALL=C git rev-parse --short HEAD
2>/dev/null
) if [[ $GIT_STATUS == *
'Your branch is behind'*
]]; then if [[ $GIT_STATUS == *
'Your branch is ahead'*
]]; then if [[ $GIT_STATUS == *
'Changes to be committed'*
]]; then if [[ $GIT_STATUS == *
'Changes not staged'*
]]; then local GIT_INFO=" ${G}${GIT_BRANCH}±${GIT_REV}${GIT_BEHIND}${GIT_AHEAD}${GIT_STAGED}${GIT_UNSTAGED}${RESET}" if [[ $VIRTUAL_ENV ]] ; then local VENV="${G}+"$(basename
"$VIRTUAL_ENV")"${RESET}" if [[ $RETURN_CODE !
= 0 ]] ; then local RETCODE="${R}${RETURN_CODE}${RESET} " ${RETCODE}\W${VENV}${HG_INFO}${GIT_INFO}${BOLD}]\ ${PROMPT_COLOR}\\\$${RESET} " export VIRTUAL_ENV_DISABLE_PROMPT=1 export PROMPT_COMMAND=prompt_command