diff --git a/nvm.sh b/nvm.sh index 505c7ff..6a9b7f4 100644 --- a/nvm.sh +++ b/nvm.sh @@ -2231,7 +2231,7 @@ nvm_die_on_prefix() { local NVM_OS NVM_OS="$(nvm_get_os)" NVM_NPM_PREFIX="$(npm config --loglevel=warn get prefix)" - if [ "${NVM_VERSION_DIR}" != "${NVM_NPM_PREFIX}" ] && ! (nvm_tree_contains_path "${NVM_VERSION_DIR}" "${NVM_NPM_PREFIX}" >/dev/null 2>&1); then + if [ ! "${NVM_VERSION_DIR}" -ef "${NVM_NPM_PREFIX}" ] && ! (nvm_tree_contains_path "${NVM_VERSION_DIR}" "${NVM_NPM_PREFIX}" >/dev/null 2>&1); then if [ "_${NVM_DELETE_PREFIX}" = "_1" ]; then npm config --loglevel=warn delete prefix else diff --git a/test/fast/Unit tests/nvm_die_on_prefix b/test/fast/Unit tests/nvm_die_on_prefix index c9b99e1..7254e47 100755 --- a/test/fast/Unit tests/nvm_die_on_prefix +++ b/test/fast/Unit tests/nvm_die_on_prefix @@ -1,11 +1,22 @@ #!/bin/sh +TEST_PWD=$(pwd) +TEST_DIR="$TEST_PWD/nvm_die_on_prefix_tmp" + cleanup () { + rm -rf "$TEST_DIR" alias nvm_has='\nvm_has' alias npm='\npm' unset -f nvm_has npm } -die () { echo "$@" ; exit 1; } + +die () { + echo "$@"; + cleanup; + exit 1; +} + +[ ! -e "$TEST_DIR" ] && mkdir "$TEST_DIR" \. ../../../nvm.sh @@ -40,9 +51,24 @@ npm() { echo "$(nvm_version_dir new)/good prefix" fi } + OUTPUT="$(nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" 2>&1)" [ -z "$OUTPUT" ] || die "'nvm_die_on_prefix' was not a noop when prefix is good; got '$OUTPUT'" +mkdir -p "$(nvm_version_dir new)" +ln -s "$(nvm_version_dir new)" "$TEST_DIR/node" + +npm() { + local args + args="$@" + if [ "_$args" = "_config --loglevel=warn get prefix" ]; then + echo "$TEST_DIR/node" + fi +} + +OUTPUT="$(nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" 2>&1)" +[ -z "$OUTPUT" ] || die "'nvm_die_on_prefix' was not a noop when directory is equivalent; got '$OUTPUT'" + OUTPUT="$(PREFIX=bar nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" 2>&1)" EXPECTED_OUTPUT='nvm is not compatible with the "PREFIX" environment variable: currently set to "bar" Run `unset PREFIX` to unset it.'