From 405a66b3156653f2e7914a2f2b7251286cf374cb Mon Sep 17 00:00:00 2001
From: romkatv <roman.perepelitsa@gmail.com>
Date: Wed, 27 Feb 2019 20:16:35 +0100
Subject: speed up the cache-miss branch of prompt_vcs

---
 powerlevel9k.zsh-theme | 48 ++++++++++++++++++++++++++++++++----------------
 1 file changed, 32 insertions(+), 16 deletions(-)

diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index d126f4c6..eaf1312b 100755
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -1742,10 +1742,25 @@ powerlevel9k_vcs_init() {
 #   POWERLEVEL9K_VCS_STATUS_COMMAND="$HOME/gitstatus/gitstatus --dirty-max-index-size=1024"
 set_default POWERLEVEL9K_VCS_STATUS_COMMAND ""
 
+if [[ $POWERLEVEL9K_USE_CACHE == true ]]; then
+  _P9K_VCS_GIT_GITHUB_ICON=$(print_icon VCS_GIT_GITHUB_ICON)
+  _P9K_VCS_GIT_BITBUCKET_ICON=$(print_icon VCS_GIT_BITBUCKET_ICON)
+  _P9K_VCS_GIT_GITLAB_ICON=$(print_icon VCS_GIT_GITLAB_ICON)
+  _P9K_VCS_GIT_ICON=$(print_icon VCS_GIT_ICON)
+  _P9K_VCS_BRANCH_ICON=$(print_icon VCS_BRANCH_ICON)
+  _P9K_VCS_REMOTE_BRANCH_ICON=$(print_icon VCS_REMOTE_BRANCH_ICON)
+  _P9K_VCS_STAGED_ICON=$(print_icon VCS_STAGED_ICON)
+  _P9K_VCS_UNSTAGED_ICON=$(print_icon VCS_UNSTAGED_ICON)
+  _P9K_VCS_UNTRACKED_ICON=$(print_icon VCS_UNTRACKED_ICON)
+  _P9K_VCS_OUTGOING_CHANGES_ICON=$(print_icon VCS_OUTGOING_CHANGES_ICON)
+  _P9K_VCS_INCOMING_CHANGES_ICON=$(print_icon VCS_INCOMING_CHANGES_ICON)
+  _P9K_VCS_STASH_ICON=$(print_icon VCS_STASH_ICON)
+fi
+
 ################################################################
 # Segment to show VCS information
 prompt_vcs() {
-  if [[ -z $POWERLEVEL9K_VCS_STATUS_COMMAND ]]; then
+  if [[ -z $POWERLEVEL9K_VCS_STATUS_COMMAND || $POWERLEVEL9K_USE_CACHE != true ]]; then
     VCS_WORKDIR_DIRTY=false
     VCS_WORKDIR_HALF_DIRTY=false
     local current_state=""
@@ -1788,39 +1803,40 @@ prompt_vcs() {
       local current_state
       if [[ $has_staged != 0 || $has_unstaged != 0 ]]; then
         current_state='modified'
+        color='yellow'
       elif [[ $has_untracked != 0 ]]; then
         current_state='untracked'
       else
         current_state='clean'
       fi
 
-      local icon
+      local vcs_prompt
       if [[ "$remote_url" =~ "github" ]] then
-        icon='VCS_GIT_GITHUB_ICON'
+        vcs_prompt+=$_P9K_VCS_GIT_GITHUB_ICON
       elif [[ "$remote_url" =~ "bitbucket" ]] then
-        icon='VCS_GIT_BITBUCKET_ICON'
+        vcs_prompt+=$_P9K_VCS_GIT_BITBUCKET_ICON
       elif [[ "$remote_url" =~ "stash" ]] then
-        icon='VCS_GIT_BITBUCKET_ICON'
+        vcs_prompt+=$_P9K_VCS_GIT_GITHUB_ICON
       elif [[ "$remote_url" =~ "gitlab" ]] then
-        icon='VCS_GIT_GITLAB_ICON'
+        vcs_prompt+=$_P9K_VCS_GIT_GITLAB_ICON
       else
-        icon='VCS_GIT_ICON'
+        vcs_prompt+=$_P9K_VCS_GIT_ICON
       fi
 
-      local vcs_prompt="$(print_icon VCS_BRANCH_ICON)$local_branch"
+      vcs_prompt+="$_P9K_VCS_BRANCH_ICON$local_branch"
       if [[ -n $action ]]; then
         vcs_prompt+=" %F{${POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}}| $action%f"
       else
-        [[ -n $remote_branch && $local_branch != $remote_branch ]] && vcs_prompt+=" $(print_icon VCS_REMOTE_BRANCH_ICON)$remote_branch"
-        [[ $has_staged == 1 ]] && vcs_prompt+=" $(print_icon VCS_STAGED_ICON)"
-        [[ $has_unstaged == 1 ]] && vcs_prompt+=" $(print_icon VCS_UNSTAGED_ICON)"
-        [[ $has_untracked == 1 ]] && vcs_prompt+=" $(print_icon VCS_UNTRACKED_ICON)"
-        [[ $ahead -gt 0 ]] && vcs_prompt+=" $(print_icon VCS_OUTGOING_CHANGES_ICON)$ahead"
-        [[ $behind -gt 0 ]] && vcs_prompt+=" $(print_icon VCS_INCOMING_CHANGES_ICON)$behind"
-        [[ $stashes -gt 0 ]] && vcs_prompt+=" $(print_icon VCS_STASH_ICON)$stashes"
+        [[ -n $remote_branch && $local_branch != $remote_branch ]] && vcs_prompt+=" $_P9K_VCS_REMOTE_BRANCH_ICON$remote_branch"
+        [[ $has_staged == 1 ]] && vcs_prompt+=" $_P9K_VCS_STAGED_ICON"
+        [[ $has_unstaged == 1 ]] && vcs_prompt+=" $_P9K_VCS_UNSTAGED_ICON"
+        [[ $has_untracked == 1 ]] && vcs_prompt+=" $_P9K_VCS_UNTRACKED_ICON"
+        [[ $ahead -gt 0 ]] && vcs_prompt+=" $_P9K_VCS_OUTGOING_CHANGES_ICON$ahead"
+        [[ $behind -gt 0 ]] && vcs_prompt+=" $_P9K_VCS_INCOMING_CHANGES_ICON$behind"
+        [[ $stashes -gt 0 ]] && vcs_prompt+=" $_P9K_VCS_STASH_ICON$stashes"
       fi
 
-      _P9K_CACHE_VALUE="${0}_${(U)current_state} $2 ${(qq)vcs_states[$current_state]} ${(qq)DEFAULT_COLOR} ${(qq)vcs_prompt} ${(qq)icon}"
+      _P9K_CACHE_VALUE="${0}_${(U)current_state} $2 ${(qq)vcs_states[$current_state]} ${(qq)DEFAULT_COLOR} ${(qq)vcs_prompt}"
       p9k_cache_set $cache_key $_P9K_CACHE_VALUE
     fi
     "$1_prompt_segment" "${(@Q)${(z)_P9K_CACHE_VALUE}}"
-- 
cgit v1.2.3