diff --git a/nvm.sh b/nvm.sh index 0a42275..f907a86 100644 --- a/nvm.sh +++ b/nvm.sh @@ -1102,7 +1102,7 @@ nvm() { echo "0.21.0" ;; "unload" ) - unset -f nvm nvm_print_versions nvm_checksum nvm_ls_remote nvm_ls nvm_remote_version nvm_version nvm_rc_version nvm_version_greater nvm_version_greater_than_or_equal_to > /dev/null 2>&1 + unset -f nvm nvm_print_versions nvm_checksum nvm_ls_remote nvm_ls nvm_remote_version nvm_version nvm_rc_version nvm_version_greater nvm_version_greater_than_or_equal_to nvm_supports_source_options > /dev/null 2>&1 unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1 ;; * ) @@ -1111,7 +1111,18 @@ nvm() { esac } -if nvm ls default >/dev/null; then +nvm_supports_source_options() { + [ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ] +} + +if nvm_supports_source_options && [ "_$1" = "_--install" ]; then + VERSION="$(nvm_alias default 2>/dev/null)" + 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 ls default >/dev/null; then nvm use default >/dev/null elif nvm_rc_version >/dev/null 2>&1; then nvm use >/dev/null diff --git a/test/sourcing/Sourcing nvm.sh with --install and .nvmrc should install it b/test/sourcing/Sourcing nvm.sh with --install and .nvmrc should install it new file mode 100755 index 0000000..edc5614 --- /dev/null +++ b/test/sourcing/Sourcing nvm.sh with --install and .nvmrc should install it @@ -0,0 +1,28 @@ +#!/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 + +echo '0.10.2' > ../../.nvmrc || die 'creation of .nvmrc failed' + +. ../../nvm.sh --install +EXIT_CODE="$(echo $?)" + +echo 'sourcing complete.' + +nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: $(nvm ls)" + +[ "_$(nvm_rc_version | \grep -o -e 'with version .*$')" = "_with version <0.10.2>" ] || die "nvm_rc_version $(nvm_rc_version)" + +[ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE" + +NVM_LS_CURRENT="$(nvm ls current | \grep -o v0.10.2)" +[ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got '$NVM_LS_CURRENT' `nvm ls`" + diff --git a/test/sourcing/Sourcing nvm.sh with --install should install the default b/test/sourcing/Sourcing nvm.sh with --install should install the default new file mode 100755 index 0000000..e25ddf0 --- /dev/null +++ b/test/sourcing/Sourcing nvm.sh with --install should install the default @@ -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 + +echo '0.10.2' > ../../alias/default || die 'creation of default alias failed' + +echo 'sourcing nvm with --install...' + +. ../../nvm.sh --install +EXIT_CODE="$(echo $?)" + +echo 'sourcing complete.' + +nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: $(nvm ls)" + +[ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE" + +NVM_LS_CURRENT="$(nvm ls current | \grep -o v0.10.2)" +[ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got '$NVM_LS_CURRENT'" + +NVM_ALIAS_DEFAULT="$(nvm alias default)" +[ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.2 (-> v0.10.2)" ] \ + || die "'nvm alias default did not return 'default -> 0.10.2 (-> v0.10.2)', got '$NVM_ALIAS_DEFAULT'" +