Parent directory

svn.plugin.zsh

2279 bytes
 1svn_prompt_info() {
 2  local info display
 3  info="$(LANG= svn info 2>/dev/null)" || return 1
 4
 5  if [[ "$SVN_SHOW_BRANCH" = true ]]; then
 6    display="$(svn_get_branch_name "$info")"
 7  else
 8    display="$(svn_get_repo_name "$info")"
 9  fi
10
11  printf '%s%s%s%s%s%s%s%s%s%s' \
12    "$ZSH_PROMPT_BASE_COLOR" \
13    "$ZSH_THEME_SVN_PROMPT_PREFIX" \
14    "$ZSH_THEME_REPO_NAME_COLOR" \
15    "${display:gs/%/%%}" \
16    "$ZSH_PROMPT_BASE_COLOR" \
17    "$ZSH_THEME_SVN_PROMPT_SUFFIX" \
18    "$ZSH_PROMPT_BASE_COLOR" \
19    "$(svn_dirty $info)" \
20    "$(svn_dirty_pwd)" \
21    "$ZSH_PROMPT_BASE_COLOR"
22}
23
24in_svn() {
25  svn info &>/dev/null
26}
27
28svn_get_repo_name() {
29  local info name
30  info="${1:-$(LANG= svn info 2>/dev/null)}"
31  name="$(sed -n 's/^Repository\ Root:\ .*\///p' <<< "$info")"
32  omz_urldecode "$name"
33}
34
35svn_get_branch_name() {
36  local info branch
37  info="${1:-$(LANG= svn info 2>/dev/null)}"
38  branch=$(
39    awk -F/ '/^URL:/ {
40      for (i=0; i<=NF; i++) {
41        if ($i == "branches" || $i == "tags" ) {
42          print $(i+1)
43          break
44        };
45        if ($i == "trunk") {
46          print $i
47          break
48        }
49      }
50    }' <<< "$info"
51  )
52  branch="$(omz_urldecode "$branch")"
53
54  echo "${branch:-$(svn_get_repo_name "$info")}"
55}
56
57svn_get_rev_nr() {
58  sed -n 's/Revision:\ //p' <<<"${1:-$(LANG= svn info 2>/dev/null)}"
59}
60
61svn_dirty() {
62  svn_dirty_choose "${1:-$(LANG= svn info 2>/dev/null)}" $ZSH_THEME_SVN_PROMPT_DIRTY $ZSH_THEME_SVN_PROMPT_CLEAN
63}
64
65svn_dirty_choose() {
66  local root
67  root=$(sed -n 's/^Working Copy Root Path: //p' <<< "${1:-$(LANG= svn info 2>/dev/null)}")
68  if LANG= svn status "$root" 2>/dev/null | command grep -Eq '^\s*[ACDIM!?L]'; then
69    # Grep exits with 0 when "One or more lines were selected", return "dirty".
70    echo $2
71  else
72    # Otherwise, no lines were found, or an error occurred. Return clean.
73    echo $3
74  fi
75}
76
77svn_dirty_pwd () {
78  svn_dirty_choose_pwd $ZSH_THEME_SVN_PROMPT_DIRTY_PWD $ZSH_THEME_SVN_PROMPT_CLEAN_PWD
79}
80
81svn_dirty_choose_pwd () {
82  if LANG= svn status "$PWD" 2>/dev/null | command grep -Eq '^\s*[ACDIM!?L]'; then
83    # Grep exits with 0 when "One or more lines were selected", return "dirty".
84    echo $1
85  else
86    # Otherwise, no lines were found, or an error occurred. Return clean.
87    echo $2
88  fi
89}