diff --git a/lib/git.zsh b/lib/git.zsh index fb4ad8ca6..0193d2775 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -1,12 +1,18 @@ # get the name of the branch we are on -function git_prompt_info() { - ref=$(git symbolic-ref HEAD 2> /dev/null) || return - echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX" +function git_current_branch() { + ref=$(git symbolic-ref HEAD 2> /dev/null) || \ + ref=$(git rev-parse --short HEAD 2> /dev/null) || return + echo ${ref#refs/heads/} } +# Branch and dirty flag +function git_prompt_info() { + ref=$(git symbolic-ref HEAD 2> /dev/null) || return + echo "$ZSH_THEME_GIT_PROMPT_PREFIX$(git_current_branch)$(git_parse_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX" +} # Checks if working tree is dirty -parse_git_dirty() { +function git_parse_dirty() { local SUBMODULE_SYNTAX='' if [[ $POST_1_7_2_GIT -gt 0 ]]; then SUBMODULE_SYNTAX="--ignore-submodules=dirty" @@ -17,15 +23,24 @@ parse_git_dirty() { echo "$ZSH_THEME_GIT_PROMPT_CLEAN" fi } - +# For backwards compatibility +function parse_git_dirty() { git_parse_dirty } # Checks if there are commits ahead from remote function git_prompt_ahead() { - if $(echo "$(git log origin/$(current_branch)..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then + if $(git status --porcelain --branch 2> /dev/null | grep '^## .*ahead' &> /dev/null); then echo "$ZSH_THEME_GIT_PROMPT_AHEAD" fi } +# Checks if there are commits behind from remote +function git_prompt_behind() { + if $(git status --porcelain --branch 2> /dev/null | grep '^## .*behind' &> /dev/null); then + echo $ZSH_THEME_GIT_PROMPT_BEHIND + fi +} + + # Formats prompt string for current git commit short SHA function git_prompt_short_sha() { SHA=$(git rev-parse --short HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" @@ -37,7 +52,7 @@ function git_prompt_long_sha() { } # Get the status of the working tree -git_prompt_status() { +function git_prompt_status() { INDEX=$(git status --porcelain 2> /dev/null) STATUS="" if $(echo "$INDEX" | grep '^?? ' &> /dev/null); then diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index d3d3f702a..e0540ef81 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -49,14 +49,11 @@ alias gsd='git svn dcommit' # Will return the current branch name # Usage example: git pull origin $(current_branch) # -function current_branch() { - ref=$(git symbolic-ref HEAD 2> /dev/null) || return - echo ${ref#refs/heads/} -} +function current_branch() { git_current_branch } function current_repository() { - - ref=$(git symbolic-ref HEAD 2> /dev/null) || return + ref=$(git symbolic-ref HEAD 2> /dev/null) || \ + ref=$(git rev-parse --short HEAD 2> /dev/null) || return echo $(git remote -v | cut -d':' -f 2) }