mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2025-11-04 13:21:19 +08:00 
			
		
		
		
	fix(svn): refactor and quote % characters in svn_prompt_info
				
					
				
			This commit is contained in:
		
							parent
							
								
									c76dc91e02
								
							
						
					
					
						commit
						93ec48fb0a
					
				@ -1,21 +1,28 @@
 | 
				
			|||||||
svn_prompt_info() {
 | 
					svn_prompt_info() {
 | 
				
			||||||
  local _DISPLAY
 | 
					  local info display
 | 
				
			||||||
  if in_svn; then
 | 
					  info="$(LANG= svn info 2>/dev/null)" || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [[ "$SVN_SHOW_BRANCH" = true ]]; then
 | 
					  if [[ "$SVN_SHOW_BRANCH" = true ]]; then
 | 
				
			||||||
      unset SVN_SHOW_BRANCH
 | 
					    display="$(svn_get_branch_name "$info")"
 | 
				
			||||||
      _DISPLAY=$(svn_get_branch_name)
 | 
					 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
      _DISPLAY=$(svn_get_repo_name)
 | 
					    display="$(svn_get_repo_name "$info")"
 | 
				
			||||||
      _DISPLAY=$(omz_urldecode "${_DISPLAY}")
 | 
					 | 
				
			||||||
    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)$(svn_dirty_pwd)$ZSH_PROMPT_BASE_COLOR"
 | 
					 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  printf '%s%s%s%s%s%s%s%s%s%s' \
 | 
				
			||||||
 | 
					    "$ZSH_PROMPT_BASE_COLOR" \
 | 
				
			||||||
 | 
					    "$ZSH_THEME_SVN_PROMPT_PREFIX" \
 | 
				
			||||||
 | 
					    "$ZSH_THEME_REPO_NAME_COLOR" \
 | 
				
			||||||
 | 
					    "${display:gs/%/%%}" \
 | 
				
			||||||
 | 
					    "$ZSH_PROMPT_BASE_COLOR" \
 | 
				
			||||||
 | 
					    "$ZSH_THEME_SVN_PROMPT_SUFFIX" \
 | 
				
			||||||
 | 
					    "$ZSH_PROMPT_BASE_COLOR" \
 | 
				
			||||||
 | 
					    "$(svn_dirty $info)" \
 | 
				
			||||||
 | 
					    "$(svn_dirty_pwd)" \
 | 
				
			||||||
 | 
					    "$ZSH_PROMPT_BASE_COLOR"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
in_svn() {
 | 
					in_svn() {
 | 
				
			||||||
  svn info >/dev/null 2>&1
 | 
					  svn info &>/dev/null
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
svn_get_repo_name() {
 | 
					svn_get_repo_name() {
 | 
				
			||||||
@ -26,48 +33,45 @@ svn_get_repo_name() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
svn_get_branch_name() {
 | 
					svn_get_branch_name() {
 | 
				
			||||||
  local _DISPLAY=$(
 | 
					  local info branch
 | 
				
			||||||
    LANG=C svn info 2> /dev/null | \
 | 
					  info="${1:-$(LANG= svn info 2>/dev/null)}"
 | 
				
			||||||
      awk -F/ \
 | 
					  branch=$(
 | 
				
			||||||
      '/^URL:/ { \
 | 
					    awk -F/ '/^URL:/ {
 | 
				
			||||||
        for (i=0; i<=NF; i++) { \
 | 
					      for (i=0; i<=NF; i++) {
 | 
				
			||||||
          if ($i == "branches" || $i == "tags" ) { \
 | 
					        if ($i == "branches" || $i == "tags" ) {
 | 
				
			||||||
            print $(i+1); \
 | 
					          print $(i+1)
 | 
				
			||||||
            break;\
 | 
					          break
 | 
				
			||||||
          }; \
 | 
					        };
 | 
				
			||||||
          if ($i == "trunk") { print $i; break; } \
 | 
					        if ($i == "trunk") {
 | 
				
			||||||
        } \
 | 
					          print $i
 | 
				
			||||||
      }'
 | 
					          break
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }' <<< "$info"
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
 | 
					  branch="$(omz_urldecode "$branch")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [[ -z "$_DISPLAY" ]]; then
 | 
					  echo "${branch:-$(svn_get_repo_name "$info")}"
 | 
				
			||||||
    svn_get_repo_name
 | 
					 | 
				
			||||||
  else
 | 
					 | 
				
			||||||
    echo $_DISPLAY
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
svn_get_rev_nr() {
 | 
					svn_get_rev_nr() {
 | 
				
			||||||
  if in_svn; then
 | 
					  sed -n 's/Revision:\ //p' "${1:-$(LANG= svn info 2>/dev/null)}"
 | 
				
			||||||
    LANG=C svn info 2> /dev/null | sed -n 's/Revision:\ //p'
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
svn_dirty() {
 | 
					svn_dirty() {
 | 
				
			||||||
  svn_dirty_choose $ZSH_THEME_SVN_PROMPT_DIRTY $ZSH_THEME_SVN_PROMPT_CLEAN
 | 
					  svn_dirty_choose "${1:-$(LANG= svn info 2>/dev/null)}" $ZSH_THEME_SVN_PROMPT_DIRTY $ZSH_THEME_SVN_PROMPT_CLEAN
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
svn_dirty_choose() {
 | 
					svn_dirty_choose() {
 | 
				
			||||||
  if in_svn; then
 | 
					  local root
 | 
				
			||||||
    local root=$(LANG=C svn info 2> /dev/null | sed -n 's/^Working Copy Root Path: //p')
 | 
					  root=$(sed -n 's/^Working Copy Root Path: //p' <<< "${1:-$(LANG= svn info 2>/dev/null)}")
 | 
				
			||||||
    if svn status $root 2> /dev/null | command grep -Eq '^\s*[ACDIM!?L]'; then
 | 
					  if LANG= svn status "$root" 2>/dev/null | command grep -Eq '^\s*[ACDIM!?L]'; then
 | 
				
			||||||
    # Grep exits with 0 when "One or more lines were selected", return "dirty".
 | 
					    # Grep exits with 0 when "One or more lines were selected", return "dirty".
 | 
				
			||||||
    echo $1
 | 
					    echo $1
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    # Otherwise, no lines were found, or an error occurred. Return clean.
 | 
					    # Otherwise, no lines were found, or an error occurred. Return clean.
 | 
				
			||||||
    echo $2
 | 
					    echo $2
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
svn_dirty_pwd () {
 | 
					svn_dirty_pwd () {
 | 
				
			||||||
@ -75,13 +79,11 @@ svn_dirty_pwd () {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
svn_dirty_choose_pwd () {
 | 
					svn_dirty_choose_pwd () {
 | 
				
			||||||
  if in_svn; then
 | 
					  if LANG= svn status "$PWD" 2>/dev/null | command grep -Eq '^\s*[ACDIM!?L]'; then
 | 
				
			||||||
    if svn status "$PWD" 2> /dev/null | command grep -Eq '^\s*[ACDIM!?L]'; then
 | 
					 | 
				
			||||||
    # Grep exits with 0 when "One or more lines were selected", return "dirty".
 | 
					    # Grep exits with 0 when "One or more lines were selected", return "dirty".
 | 
				
			||||||
    echo $1
 | 
					    echo $1
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    # Otherwise, no lines were found, or an error occurred. Return clean.
 | 
					    # Otherwise, no lines were found, or an error occurred. Return clean.
 | 
				
			||||||
    echo $2
 | 
					    echo $2
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user