4119f53004de987215e4ae2ce49d0f818ad58c63

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

Message

perf(mercurial): optimize utility functions

Diff

This diff is truncated to protect this page.

  1diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh
  2index 8b50da9d8267f287cfc1ab59aa98e7b5768c0a6b..6e72f0b1ee8d84ba89457d5139c89257ed09047b 100644
  3--- a/plugins/mercurial/mercurial.plugin.zsh
  4+++ b/plugins/mercurial/mercurial.plugin.zsh
  5@@ -21,65 +21,86 @@ alias hgo='hg outgoing'
  6 alias hglg='hg log --stat -v'
  7 alias hglgp='hg log --stat  -p -v'
  8 
  9+function hgic() {
 10+  hg incoming "$@" | grep "changeset" | wc -l
 11+}
 12+
 13+function hgoc() {
 14+  hg outgoing "$@" | grep "changeset" | wc -l
 15+}
 16+
 17+# functions
 18+function hg_root() {
 19+  local dir="$PWD"
 20+  while [[ "$dir" != "/" ]]; do
 21+    if [[ -d "$dir/.hg" ]]; then
 22+      echo "$dir"
 23+      return 0
 24+    fi
 25+    dir="${dir:h}"
 26+  done
 27+  return 1
 28+}
 29+
 30 function in_hg() {
 31-  if $(hg branch > /dev/null 2>&1); then
 32-    echo 1
 33-  fi
 34+  hg_root >/dev/null
 35 }
 36 
 37 function hg_get_branch_name() {
 38-  branch=`hg branch 2>/dev/null`
 39-  if [ $? -eq 0 ]; then
 40-    echo $branch
 41+  local dir
 42+  if ! dir=$(hg_root); then
 43+    return
 44   fi
 45-  unset branch
 46-}
 47 
 48-function hg_prompt_info {
 49-  local info rev branch dirty
 50-
 51-  if ! info=$(hg id --id --branch 2>/dev/null); then
 52+  if [[ ! -f "$dir/.hg/branch" ]]; then
 53+    echo default
 54     return
 55   fi
 56 
 57-  rev="${info[(w)1]}"
 58-  branch="${${info[(w)2]}:gs/%/%%}"
 59+  echo "$(<"$dir/.hg/branch")"
 60+}
 61 
 62-  if [[ "$rev" = *+ ]]; then
 63-    dirty="$ZSH_THEME_HG_PROMPT_DIRTY"
 64-  else
 65-    dirty="$ZSH_THEME_HG_PROMPT_CLEAN"
 66+function hg_get_bookmark_name() {
 67+  local dir
 68+  if ! dir=$(hg_root); then
 69+    return
 70   fi
 71 
 72-  echo "${ZSH_THEME_HG_PROMPT_PREFIX}${branch}${dirty}${ZSH_THEME_HG_PROMPT_SUFFIX}"
 73+  if [[ ! -f "$dir/.hg/bookmarks.current" ]]; then
 74+    return
 75+  fi
 76+
 77+  echo "$(<"$dir/.hg/bookmarks.current")"
 78 }
 79 
 80-function hg_dirty_choose {
 81-  hg status -mar 2> /dev/null | command grep -Eq '^\s*[ACDIM!?L]'
 82-  if [ $? -eq 0 ]; then
 83-    if [ $pipestatus[-1] -eq 0 ]; then
 84-      # Grep exits with 0 when "One or more lines were selected", return "dirty".
 85-      echo $1
 86-      return
 87-    fi
 88+function hg_prompt_info {
 89+  local dir branch dirty
 90+  if ! dir=$(hg_root); then
 91+    return
 92   fi
 93-  echo $2
 94-}
 95 
 96-function hg_dirty {
 97-  hg_dirty_choose $ZSH_THEME_HG_PROMPT_DIRTY $ZSH_THEME_HG_PROMPT_CLEAN
 98-}
 99+  if [[ ! -f "$dir/.hg/branch" ]]; then
100+    branch=default
101+  else
102+    branch="$(<"$dir/.hg/branch")"
103+  fi
104 
105diff --git a/themes/minimal.zsh-theme b/themes/minimal.zsh-theme
106index e05df9c9bc0bd4f83c96e5b50572b44e4c994ca6..588ab698284e5550bed68005cd8af60ed040d3d1 100644
107--- a/themes/minimal.zsh-theme
108+++ b/themes/minimal.zsh-theme
109@@ -2,23 +2,25 @@ ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[white]%}["
110 ZSH_THEME_GIT_PROMPT_SUFFIX=""
111 ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}●%{$fg[white]%}]%{$reset_color%} "
112 ZSH_THEME_GIT_PROMPT_CLEAN="]%{$reset_color%} "
113-ZSH_THEME_SVN_PROMPT_PREFIX=$ZSH_THEME_GIT_PROMPT_PREFIX
114-ZSH_THEME_SVN_PROMPT_SUFFIX=$ZSH_THEME_GIT_PROMPT_SUFFIX
115-ZSH_THEME_SVN_PROMPT_DIRTY=$ZSH_THEME_GIT_PROMPT_DIRTY
116-ZSH_THEME_SVN_PROMPT_CLEAN=$ZSH_THEME_GIT_PROMPT_CLEAN
117-ZSH_THEME_HG_PROMPT_PREFIX=$ZSH_THEME_GIT_PROMPT_PREFIX
118-ZSH_THEME_HG_PROMPT_SUFFIX=$ZSH_THEME_GIT_PROMPT_SUFFIX
119-ZSH_THEME_HG_PROMPT_DIRTY=$ZSH_THEME_GIT_PROMPT_DIRTY
120-ZSH_THEME_HG_PROMPT_CLEAN=$ZSH_THEME_GIT_PROMPT_CLEAN
121+
122+ZSH_THEME_SVN_PROMPT_PREFIX="$ZSH_THEME_GIT_PROMPT_PREFIX"
123+ZSH_THEME_SVN_PROMPT_SUFFIX="$ZSH_THEME_GIT_PROMPT_SUFFIX"
124+ZSH_THEME_SVN_PROMPT_DIRTY="$ZSH_THEME_GIT_PROMPT_DIRTY"
125+ZSH_THEME_SVN_PROMPT_CLEAN="$ZSH_THEME_GIT_PROMPT_CLEAN"
126+
127+ZSH_THEME_HG_PROMPT_PREFIX="$ZSH_THEME_GIT_PROMPT_PREFIX"
128+ZSH_THEME_HG_PROMPT_SUFFIX="$ZSH_THEME_GIT_PROMPT_SUFFIX"
129+ZSH_THEME_HG_PROMPT_DIRTY="$ZSH_THEME_GIT_PROMPT_DIRTY"
130+ZSH_THEME_HG_PROMPT_CLEAN="$ZSH_THEME_GIT_PROMPT_CLEAN"
131 
132 vcs_status() {
133-    if [[ $(whence in_svn) != "" ]] && in_svn; then
134-        svn_prompt_info
135-    elif [[ $(whence in_hg) != "" ]] && in_hg; then
136-        hg_prompt_info
137-    else
138-        git_prompt_info
139-    fi
140+  if (( ${+functions[in_svn]} )) && in_svn; then
141+    svn_prompt_info
142+  elif (( ${+functions[in_hg]} )) && in_hg; then
143+    hg_prompt_info
144+  else
145+    git_prompt_info
146+  fi
147 }
148 
149 PROMPT='%2~ $(vcs_status)»%b '