93ec48fb0a798775b9e5d366c11a4ac3826c3ea4

Author
Marc Cornellà <hello@mcornella.com>
Committer
Marc Cornellà <hello@mcornella.com>
Date

Message

fix(svn): refactor and quote % characters in `svn_prompt_info`

Diff

This diff is truncated to protect this page.

  1diff --git a/plugins/svn/svn.plugin.zsh b/plugins/svn/svn.plugin.zsh
  2index 851f1a45e8cf2b138eff8d25837b2b46406f91f1..9c3b50d16b2bb4642576f61fb6353fb0c68a04f0 100644
  3--- a/plugins/svn/svn.plugin.zsh
  4+++ b/plugins/svn/svn.plugin.zsh
  5@@ -1,21 +1,28 @@
  6 svn_prompt_info() {
  7-  local _DISPLAY
  8-  if in_svn; then
  9-    if [[ "$SVN_SHOW_BRANCH" = true ]]; then
 10-      unset SVN_SHOW_BRANCH
 11-      _DISPLAY=$(svn_get_branch_name)
 12-    else
 13-      _DISPLAY=$(svn_get_repo_name)
 14-      _DISPLAY=$(omz_urldecode "${_DISPLAY}")
 15-    fi
 16-    echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_PREFIX\
 17-$ZSH_THEME_REPO_NAME_COLOR$_DISPLAY$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR$(svn_dirty)$(svn_dirty_pwd)$ZSH_PROMPT_BASE_COLOR"
 18+  local info display
 19+  info="$(LANG= svn info 2>/dev/null)" || return 1
 20+
 21+  if [[ "$SVN_SHOW_BRANCH" = true ]]; then
 22+    display="$(svn_get_branch_name "$info")"
 23+  else
 24+    display="$(svn_get_repo_name "$info")"
 25   fi
 26-}
 27 
 28+  printf '%s%s%s%s%s%s%s%s%s%s' \
 29+    "$ZSH_PROMPT_BASE_COLOR" \
 30+    "$ZSH_THEME_SVN_PROMPT_PREFIX" \
 31+    "$ZSH_THEME_REPO_NAME_COLOR" \
 32+    "${display:gs/%/%%}" \
 33+    "$ZSH_PROMPT_BASE_COLOR" \
 34+    "$ZSH_THEME_SVN_PROMPT_SUFFIX" \
 35+    "$ZSH_PROMPT_BASE_COLOR" \
 36+    "$(svn_dirty $info)" \
 37+    "$(svn_dirty_pwd)" \
 38+    "$ZSH_PROMPT_BASE_COLOR"
 39+}
 40 
 41 in_svn() {
 42-  svn info >/dev/null 2>&1
 43+  svn info &>/dev/null
 44 }
 45 
 46 svn_get_repo_name() {
 47@@ -26,47 +33,44 @@ svn_get_repo_name() {
 48 }
 49 
 50 svn_get_branch_name() {
 51-  local _DISPLAY=$(
 52-    LANG=C svn info 2> /dev/null | \
 53-      awk -F/ \
 54-      '/^URL:/ { \
 55-        for (i=0; i<=NF; i++) { \
 56-          if ($i == "branches" || $i == "tags" ) { \
 57-            print $(i+1); \
 58-            break;\
 59-          }; \
 60-          if ($i == "trunk") { print $i; break; } \
 61-        } \
 62-      }'
 63+  local info branch
 64+  info="${1:-$(LANG= svn info 2>/dev/null)}"
 65+  branch=$(
 66+    awk -F/ '/^URL:/ {
 67+      for (i=0; i<=NF; i++) {
 68+        if ($i == "branches" || $i == "tags" ) {
 69+          print $(i+1)
 70+          break
 71+        };
 72+        if ($i == "trunk") {
 73+          print $i
 74+          break
 75+        }
 76+      }
 77+    }' <<< "$info"
 78   )
 79+  branch="$(omz_urldecode "$branch")"
 80 
 81-  if [[ -z "$_DISPLAY" ]]; then
 82-    svn_get_repo_name
 83-  else
 84-    echo $_DISPLAY
 85-  fi
 86+  echo "${branch:-$(svn_get_repo_name "$info")}"
 87 }
 88 
 89 svn_get_rev_nr() {
 90-  if in_svn; then
 91-    LANG=C svn info 2> /dev/null | sed -n 's/Revision:\ //p'
 92-  fi
 93+  sed -n 's/Revision:\ //p' "${1:-$(LANG= svn info 2>/dev/null)}"
 94 }
 95 
 96 svn_dirty() {
 97-  svn_dirty_choose $ZSH_THEME_SVN_PROMPT_DIRTY $ZSH_THEME_SVN_PROMPT_CLEAN
 98+  svn_dirty_choose "${1:-$(LANG= svn info 2>/dev/null)}" $ZSH_THEME_SVN_PROMPT_DIRTY $ZSH_THEME_SVN_PROMPT_CLEAN
 99 }
100 
101 svn_dirty_choose() {
102-  if in_svn; then
103-    local root=$(LANG=C svn info 2> /dev/null | sed -n 's/^Working Copy Root Path: //p')
104-    if svn status $root 2> /dev/null | command grep -Eq '^\s*[ACDIM!?L]'; then