diff options
author | Marc Cornellà <hello@mcornella.com> | 2021-12-02 11:12:18 +0100 |
---|---|---|
committer | Marc Cornellà <hello@mcornella.com> | 2021-12-13 10:50:50 +0100 |
commit | 4119f53004de987215e4ae2ce49d0f818ad58c63 (patch) | |
tree | c5e973449e0afbbc72382e17666f3b1d2326c162 | |
parent | d058801a18270800c906d92dd41e275f4da24397 (diff) | |
download | zsh-4119f53004de987215e4ae2ce49d0f818ad58c63.tar.gz zsh-4119f53004de987215e4ae2ce49d0f818ad58c63.tar.bz2 zsh-4119f53004de987215e4ae2ce49d0f818ad58c63.zip |
perf(mercurial): optimize utility functions
-rw-r--r-- | plugins/mercurial/mercurial.plugin.zsh | 101 | ||||
-rw-r--r-- | themes/minimal.zsh-theme | 32 |
2 files changed, 78 insertions, 55 deletions
diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh index 8b50da9d8..6e72f0b1e 100644 --- a/plugins/mercurial/mercurial.plugin.zsh +++ b/plugins/mercurial/mercurial.plugin.zsh @@ -21,65 +21,86 @@ alias hgo='hg outgoing' alias hglg='hg log --stat -v' alias hglgp='hg log --stat -p -v' +function hgic() { + hg incoming "$@" | grep "changeset" | wc -l +} + +function hgoc() { + hg outgoing "$@" | grep "changeset" | wc -l +} + +# functions +function hg_root() { + local dir="$PWD" + while [[ "$dir" != "/" ]]; do + if [[ -d "$dir/.hg" ]]; then + echo "$dir" + return 0 + fi + dir="${dir:h}" + done + return 1 +} + function in_hg() { - if $(hg branch > /dev/null 2>&1); then - echo 1 - fi + hg_root >/dev/null } function hg_get_branch_name() { - branch=`hg branch 2>/dev/null` - if [ $? -eq 0 ]; then - echo $branch + local dir + if ! dir=$(hg_root); then + return fi - unset branch -} -function hg_prompt_info { - local info rev branch dirty - - if ! info=$(hg id --id --branch 2>/dev/null); then + if [[ ! -f "$dir/.hg/branch" ]]; then + echo default return fi - rev="${info[(w)1]}" - branch="${${info[(w)2]}:gs/%/%%}" + echo "$(<"$dir/.hg/branch")" +} - if [[ "$rev" = *+ ]]; then - dirty="$ZSH_THEME_HG_PROMPT_DIRTY" - else - dirty="$ZSH_THEME_HG_PROMPT_CLEAN" +function hg_get_bookmark_name() { + local dir + if ! dir=$(hg_root); then + return fi - echo "${ZSH_THEME_HG_PROMPT_PREFIX}${branch}${dirty}${ZSH_THEME_HG_PROMPT_SUFFIX}" + if [[ ! -f "$dir/.hg/bookmarks.current" ]]; then + return + fi + + echo "$(<"$dir/.hg/bookmarks.current")" } -function hg_dirty_choose { - hg status -mar 2> /dev/null | command grep -Eq '^\s*[ACDIM!?L]' - if [ $? -eq 0 ]; then - if [ $pipestatus[-1] -eq 0 ]; then - # Grep exits with 0 when "One or more lines were selected", return "dirty". - echo $1 - return - fi +function hg_prompt_info { + local dir branch dirty + if ! dir=$(hg_root); then + return fi - echo $2 -} -function hg_dirty { - hg_dirty_choose $ZSH_THEME_HG_PROMPT_DIRTY $ZSH_THEME_HG_PROMPT_CLEAN -} + if [[ ! -f "$dir/.hg/branch" ]]; then + branch=default + else + branch="$(<"$dir/.hg/branch")" + fi -function hgic() { - hg incoming "$@" | grep "changeset" | wc -l -} + dirty="$(hg_dirty)" -function hgoc() { - hg outgoing "$@" | grep "changeset" | wc -l + echo "${ZSH_THEME_HG_PROMPT_PREFIX}${branch:gs/%/%%}${dirty}${ZSH_THEME_HG_PROMPT_SUFFIX}" } -function hg_get_bookmark_name() { - if [ $(in_hg) ]; then - echo $(hg id -B) +function hg_dirty { + local hg_status + if ! hg_status="$(hg status -mar 2>/dev/null)"; then + return fi + + # grep exits with 0 when dirty + if command grep -Eq '^\s*[ACDIM!?L]' <<< "$hg_status"; then + echo $ZSH_THEME_HG_PROMPT_DIRTY + return + fi + + echo $ZSH_THEME_HG_PROMPT_CLEAN } diff --git a/themes/minimal.zsh-theme b/themes/minimal.zsh-theme index e05df9c9b..588ab6982 100644 --- a/themes/minimal.zsh-theme +++ b/themes/minimal.zsh-theme @@ -2,23 +2,25 @@ ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[white]%}[" ZSH_THEME_GIT_PROMPT_SUFFIX="" ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}●%{$fg[white]%}]%{$reset_color%} " ZSH_THEME_GIT_PROMPT_CLEAN="]%{$reset_color%} " -ZSH_THEME_SVN_PROMPT_PREFIX=$ZSH_THEME_GIT_PROMPT_PREFIX -ZSH_THEME_SVN_PROMPT_SUFFIX=$ZSH_THEME_GIT_PROMPT_SUFFIX -ZSH_THEME_SVN_PROMPT_DIRTY=$ZSH_THEME_GIT_PROMPT_DIRTY -ZSH_THEME_SVN_PROMPT_CLEAN=$ZSH_THEME_GIT_PROMPT_CLEAN -ZSH_THEME_HG_PROMPT_PREFIX=$ZSH_THEME_GIT_PROMPT_PREFIX -ZSH_THEME_HG_PROMPT_SUFFIX=$ZSH_THEME_GIT_PROMPT_SUFFIX -ZSH_THEME_HG_PROMPT_DIRTY=$ZSH_THEME_GIT_PROMPT_DIRTY -ZSH_THEME_HG_PROMPT_CLEAN=$ZSH_THEME_GIT_PROMPT_CLEAN + +ZSH_THEME_SVN_PROMPT_PREFIX="$ZSH_THEME_GIT_PROMPT_PREFIX" +ZSH_THEME_SVN_PROMPT_SUFFIX="$ZSH_THEME_GIT_PROMPT_SUFFIX" +ZSH_THEME_SVN_PROMPT_DIRTY="$ZSH_THEME_GIT_PROMPT_DIRTY" +ZSH_THEME_SVN_PROMPT_CLEAN="$ZSH_THEME_GIT_PROMPT_CLEAN" + +ZSH_THEME_HG_PROMPT_PREFIX="$ZSH_THEME_GIT_PROMPT_PREFIX" +ZSH_THEME_HG_PROMPT_SUFFIX="$ZSH_THEME_GIT_PROMPT_SUFFIX" +ZSH_THEME_HG_PROMPT_DIRTY="$ZSH_THEME_GIT_PROMPT_DIRTY" +ZSH_THEME_HG_PROMPT_CLEAN="$ZSH_THEME_GIT_PROMPT_CLEAN" vcs_status() { - if [[ $(whence in_svn) != "" ]] && in_svn; then - svn_prompt_info - elif [[ $(whence in_hg) != "" ]] && in_hg; then - hg_prompt_info - else - git_prompt_info - fi + if (( ${+functions[in_svn]} )) && in_svn; then + svn_prompt_info + elif (( ${+functions[in_hg]} )) && in_hg; then + hg_prompt_info + else + git_prompt_info + fi } PROMPT='%2~ $(vcs_status)»%b ' |