diff --git a/nvm.sh b/nvm.sh index d0259fcb..7ca5d6ec 100755 --- a/nvm.sh +++ b/nvm.sh @@ -1812,9 +1812,7 @@ nvm_alias() { nvm_err 'An alias is required.' return 1 fi - if ! ALIAS="$(nvm_normalize_lts "${ALIAS}")"; then - return $? - fi + ALIAS="$(nvm_normalize_lts "${ALIAS}")" || return $? if [ -z "${ALIAS}" ]; then return 2 @@ -2336,9 +2334,7 @@ $VERSION_LIST EOF if [ -n "${LTS-}" ]; then - if ! LTS="$(nvm_normalize_lts "lts/${LTS}")"; then - return $? - fi + LTS="$(nvm_normalize_lts "lts/${LTS}")" || return $? LTS="${LTS#lts/}" fi @@ -5102,8 +5098,8 @@ nvm() { fi return 3 # an exact, already-installed version needs no further resolution or checks - elif [ "${NVM_USE_EXACT_INSTALLED}" -ne 1 ] && ! nvm_ensure_version_installed "${VERSION}" "${IS_VERSION_FROM_NVMRC}"; then - return $? + elif [ "${NVM_USE_EXACT_INSTALLED}" -ne 1 ]; then + nvm_ensure_version_installed "${VERSION}" "${IS_VERSION_FROM_NVMRC}" || return $? fi local NVM_VERSION_DIR diff --git a/test/fast/Unit tests/failed checks propagate their exit codes b/test/fast/Unit tests/failed checks propagate their exit codes new file mode 100755 index 00000000..3a370bf5 --- /dev/null +++ b/test/fast/Unit tests/failed checks propagate their exit codes @@ -0,0 +1,43 @@ +#!/bin/sh + +ORIG_NVM_DIR="${NVM_DIR}" +TMP_DIR='' + +cleanup () { + case "${TMP_DIR}" in + /*) rm -rf "${TMP_DIR}" ;; + esac + NVM_DIR="${ORIG_NVM_DIR}" + export NVM_DIR + unset -f nvm_download +} + +die () { echo "$@" ; cleanup ; exit 1; } + +: nvm.sh +\. ../../../nvm.sh + +TMP_DIR="$(mktemp -d)" +NVM_DIR="${TMP_DIR}/nvm" +export NVM_DIR +mkdir -p "${NVM_DIR}/alias/lts" || die 'could not create alias dir' + +nvm_alias lts/FOO >/dev/null 2>&1 +EXIT_CODE=$? +[ "${EXIT_CODE}" = 3 ] || die "nvm_alias lts/FOO should exit 3, like nvm_normalize_lts; got ${EXIT_CODE}" + +nvm_download() { + printf 'version\tdate\tfiles\tnpm\tv8\tuv\tzlib\topenssl\tmodules\tlts\tsecurity\n' + printf 'v22.11.0\t2024-10-29\tsrc\t-\t-\t-\t-\t-\t-\tJod\t-\n' +} +(NVM_LTS=FOO nvm_ls_remote_index_tab node std '') >/dev/null 2>&1 +EXIT_CODE=$? +[ "${EXIT_CODE}" = 3 ] || die "nvm_ls_remote_index_tab with an uppercase LTS name should exit 3, like nvm_normalize_lts; got ${EXIT_CODE}" + +# a version directory without an executable node is not installed +mkdir -p "${NVM_DIR}/versions/node/v20.0.0/bin" || die 'could not create a broken install' +nvm use 20 >/dev/null 2>&1 +EXIT_CODE=$? +[ "${EXIT_CODE}" != 0 ] || die 'nvm use 20 should fail when v20.0.0 is not actually installed' + +cleanup