From 9d6b6c5ce161280e52df3a33d584318d6dbc0bd9 Mon Sep 17 00:00:00 2001
From: T0mK0 <T0mK0@users.noreply.github.com>
Date: Tue, 7 Nov 2017 11:03:54 -0500
Subject: [PATCH] speed up chruby plugin by eliminating(as much as possible)
 calls to brew (#6080)

* speed up chruby plugin by eliminating(as much as possible) calls to brew

* speed up aws plugin by eliminating(as much as possible) calls to brew
---
 plugins/aws/aws.plugin.zsh       | 19 +++++++++++++++++--
 plugins/chruby/chruby.plugin.zsh | 22 +++++++++++++++++++---
 2 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/plugins/aws/aws.plugin.zsh b/plugins/aws/aws.plugin.zsh
index d31052f83..6a0e04add 100644
--- a/plugins/aws/aws.plugin.zsh
+++ b/plugins/aws/aws.plugin.zsh
@@ -1,9 +1,24 @@
 _homebrew-installed() {
   type brew &> /dev/null
+  _xit=$?
+  if [ $_xit -eq 0 ];then
+        # ok , we have brew installed
+        # speculatively we check default brew prefix
+        if [ -h  /usr/local/opt/awscli ];then
+                _brew_prefix="/usr/local/opt/awscli"
+        else
+                # ok , it is not default prefix
+                # this call to brew is expensive ( about 400 ms ), so at least let's make it only once
+                _brew_prefix=$(brew --prefix awscli)
+        fi
+        return 0
+   else
+        return $_xit
+   fi
 }
 
 _awscli-homebrew-installed() {
-  brew list awscli &> /dev/null
+  [ -r $_brew_prefix/libexec/bin/aws_zsh_completer.sh ] &> /dev/null
 }
 
 export AWS_HOME=~/.aws
@@ -28,7 +43,7 @@ function aws_profiles {
 compctl -K aws_profiles asp
 
 if _homebrew-installed && _awscli-homebrew-installed ; then
-  _aws_zsh_completer_path=$(brew --prefix awscli)/libexec/bin/aws_zsh_completer.sh
+  _aws_zsh_completer_path=$_brew_prefix/libexec/bin/aws_zsh_completer.sh
 else
   _aws_zsh_completer_path=$(which aws_zsh_completer.sh)
 fi
diff --git a/plugins/chruby/chruby.plugin.zsh b/plugins/chruby/chruby.plugin.zsh
index 758b4a56c..998d92098 100644
--- a/plugins/chruby/chruby.plugin.zsh
+++ b/plugins/chruby/chruby.plugin.zsh
@@ -16,12 +16,28 @@
 # rvm and rbenv plugins also provide this alias
 alias rubies='chruby'
 
+
 _homebrew-installed() {
     whence brew &> /dev/null
+    _xit=$?
+    if [ $_xit -eq 0 ];then
+    	# ok , we have brew installed
+	# speculatively we check default brew prefix
+        if [ -h  /usr/local/opt/chruby ];then
+		_brew_prefix="/usr/local/opt/chruby"
+	else
+		# ok , it is not default prefix 
+		# this call to brew is expensive ( about 400 ms ), so at least let's make it only once
+		_brew_prefix=$(brew --prefix chruby)
+	fi
+	return 0
+   else
+        return $_xit
+   fi
 }
 
 _chruby-from-homebrew-installed() {
-  [ -r $(brew --prefix chruby) ] &> /dev/null
+  [ -r _brew_prefix ] &> /dev/null
 }
 
 _ruby-build_installed() {
@@ -64,8 +80,8 @@ _chruby_dirs() {
 }
 
 if _homebrew-installed && _chruby-from-homebrew-installed ; then
-    source $(brew --prefix chruby)/share/chruby/chruby.sh
-    source $(brew --prefix chruby)/share/chruby/auto.sh
+    source $_brew_prefix/share/chruby/chruby.sh
+    source $_brew_prefix/share/chruby/auto.sh
     _chruby_dirs
 elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then
     source /usr/local/share/chruby/chruby.sh