This PR seeks to address several issues surrounding the go and goenv plugins. The nature of goenv allows for a situation where the initial shell does not point to a working go binary, and instead at the included shim script. The result is that one must run reload after moving to a project directory with a version file, however in doing so, PATH is updated, requiring they exit the shell or risk lookup collisions and unexpected behavior. This is solved by using preexec to check the version before changing directories and restarting the shell if the version has changed. The exec pattern is copied from _bash-it-restart, but is edited to support this specific use case. Additionally, tests have been uploaded and these are now being linted.
43 lines
1.3 KiB
Bash
43 lines
1.3 KiB
Bash
# shellcheck shell=bash
|
|
cite about-plugin
|
|
about-plugin 'load goenv, if you are using it'
|
|
|
|
# https://github.com/syndbg/goenv
|
|
|
|
# Load after basher
|
|
# BASH_IT_LOAD_PRIORITY: 260
|
|
|
|
# Don't modify the environment if we can't find the tool:
|
|
# - Check if in $PATH already
|
|
# - Check if installed manually to $GOENV_ROOT
|
|
# - Check if installed manually to $HOME
|
|
_command_exists goenv \
|
|
|| [[ -n "$GOENV_ROOT" && -x "$GOENV_ROOT/bin/goenv" ]] \
|
|
|| [[ -x "$HOME/.goenv/bin/goenv" ]] \
|
|
|| return 0
|
|
|
|
# Set GOENV_ROOT, if not already set
|
|
export GOENV_ROOT="${GOENV_ROOT:-$HOME/.goenv}"
|
|
|
|
# Add GOENV_ROOT/bin to PATH, if that's where it's installed
|
|
if ! _command_exists goenv && [[ -x "$GOENV_ROOT/bin/goenv" ]]; then
|
|
pathmunge "$GOENV_ROOT/bin"
|
|
fi
|
|
|
|
# Initialize goenv
|
|
eval "$(goenv init - bash)"
|
|
|
|
# If moving to a directory with a goenv version set, reload the shell
|
|
# to ensure the shell environment matches expectations.
|
|
_bash-it-goenv-preexec() {
|
|
export GOENV_OLD_VERSION="$(goenv version-name)"
|
|
}
|
|
_bash-it-goenv-precmd() {
|
|
if [[ -n $GOENV_OLD_VERSION ]] && [[ "$GOENV_OLD_VERSION" != "$(goenv version-name)" ]]; then
|
|
exec env -u PATH -u GOROOT -u GOPATH -u GOENV_OLD_VERSION "${0/-/}" --login
|
|
fi
|
|
unset GOENV_OLD_VERSION
|
|
}
|
|
preexec_functions+=(_bash-it-goenv-preexec)
|
|
precmd_functions+=(_bash-it-goenv-precmd)
|