diff --git a/nvm.sh b/nvm.sh index 6af2eb1f..d3c08085 100755 --- a/nvm.sh +++ b/nvm.sh @@ -5389,9 +5389,15 @@ nvm() { fi fi + # a local, since bash 3.2 in POSIX mode keeps a prefix assignment on a function call after it returns + local NVM_INSTALL_NO_PROGRESS + NVM_INSTALL_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" + local NVM_NO_PROGRESS + NVM_NO_PROGRESS="${NVM_INSTALL_NO_PROGRESS}" + # skip binary install if "nobinary" option specified. if [ $nobinary -ne 1 ] && nvm_binary_available "${VERSION}"; then - NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" NVM_OFFLINE="${NVM_OFFLINE}" nvm_install_binary "${FLAVOR}" std "${VERSION}" "${nosource}" + NVM_OFFLINE="${NVM_OFFLINE}" nvm_install_binary "${FLAVOR}" std "${VERSION}" "${nosource}" EXIT_CODE=$? else EXIT_CODE=-1 @@ -5411,7 +5417,7 @@ nvm() { nvm_err 'Installing from source on non-WSL Windows is not supported' EXIT_CODE=87 else - NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" NVM_OFFLINE="${NVM_OFFLINE}" nvm_install_source "${FLAVOR}" std "${VERSION}" "${NVM_MAKE_JOBS}" "${ADDITIONAL_PARAMETERS}" + NVM_OFFLINE="${NVM_OFFLINE}" nvm_install_source "${FLAVOR}" std "${VERSION}" "${NVM_MAKE_JOBS}" "${ADDITIONAL_PARAMETERS}" EXIT_CODE=$? fi fi diff --git a/test/fast/Unit tests/nvm install does not leave NVM_NO_PROGRESS set b/test/fast/Unit tests/nvm install does not leave NVM_NO_PROGRESS set new file mode 100755 index 00000000..42d20b61 --- /dev/null +++ b/test/fast/Unit tests/nvm install does not leave NVM_NO_PROGRESS set @@ -0,0 +1,56 @@ +#!/bin/sh + +cleanup() { + [ -n "${NVM_DIR-}" ] && [ -d "${NVM_DIR}" ] && rm -rf "${NVM_DIR}" + unset -f die cleanup reset nvm_remote_version nvm_has_executable nvm_binary_available \ + nvm_install_binary nvm_install_npm_if_needed nvm_install_default_packages + unset NVM_DIR NVM_NO_PROGRESS version LOG +} + +die() { echo "$@" ; cleanup ; exit 1; } + +: nvm.sh +\. ../../../nvm.sh + +\. ../../common.sh + +unset npm_config_prefix NPM_CONFIG_PREFIX NVM_NO_PROGRESS + +NVM_DIR="$(mktemp -d)" +[ -n "${NVM_DIR}" ] || die 'unable to create temp NVM_DIR' +version='v20.0.0' +LOG="${NVM_DIR}/log" + +# Stay offline, and record the progress setting each download would see. +nvm_remote_version() { nvm_echo "${version}"; } +nvm_has_executable() { return 0; } +nvm_binary_available() { return 0; } +nvm_install_binary() { + nvm_echo "${NVM_NO_PROGRESS-}" > "${LOG}" + make_fake_node "${version}" +} +nvm_install_npm_if_needed() { return 0; } +nvm_install_default_packages() { :; } + +reset() { + rm -rf "${NVM_DIR:?}/versions" "${NVM_DIR}/alias" "${LOG}" +} + +reset +nvm install "${version}" > /dev/null 2>&1 || die "\`nvm install ${version}\` failed" +[ "${NVM_NO_PROGRESS-unset}" = 'unset' ] || die "\`nvm install\` left NVM_NO_PROGRESS set to >${NVM_NO_PROGRESS}<" + +# so a later `--no-progress` still reaches the download +reset +nvm install --no-progress "${version}" > /dev/null 2>&1 || die "\`nvm install --no-progress ${version}\` failed" +[ "$(cat "${LOG}")" = '1' ] || die "\`--no-progress\` after an earlier install should reach the download; it saw >$(cat "${LOG}")<" + +# an exported NVM_NO_PROGRESS still applies +reset +NVM_NO_PROGRESS=1 +export NVM_NO_PROGRESS +nvm install "${version}" > /dev/null 2>&1 || die "\`nvm install ${version}\` with NVM_NO_PROGRESS=1 failed" +[ "$(cat "${LOG}")" = '1' ] || die "an exported NVM_NO_PROGRESS=1 should reach the download; it saw >$(cat "${LOG}")<" +[ "${NVM_NO_PROGRESS}" = '1' ] || die "\`nvm install\` changed the exported NVM_NO_PROGRESS to >${NVM_NO_PROGRESS}<" + +cleanup