summaryrefslogtreecommitdiff
path: root/share/spack/setup-env.sh
diff options
context:
space:
mode:
authorTom Scogland <scogland1@llnl.gov>2021-10-28 11:32:59 -0700
committerGitHub <noreply@github.com>2021-10-28 11:32:59 -0700
commit87e456d59cf43700c8ed257d957794d2c083082a (patch)
tree1f6b8432029b590c13eac8a84801cd5b7c836ebc /share/spack/setup-env.sh
parent5faa457a35a6eb077ab0e246d7ef471c993a4459 (diff)
downloadspack-87e456d59cf43700c8ed257d957794d2c083082a.tar.gz
spack-87e456d59cf43700c8ed257d957794d2c083082a.tar.bz2
spack-87e456d59cf43700c8ed257d957794d2c083082a.tar.xz
spack-87e456d59cf43700c8ed257d957794d2c083082a.zip
spack setup-env.sh: make zsh loading async compatible, and ~10x faster (in some cases) (#26120)
Currently spack is a bit of a bad actor as a zsh plugin, and it was my fault. The autoload and compinit should really be handled by the user, as was made abundantly clear when I found spack was doing completion initialization for *all* of my plugins due to a deferred setup that was getting messed up by it. Making this conditional took spack load time from 1.5 seconds (with module loading disabled) to 0.029 seconds. I can actually afford to load spack by default with this change in. Hopefully someday we'll do proper zsh completion support, but for now this helps a lot. * use zsh hist expansion in place of dirname * only run (bash)compinit if compdef/complete missing * add zsh compiled files to .gitignore * move changes to .in file, because spack
Diffstat (limited to 'share/spack/setup-env.sh')
-rwxr-xr-xshare/spack/setup-env.sh9
1 files changed, 7 insertions, 2 deletions
diff --git a/share/spack/setup-env.sh b/share/spack/setup-env.sh
index 8936f6ca0d..21bd696386 100755
--- a/share/spack/setup-env.sh
+++ b/share/spack/setup-env.sh
@@ -276,8 +276,13 @@ fi
#
# We send cd output to /dev/null to avoid because a lot of users set up
# their shell so that cd prints things out to the tty.
-_sp_share_dir="$(cd "$(dirname $_sp_source_file)" > /dev/null && pwd)"
-_sp_prefix="$(cd "$(dirname $(dirname $_sp_share_dir))" > /dev/null && pwd)"
+if [ "$_sp_shell" = zsh ]; then
+ _sp_share_dir="${_sp_source_file:A:h}"
+ _sp_prefix="${_sp_share_dir:h:h}"
+else
+ _sp_share_dir="$(cd "$(dirname $_sp_source_file)" > /dev/null && pwd)"
+ _sp_prefix="$(cd "$(dirname $(dirname $_sp_share_dir))" > /dev/null && pwd)"
+fi
if [ -x "$_sp_prefix/bin/spack" ]; then
export SPACK_ROOT="${_sp_prefix}"
else