[Refactor] nvm_rc_version: use fd 3 instead of exported env var for multiple return

This commit is contained in:
Jordan Harband
2026-03-12 15:32:17 -04:00
parent a27a8b7da8
commit ef1620361a
3 changed files with 22 additions and 35 deletions

View File

@@ -10,7 +10,7 @@ unset NVM_CD_FLAGS
if [ -n "$NODE_VERSION" ]; then if [ -n "$NODE_VERSION" ]; then
nvm use "$NODE_VERSION" > /dev/null || exit 127 nvm use "$NODE_VERSION" > /dev/null || exit 127
else else
nvm_rc_version > /dev/null && nvm_ensure_version_installed "$NVM_RC_VERSION"; { NVM_RC_VERSION="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1 && nvm_ensure_version_installed "$NVM_RC_VERSION";
if ! nvm use >/dev/null 2>&1; then if ! nvm use >/dev/null 2>&1; then
echo "No NODE_VERSION provided; no .nvmrc file found" >&2 echo "No NODE_VERSION provided; no .nvmrc file found" >&2
exit 127 exit 127

46
nvm.sh
View File

@@ -602,7 +602,6 @@ EOF
} }
nvm_rc_version() { nvm_rc_version() {
export NVM_RC_VERSION=''
local NVMRC_PATH local NVMRC_PATH
NVMRC_PATH="$(nvm_find_nvmrc)" NVMRC_PATH="$(nvm_find_nvmrc)"
if [ ! -e "${NVMRC_PATH}" ]; then if [ ! -e "${NVMRC_PATH}" ]; then
@@ -612,7 +611,7 @@ nvm_rc_version() {
return 1 return 1
fi fi
local NVM_RC_VERSION
if ! NVM_RC_VERSION="$(nvm_process_nvmrc "${NVMRC_PATH}")"; then if ! NVM_RC_VERSION="$(nvm_process_nvmrc "${NVMRC_PATH}")"; then
return 1 return 1
fi fi
@@ -626,6 +625,7 @@ nvm_rc_version() {
if [ "${NVM_SILENT:-0}" -ne 1 ]; then if [ "${NVM_SILENT:-0}" -ne 1 ]; then
nvm_echo "Found '${NVMRC_PATH}' with version <${NVM_RC_VERSION}>" nvm_echo "Found '${NVMRC_PATH}' with version <${NVM_RC_VERSION}>"
fi fi
nvm_echo "${NVM_RC_VERSION}" >&3
} }
nvm_clang_version() { nvm_clang_version() {
@@ -3560,14 +3560,11 @@ nvm() {
shift shift
fi fi
else else
nvm_rc_version { provided_version="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1
if [ $version_not_provided -eq 1 ] && [ -z "${NVM_RC_VERSION}" ]; then if [ $version_not_provided -eq 1 ] && [ -z "${provided_version}" ]; then
unset NVM_RC_VERSION
>&2 nvm --help >&2 nvm --help
return 127 return 127
fi fi
provided_version="${NVM_RC_VERSION}"
unset NVM_RC_VERSION
fi fi
elif [ $# -gt 0 ]; then elif [ $# -gt 0 ]; then
shift shift
@@ -3998,13 +3995,11 @@ nvm() {
if [ -n "${NVM_LTS-}" ]; then if [ -n "${NVM_LTS-}" ]; then
VERSION="$(nvm_match_version "lts/${NVM_LTS:-*}")" VERSION="$(nvm_match_version "lts/${NVM_LTS:-*}")"
elif [ -z "${PROVIDED_VERSION-}" ]; then elif [ -z "${PROVIDED_VERSION-}" ]; then
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version { PROVIDED_VERSION="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1
if [ -n "${NVM_RC_VERSION-}" ]; then if [ -n "${PROVIDED_VERSION}" ]; then
PROVIDED_VERSION="${NVM_RC_VERSION}"
IS_VERSION_FROM_NVMRC=1 IS_VERSION_FROM_NVMRC=1
VERSION="$(nvm_version "${PROVIDED_VERSION}")" VERSION="$(nvm_version "${PROVIDED_VERSION}")"
fi fi
unset NVM_RC_VERSION
if [ -z "${VERSION}" ]; then if [ -z "${VERSION}" ]; then
nvm_err 'Please see `nvm --help` or https://github.com/nvm-sh/nvm#nvmrc for more information.' nvm_err 'Please see `nvm --help` or https://github.com/nvm-sh/nvm#nvmrc for more information.'
return 127 return 127
@@ -4132,11 +4127,11 @@ nvm() {
done done
if [ $# -lt 1 ] && [ -z "${NVM_LTS-}" ]; then if [ $# -lt 1 ] && [ -z "${NVM_LTS-}" ]; then
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version && has_checked_nvmrc=1 local NVM_RC_VERSION
if [ -n "${NVM_RC_VERSION-}" ]; then { NVM_RC_VERSION="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1 && has_checked_nvmrc=1
VERSION="$(nvm_version "${NVM_RC_VERSION-}")" ||: if [ -n "${NVM_RC_VERSION}" ]; then
VERSION="$(nvm_version "${NVM_RC_VERSION}")" ||:
fi fi
unset NVM_RC_VERSION
if [ "${VERSION:-N/A}" = 'N/A' ]; then if [ "${VERSION:-N/A}" = 'N/A' ]; then
>&2 nvm --help >&2 nvm --help
return 127 return 127
@@ -4150,12 +4145,11 @@ nvm() {
if [ "_${VERSION:-N/A}" = '_N/A' ] && ! nvm_is_valid_version "${provided_version}"; then if [ "_${VERSION:-N/A}" = '_N/A' ] && ! nvm_is_valid_version "${provided_version}"; then
provided_version='' provided_version=''
if [ $has_checked_nvmrc -ne 1 ]; then if [ $has_checked_nvmrc -ne 1 ]; then
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version && has_checked_nvmrc=1 { NVM_RC_VERSION="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1 && has_checked_nvmrc=1
fi fi
provided_version="${NVM_RC_VERSION}" provided_version="${NVM_RC_VERSION}"
IS_VERSION_FROM_NVMRC=1 IS_VERSION_FROM_NVMRC=1
VERSION="$(nvm_version "${NVM_RC_VERSION}")" ||: VERSION="$(nvm_version "${NVM_RC_VERSION}")" ||:
unset NVM_RC_VERSION
else else
shift shift
fi fi
@@ -4216,9 +4210,7 @@ nvm() {
elif [ -n "${provided_version}" ]; then elif [ -n "${provided_version}" ]; then
VERSION="$(nvm_version "${provided_version}")" ||: VERSION="$(nvm_version "${provided_version}")" ||:
if [ "_${VERSION}" = '_N/A' ] && ! nvm_is_valid_version "${provided_version}"; then if [ "_${VERSION}" = '_N/A' ] && ! nvm_is_valid_version "${provided_version}"; then
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version && has_checked_nvmrc=1 { provided_version="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1 && has_checked_nvmrc=1
provided_version="${NVM_RC_VERSION}"
unset NVM_RC_VERSION
VERSION="$(nvm_version "${provided_version}")" ||: VERSION="$(nvm_version "${provided_version}")" ||:
else else
shift shift
@@ -4349,12 +4341,10 @@ nvm() {
shift shift
done done
if [ -z "${provided_version-}" ]; then if [ -z "${provided_version-}" ]; then
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version { provided_version="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1
if [ -n "${NVM_RC_VERSION}" ]; then if [ -n "${provided_version}" ]; then
provided_version="${NVM_RC_VERSION}" VERSION=$(nvm_version "${provided_version}") ||:
VERSION=$(nvm_version "${NVM_RC_VERSION}") ||:
fi fi
unset NVM_RC_VERSION
elif [ "${provided_version}" != 'system' ]; then elif [ "${provided_version}" != 'system' ]; then
VERSION="$(nvm_version "${provided_version}")" ||: VERSION="$(nvm_version "${provided_version}")" ||:
else else
@@ -4649,7 +4639,7 @@ nvm() {
nvm_process_nvmrc nvm_nvmrc_invalid_msg \ nvm_process_nvmrc nvm_nvmrc_invalid_msg \
nvm_write_nvmrc \ nvm_write_nvmrc \
>/dev/null 2>&1 >/dev/null 2>&1
unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \ unset NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \ NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \
NVM_COLORS INSTALLED_COLOR SYSTEM_COLOR \ NVM_COLORS INSTALLED_COLOR SYSTEM_COLOR \
CURRENT_COLOR NOT_INSTALLED_COLOR DEFAULT_COLOR LTS_COLOR \ CURRENT_COLOR NOT_INSTALLED_COLOR DEFAULT_COLOR LTS_COLOR \
@@ -4781,7 +4771,7 @@ nvm_auto() {
else else
return 0 return 0
fi fi
elif nvm_rc_version >/dev/null 2>&1; then elif nvm_rc_version 3>/dev/null >/dev/null 2>&1; then
nvm use --silent >/dev/null nvm use --silent >/dev/null
fi fi
else else
@@ -4793,7 +4783,7 @@ nvm_auto() {
VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)" VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)"
if [ -n "${VERSION}" ] && [ "_${VERSION}" != '_N/A' ] && nvm_is_valid_version "${VERSION}"; then if [ -n "${VERSION}" ] && [ "_${VERSION}" != '_N/A' ] && nvm_is_valid_version "${VERSION}"; then
nvm install "${VERSION}" >/dev/null nvm install "${VERSION}" >/dev/null
elif nvm_rc_version >/dev/null 2>&1; then elif nvm_rc_version 3>/dev/null >/dev/null 2>&1; then
nvm install >/dev/null nvm install >/dev/null
else else
return 0 return 0

View File

@@ -14,20 +14,17 @@ cleanup() {
# normal .nvmrc # normal .nvmrc
printf '0.999.0\n' > .nvmrc printf '0.999.0\n' > .nvmrc
nvm_rc_version { VERSION1="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1
VERSION1="${NVM_RC_VERSION}"
# .nvmrc with CR char # .nvmrc with CR char
printf '0.999.0\r\n' > .nvmrc printf '0.999.0\r\n' > .nvmrc
nvm_rc_version { VERSION2="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1
VERSION2="${NVM_RC_VERSION}"
[ "${VERSION1}" = "${VERSION2}" ] [ "${VERSION1}" = "${VERSION2}" ]
# .nvmrc without any newline char # .nvmrc without any newline char
printf '0.999.0' > .nvmrc printf '0.999.0' > .nvmrc
nvm_rc_version { VERSION3="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1
VERSION3="${NVM_RC_VERSION}"
[ "${VERSION1}" = "${VERSION3}" ] [ "${VERSION1}" = "${VERSION3}" ]