Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function git_unpushed() {
- brinfo=$(git branch -v)
- if [[ $brinfo =~ ("[ahead "([[:digit:]]*)]) ]]
- then
- echo "Not Pushed: ${BASH_REMATCH[2]}"
- return 1
- fi
- return 0
- }
- function git_untracked() {
- untracked=$(git clean --dry-run | wc -l)
- if [ $untracked -gt 0 ]
- then
- echo "Untracked: "$untracked
- return 1
- fi
- return 0
- }
- function git_stat() {
- status="$(git status --short)"
- m="M:"$(echo "$status" | awk '/^[ ]*M/' | wc -l) # Modified
- a="A:"$(echo "$status" | awk '/^[ ]*A/' | wc -l) # Added
- d="D:"$(echo "$status" | awk '/^[ ]*D/' | wc -l) # Deleted
- r="R:"$(echo "$status" | awk '/^[ ]*R/' | wc -l) # Renamed
- c="C:"$(echo "$status" | awk '/^[ ]*C/' | wc -l) # Copied
- u="U:"$(echo "$status" | awk '/^[ ]*\?\?/' | wc -l) # Untracked
- echo "\[\e[97m\][$m $a $d $r $c \[\e[91m\]$u\[\e[97m\]]"
- }
- function prompt_cmd() {
- LAST_STATUS=$?
- uid="$(id -u)"
- host="\[\e[97m\]\H"
- path="\[\e[94m\]\w"
- # If root
- if [ "$uid" = "0" ];
- then
- user="\[\e[91m\]\u"
- symbol="\[\e[97m\]#"
- else
- # If not root
- user="\[\e[96m\]\u"
- symbol="\[\e[97m\]\$"
- fi
- # If Git Repo
- if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1;
- then
- unpushed=$(git_unpushed)
- untracked=$(git_untracked)
- branch=$(__git_ps1)
- stat=$(git_stat)
- git_name=$(basename $(git rev-parse --show-toplevel))
- git_path="\[\e[94m\]/$git_name/"$(git rev-parse --show-prefix)
- # If Clean
- if git diff-index --quiet HEAD --;
- then
- # If Untracked
- if git_untracked &> /dev/null;
- then
- status="\[\e[92m\]$branch" # clean
- else
- status="\[\e[91m\]$branch" # clean w/ untracked
- fi
- else
- # If Untracked
- if git_untracked &> /dev/null;
- then
- if [[ `git status` == *"not staged"* ]];
- then
- status="\[\e[91m\]$branch $stat" # unadded but clean
- else
- status="\[\e[93m\]$branch $stat" # added but clean
- fi
- else
- status="\[\e[91m\]$branch $stat" # uncommited & untracked
- fi
- fi
- # If Unpushed
- if git_unpushed &> /dev/null;
- then
- pushed=""
- else
- pushed=$(git_unpushed)
- fi
- second_line=" $git_path\n$status $pushed"
- else
- second_line="\n$path"
- fi
- PS1="\[\e[1m\]$user\[\e[97m\]@$host$second_line\n $symbol \[\e[0m\]"
- }
- export PROMPT_COMMAND=prompt_cmd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement