diff options
Diffstat (limited to 'plugins/svn')
| -rw-r--r-- | plugins/svn/svn.plugin.zsh | 88 | 
1 files changed, 61 insertions, 27 deletions
| diff --git a/plugins/svn/svn.plugin.zsh b/plugins/svn/svn.plugin.zsh index e2cf96ca3..4f008ba4e 100644 --- a/plugins/svn/svn.plugin.zsh +++ b/plugins/svn/svn.plugin.zsh @@ -1,42 +1,76 @@ -function svn_prompt_info { -    if [ $(in_svn) ]; then -        echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_PREFIX\ -$ZSH_THEME_REPO_NAME_COLOR$(svn_get_repo_name)$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR$(svn_dirty)$ZSH_PROMPT_BASE_COLOR" +# vim:ft=zsh ts=2 sw=2 sts=2 +# +function svn_prompt_info() { +  if in_svn; then +    if [ "x$SVN_SHOW_BRANCH" = "xtrue" ]; then +      unset SVN_SHOW_BRANCH +      _DISPLAY=$(svn_get_branch_name) +    else +      _DISPLAY=$(svn_get_repo_name)      fi +    echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_PREFIX\ +$ZSH_THEME_REPO_NAME_COLOR$_DISPLAY$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR$(svn_dirty)$ZSH_PROMPT_BASE_COLOR" +    unset _DISPLAY +  fi  }  function in_svn() { -    if [[ -d .svn ]]; then -        echo 1 -    fi +  if $(svn info >/dev/null 2>&1); then +    return 0 +  fi +  return 1  } -function svn_get_repo_name { -    if [ $(in_svn) ]; then -        svn info | sed -n 's/Repository\ Root:\ .*\///p' | read SVN_ROOT -     -        svn info | sed -n "s/URL:\ .*$SVN_ROOT\///p" | sed "s/\/.*$//" -    fi +function svn_get_repo_name() { +  if in_svn; then +    svn info | sed -n 's/Repository\ Root:\ .*\///p' | read SVN_ROOT +    svn info | sed -n "s/URL:\ .*$SVN_ROOT\///p" +  fi  } -function svn_get_rev_nr { -    if [ $(in_svn) ]; then -        svn info 2> /dev/null | sed -n s/Revision:\ //p -    fi +function svn_get_branch_name() { +  _DISPLAY=$( +    svn info 2> /dev/null | \ +      awk -F/ \ +      '/^URL:/ { \ +        for (i=0; i<=NF; i++) { \ +          if ($i == "branches" || $i == "tags" ) { \ +            print $(i+1); \ +            break;\ +          }; \ +          if ($i == "trunk") { print $i; break; } \ +        } \ +      }' +  ) +   +  if [ "x$_DISPLAY" = "x" ]; then +    svn_get_repo_name +  else +    echo $_DISPLAY +  fi +  unset _DISPLAY +} + +function svn_get_rev_nr() { +  if in_svn; then +    svn info 2> /dev/null | sed -n 's/Revision:\ //p' +  fi  } -function svn_dirty_choose { -    if [ $(in_svn) ]; then -        s=$(svn status|grep -E '^\s*[ACDIM!?L]' 2>/dev/null) -        if [ $s ]; then  -            echo $1 -        else  -            echo $2 -        fi +function svn_dirty_choose() { +  if in_svn; then +    root=`svn info 2> /dev/null | sed -n 's/^Working Copy Root Path: //p'` +    if $(svn status $root 2> /dev/null | grep -Eq '^\s*[ACDIM!?L]'); then +      # Grep exits with 0 when "One or more lines were selected", return "dirty". +      echo $1 +    else +      # Otherwise, no lines were found, or an error occurred. Return clean. +      echo $2      fi +  fi  } -function svn_dirty { -    svn_dirty_choose $ZSH_THEME_SVN_PROMPT_DIRTY $ZSH_THEME_SVN_PROMPT_CLEAN +function svn_dirty() { +  svn_dirty_choose $ZSH_THEME_SVN_PROMPT_DIRTY $ZSH_THEME_SVN_PROMPT_CLEAN  } | 
