-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1824 from cornfeedhobo/goenv-go
Ensure goenv and go play together well
- Loading branch information
Showing
4 changed files
with
69 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,36 @@ | ||
#!/usr/bin/env bash | ||
|
||
# shellcheck shell=bash | ||
cite about-plugin | ||
about-plugin 'go environment variables & path configuration' | ||
|
||
command -v go &>/dev/null || return | ||
# Load after basher and goenv | ||
# BASH_IT_LOAD_PRIORITY: 270 | ||
|
||
function _go_pathmunge_wrap() { | ||
IFS=':' local -a 'a=($1)' | ||
local i=${#a[@]} | ||
while [ $i -gt 0 ] ; do | ||
i=$(( i - 1 )) | ||
pathmunge "${a[i]}/bin" | ||
done | ||
} | ||
# Test `go version` because goenv creates shim scripts that will be found in PATH | ||
# but do not always resolve to a working install. | ||
{ _command_exists go && go version &> /dev/null; } || return 0 | ||
|
||
export GOROOT="${GOROOT:-$(go env GOROOT)}" | ||
export GOPATH="${GOPATH:-$(go env GOPATH)}" | ||
_go_pathmunge_wrap "${GOPATH}:${GOROOT}" | ||
|
||
# $GOPATH/bin is the default location for binaries. Because GOPATH accepts a list of paths and each | ||
# might be managed differently, we add each path's /bin folder to PATH using pathmunge, | ||
# while preserving ordering. | ||
# e.g. GOPATH=foo:bar -> PATH=foo/bin:bar/bin | ||
_bash-it-gopath-pathmunge() { | ||
_about 'Ensures paths in GOPATH are added to PATH using pathmunge, with /bin appended' | ||
_group 'go' | ||
if [[ -z $GOPATH ]]; then | ||
echo 'GOPATH empty' >&2 | ||
return 1 | ||
fi | ||
local paths i | ||
IFS=: read -r -a paths <<< "$GOPATH" | ||
i=${#paths[@]} | ||
while [[ $i -gt 0 ]]; do | ||
i=$((i - 1)) | ||
if [[ -n "${paths[i]}" ]]; then | ||
pathmunge "${paths[i]}/bin" | ||
fi | ||
done | ||
} | ||
_bash-it-gopath-pathmunge |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,42 @@ | ||
# 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 | ||
_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 | ||
! _command_exists goenv && [[ -x "$GOENV_ROOT/bin/goenv" ]] && pathmunge "$GOENV_ROOT/bin" | ||
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters