diff --git a/nvm-exec b/nvm-exec index 29633a3..57067af 100755 --- a/nvm-exec +++ b/nvm-exec @@ -2,7 +2,7 @@ DIR="$(command cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -source "$DIR/nvm.sh" +. "$DIR/nvm.sh" --no-use if [ -n "$NODE_VERSION" ]; then nvm use $NODE_VERSION > /dev/null || (echo "NODE_VERSION not set" >&2 && exit 127) diff --git a/nvm.sh b/nvm.sh index 5a83d15..5ec26aa 100755 --- a/nvm.sh +++ b/nvm.sh @@ -2325,7 +2325,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' nvm_print_npm_version nvm_npm_global_modules \ nvm_has_system_node nvm_has_system_iojs \ nvm_download nvm_get_latest nvm_has nvm_get_latest \ - nvm_supports_source_options nvm_supports_xz > /dev/null 2>&1 + nvm_supports_source_options nvm_auto nvm_supports_xz > /dev/null 2>&1 unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1 ;; * ) @@ -2343,17 +2343,41 @@ nvm_supports_xz() { command which xz >/dev/null 2>&1 && nvm_version_greater_than_or_equal_to "$1" "2.3.2" } -NVM_VERSION="$(nvm_alias default 2>/dev/null || echo)" -if nvm_supports_source_options && [ "$#" -gt 0 ] && [ "_$1" = "_--install" ]; then - if [ -n "$NVM_VERSION" ]; then - nvm install "$NVM_VERSION" >/dev/null - elif nvm_rc_version >/dev/null 2>&1; then - nvm install >/dev/null +nvm_auto() { + local NVM_MODE + NVM_MODE="${1-}" + local VERSION + if [ "_$NVM_MODE" = '_install' ]; then + VERSION="$(nvm_alias default 2>/dev/null || echo)" + if [ -n "$VERSION" ]; then + nvm install "$VERSION" >/dev/null + elif nvm_rc_version >/dev/null 2>&1; then + nvm install >/dev/null + fi + elif [ "_$NVM_MODE" = '_use' ]; then + VERSION="$(nvm_alias default 2>/dev/null || echo)" + if [ -n "$VERSION" ]; then + nvm use --silent "$VERSION" >/dev/null + elif nvm_rc_version >/dev/null 2>&1; then + nvm use --silent >/dev/null + fi + elif [ "_$NVM_MODE" != '_none' ]; then + echo >&2 'Invalid auto mode supplied.' + return 1 fi -elif [ -n "$NVM_VERSION" ]; then - nvm use --silent "$NVM_VERSION" >/dev/null -elif nvm_rc_version >/dev/null 2>&1; then - nvm use --silent >/dev/null +} + +NVM_AUTO_MODE='use' +if nvm_supports_source_options; then + while [ $# -ne 0 ] + do + case "$1" in + --install) NVM_AUTO_MODE='install' ;; + --no-use) NVM_AUTO_MODE='none' ;; + esac + shift + done fi +nvm_auto "$NVM_AUTO_MODE" } # this ensures the entire script is downloaded # diff --git a/test/sourcing/Sourcing nvm.sh with --no-use should not use anything b/test/sourcing/Sourcing nvm.sh with --no-use should not use anything new file mode 100755 index 0000000..c0b6533 --- /dev/null +++ b/test/sourcing/Sourcing nvm.sh with --no-use should not use anything @@ -0,0 +1,32 @@ +#!/bin/sh + +die () { echo $@ ; exit 1; } +supports_source_options () { + [ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ] +} + +if ! supports_source_options; then + echo 'this shell does not support passing options on sourcing' + exit 0; +fi + +. ../../nvm.sh +nvm install 4.1.0 || die 'install of v4.1.0 failed' +nvm_version 4.1.0 >/dev/null 2>&1 || die "v4.1.0 not installed: $(nvm ls)" +nvm deactivate || die 'nvm deactivate failed' + +NVM_CURRENT="$(nvm current)" +[ "_$NVM_CURRENT" = '_none' ] || [ "_$NVM_CURRENT" = '_system' ] || die "'nvm current' did not return 'none' or 'system', got '$NVM_CURRENT' `nvm ls`" + +nvm unload || die 'nvm unload failed' + +. ../../nvm.sh --no-use +EXIT_CODE="$(echo $?)" + +echo 'sourcing complete.' + +[ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE" + +NVM_CURRENT="$(nvm current)" +[ "_$NVM_CURRENT" = '_none' ] || [ "_$NVM_CURRENT" = '_system' ] || die "'nvm current' did not return 'none' or 'system', got '$NVM_CURRENT' `nvm ls`" +