mirror of
https://github.com/jimeh/git-aware-prompt.git
synced 2026-02-19 13:36:38 +00:00
Merge pull request #5 from eacousineau/master
Updated to use porcelain Git commands
This commit is contained in:
72
prompt.sh
72
prompt.sh
@@ -1,35 +1,51 @@
|
|||||||
function find_git_branch {
|
find_git_branch() {
|
||||||
local dir=. head
|
local branch
|
||||||
until [ "$dir" -ef / ]; do
|
# Based on: http://stackoverflow.com/a/13003854/170413
|
||||||
if [ -f "$dir/.git/HEAD" ]; then
|
if branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null)
|
||||||
head=$(< "$dir/.git/HEAD")
|
then
|
||||||
if [[ $head == ref:\ refs/heads/* ]]; then
|
if [[ "$branch" == "HEAD" ]]; then
|
||||||
git_branch=" (${head#*/*/})"
|
branch='(detached head)'
|
||||||
elif [[ $head != '' ]]; then
|
fi
|
||||||
git_branch=' (detached)'
|
git_branch="($branch)"
|
||||||
else
|
else
|
||||||
git_branch=' (unknown)'
|
git_branch=""
|
||||||
fi
|
fi
|
||||||
return
|
|
||||||
fi
|
|
||||||
dir="../$dir"
|
|
||||||
done
|
|
||||||
git_branch=''
|
|
||||||
}
|
}
|
||||||
function find_git_dirty {
|
|
||||||
st=$(git status 2>/dev/null | tail -n 1)
|
find_git_dirty() {
|
||||||
if [[ $st == "" ]]; then
|
if [[ -z "$git_branch" ]]
|
||||||
git_dirty=''
|
then
|
||||||
elif [[ $st == "nothing to commit (working directory clean)" ]]; then
|
git_dirty=''
|
||||||
git_dirty=''
|
else
|
||||||
else
|
# Based on: http://stackoverflow.com/a/2659808/170413
|
||||||
git_dirty='*'
|
local err
|
||||||
fi
|
if err=$(git diff-files --quiet 2>&1)
|
||||||
|
then
|
||||||
|
if git diff-index --quiet --cached HEAD
|
||||||
|
then
|
||||||
|
git_dirty=''
|
||||||
|
else
|
||||||
|
# Can't figure out different colors
|
||||||
|
git_dirty="^"
|
||||||
|
fi
|
||||||
|
elif [ -n "$err" ]
|
||||||
|
then
|
||||||
|
# Some error - most likely that it was run within $GIT_DIR
|
||||||
|
# Resolve repo root instead? `git rev-parse --git-dir` does not work, nor does the 'git root' alias trick
|
||||||
|
git_dirty=""
|
||||||
|
else
|
||||||
|
git_dirty="*"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
PROMPT_COMMAND="find_git_branch; find_git_dirty; $PROMPT_COMMAND"
|
PROMPT_COMMAND="find_git_branch; find_git_dirty; $PROMPT_COMMAND"
|
||||||
|
|
||||||
# Default Git enabled prompt with dirty state
|
# Default Git enabled prompt with dirty state
|
||||||
# export PS1="\u@\h \w\[$txtcyn\]\$git_branch\[$txtylw\]\$git_dirty\[$txtrst\]\$ "
|
# export PS1="\u@\h \w\[$txtcyn\]\$git_branch\$git_dirty\[$txtrst\]\$ "
|
||||||
|
|
||||||
|
# Another variant:
|
||||||
|
# export PS1="\[$bldgrn\]\u@\h\[$txtrst\] \w\[$bldylw\]\$git_branch\[$txtcyn\]\$git_dirty\[$txtrst\]\$ "
|
||||||
|
|
||||||
# Default Git enabled root prompt (for use with "sudo -s")
|
# Default Git enabled root prompt (for use with "sudo -s")
|
||||||
# export SUDO_PS1="\[$bakred\]\u@\h\[$txtrst\] \w\$ "
|
# export SUDO_PS1="\[$bakred\]\u@\h\[$txtrst\] \w\$ "
|
||||||
|
|||||||
Reference in New Issue
Block a user