[New] select versions by category: alpha, lts, non-lts, iojs; exclude alphas by default
Node 27 and later publish Alpha prereleases, like `v27.0.0-alpha.1.0.0`, in the main `index.tab`, so `nvm install node` or `nvm install 27` would otherwise pick one. Every version is in exactly one category: `alpha` and `lts` or `non-lts` (by index.tab's LTS column) on the node mirror, and `iojs` on the io.js mirror. Commands select from every category but `alpha`, unless `$NVM_ONLY` lists others, and every command that selects or lists versions takes `--only=<categories>` to override both; an exact alpha needs `alpha` selected, like any other. An LTS selection, like `--lts` or an `lts/` version, can't combine with an `--only=` that excludes `lts`. Telling installed `lts` and `non-lts` versions apart uses the recorded LTS status, and fails rather than guess without it. `nvm alias` also stores `--only=`, so `nvm alias default --only=alpha node` makes the latest installed alpha the default, including in a new shell.
This commit is contained in:
13 files changed
+1213
-51
No files matched your search
Executable
+75
@@ -0,0 +1,75 @@
|
||||
#!/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
|
||||
}
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
NVM_DIR="${TMP_DIR}/nvm"
|
||||
export NVM_DIR
|
||||
mkdir -p "${NVM_DIR}/alias" || die 'could not create alias dir'
|
||||
unset NVM_ONLY
|
||||
|
||||
for VERSION in v24.11.0 v26.12.1 v27.0.0-alpha.1.2.0 v27.0.0-alpha.1.10.2; do
|
||||
mkdir -p "${NVM_DIR}/versions/node/${VERSION}/bin" || die "fake node ${VERSION} could not be made"
|
||||
make_echo "${NVM_DIR}/versions/node/${VERSION}/bin/node" "${VERSION}"
|
||||
done
|
||||
printf 'v26.12.1\t2026-10-21\tsrc\t-\t-\t-\t-\t-\t-\t-\t-\nv24.11.0\t2025-10-28\tsrc\t-\t-\t-\t-\t-\t-\tKrypton\t-\n' | nvm_record_lts_status || die 'could not record LTS status'
|
||||
|
||||
nvm alias default --only=alpha node >/dev/null 2>&1 || die 'nvm alias default --only=alpha node failed'
|
||||
[ "_$(cat "$(nvm_alias_path)/default")" = '_--only=alpha node' ] || die "the alias file should store >--only=alpha node<; got >$(cat "$(nvm_alias_path)/default")<"
|
||||
[ "_$(nvm version default)" = '_v27.0.0-alpha.1.10.2' ] || die "default should be the latest installed alpha; got >$(nvm version default)<"
|
||||
[ "_$(nvm version node)" = '_v26.12.1' ] || die "node itself should still exclude alphas; got >$(nvm version node)<"
|
||||
|
||||
nvm use --silent default || die 'nvm use default should use the alpha that default selects'
|
||||
[ "_$(nvm current)" = '_v27.0.0-alpha.1.10.2' ] || die "nvm current should be the alpha; got >$(nvm current)<"
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
|
||||
nvm_auto use || die 'nvm_auto use should use the alpha that default selects'
|
||||
[ "_$(nvm current)" = '_v27.0.0-alpha.1.10.2' ] || die "a new shell should start with the alpha; got >$(nvm current)<"
|
||||
nvm_auto use || die 'nvm_auto use should keep using the current alpha'
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
|
||||
NVM_ONLY='lts,non-lts'
|
||||
nvm use --silent --only=alpha v27.0.0-alpha.1.2.0 || die 'nvm use --only=alpha should use an alpha'
|
||||
[ "_${NVM_ONLY}" = '_lts,non-lts' ] || die "--only should not change NVM_ONLY; got >${NVM_ONLY}<"
|
||||
[ -z "${NVM_ONLY_SELECTED-}" ] || die "a command's selection should not outlive it; got >${NVM_ONLY_SELECTED}<"
|
||||
unset NVM_ONLY
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
|
||||
nvm alias both --only=lts,alpha --lts node >/dev/null 2>&1 || die 'nvm alias both --only=lts,alpha --lts node failed'
|
||||
[ "_$(cat "$(nvm_alias_path)/both")" = '_--only=alpha,lts --lts node' ] || die "the alias file should store the normalized flags; got >$(cat "$(nvm_alias_path)/both")<"
|
||||
[ "_$(nvm version both)" = '_v24.11.0' ] || die "both should be the latest installed LTS version; got >$(nvm version both)<"
|
||||
|
||||
try_err nvm alias bad --only=alpha --lts node
|
||||
[ "_${CAPTURED_EXIT_CODE}" = '_55' ] || die "--lts with an --only that excludes LTS should exit 55; got ${CAPTURED_EXIT_CODE}"
|
||||
[ ! -e "$(nvm_alias_path)/bad" ] || die 'a conflicting alias should not be written'
|
||||
|
||||
# a new shell survives `set -e` with a default that resolves to nothing
|
||||
nvm_make_alias default v99.0.0 || die 'could not alias default'
|
||||
(set -e; nvm_auto use 2>/dev/null; true) || die 'nvm_auto use should not fail with a default that resolves to nothing'
|
||||
|
||||
# and explains a default whose flags need LTS status that isn't recorded yet
|
||||
rm -f "$(nvm_lts_status_path)"
|
||||
nvm_make_alias default '--only=lts node' || die 'could not alias default'
|
||||
try_err nvm_auto use
|
||||
[ "_${CAPTURED_STDERR}" = '_The default alias needs the LTS status of installed versions, which is not recorded yet; run `nvm ls-remote` to record it.' ] || die "nvm_auto use should explain the missing LTS status; got >${CAPTURED_STDERR}<"
|
||||
|
||||
echo '--only=beta node' > "$(nvm_alias_path)/invalid"
|
||||
[ "_$(nvm version invalid 2>/dev/null)" = '_N/A' ] || die "an alias with an invalid --only should not resolve; got >$(nvm version invalid 2>/dev/null)<"
|
||||
|
||||
cleanup
|
||||
@@ -0,0 +1,63 @@
|
||||
#!/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
|
||||
}
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
NVM_DIR="${TMP_DIR}/nvm"
|
||||
export NVM_DIR
|
||||
mkdir -p "${NVM_DIR}" || die 'could not create NVM_DIR'
|
||||
unset NVM_ONLY
|
||||
|
||||
ALPHA='v27.0.0-alpha.1.0.0'
|
||||
ALPHA_BIN="${NVM_DIR}/versions/node/${ALPHA}/bin"
|
||||
mkdir -p "${ALPHA_BIN}" || die 'fake alpha could not be made'
|
||||
make_echo "${ALPHA_BIN}/node" "${ALPHA}"
|
||||
make_fake_node v20.1.1 || die 'fake node v20.1.1 could not be made'
|
||||
printf 'v20.1.1\t2023-01-01\tsrc\t-\t-\t-\t-\t-\t-\tIron\t-\n' | nvm_record_lts_status || die 'could not record LTS status'
|
||||
|
||||
HINT='Include its category with `--only=<categories>`, or in `$NVM_ONLY`.'
|
||||
for COMMAND in use which; do
|
||||
for PAIR in "${ALPHA}:${ALPHA}" "27:27 -> ${ALPHA}"; do
|
||||
try_err nvm "${COMMAND}" "${PAIR%%:*}"
|
||||
[ "_${CAPTURED_EXIT_CODE}" != '_0' ] || die "nvm ${COMMAND} ${PAIR%%:*} should fail when alphas are excluded"
|
||||
EXPECTED="N/A: version \"${PAIR#*:}\" is installed, but excluded by the selected version categories (lts,non-lts,iojs)."
|
||||
[ "_$(echo "${CAPTURED_STDERR}" | strip_colors | head -1)" = "_${EXPECTED}" ] || die "nvm ${COMMAND} ${PAIR%%:*} printed >${CAPTURED_STDERR}<, expected >${EXPECTED}<"
|
||||
case "${CAPTURED_STDERR}" in
|
||||
*"${HINT}"*) ;;
|
||||
*) die "nvm ${COMMAND} ${PAIR%%:*} did not print >${HINT}<; got >${CAPTURED_STDERR}<" ;;
|
||||
esac
|
||||
done
|
||||
done
|
||||
|
||||
try_err nvm which --only=lts "${ALPHA}"
|
||||
EXPECTED="N/A: version \"${ALPHA}\" is installed, but excluded by the selected version categories (lts)."
|
||||
[ "_$(echo "${CAPTURED_STDERR}" | strip_colors | head -1)" = "_${EXPECTED}" ] || die "nvm which --only=lts ${ALPHA} printed >${CAPTURED_STDERR}<, expected >${EXPECTED}<"
|
||||
|
||||
[ "_$(nvm which --only=alpha "${ALPHA}")" = "_${ALPHA_BIN}/node" ] || die "nvm which --only=alpha ${ALPHA} should print its node path"
|
||||
[ "_$(NVM_ONLY=alpha nvm which 27)" = "_${ALPHA_BIN}/node" ] || die 'NVM_ONLY=alpha nvm which 27 should print the alpha node path'
|
||||
|
||||
nvm use --silent --only=alpha "${ALPHA}" || die "nvm use --only=alpha ${ALPHA} failed"
|
||||
case ":${PATH}:" in
|
||||
*":${ALPHA_BIN}:"*) ;;
|
||||
*) die "nvm use --only=alpha did not put ${ALPHA_BIN} on PATH; got ${PATH}" ;;
|
||||
esac
|
||||
[ "_$(nvm current)" = "_${ALPHA}" ] || die "nvm current should be ${ALPHA}; got $(nvm current)"
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
|
||||
cleanup
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
#!/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 NVM_ONLY
|
||||
unset -f nvm_download
|
||||
}
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
NVM_DIR="${TMP_DIR}/nvm"
|
||||
export NVM_DIR
|
||||
mkdir -p "${NVM_DIR}" || die 'could not create NVM_DIR'
|
||||
unset NVM_ONLY
|
||||
|
||||
DOWNLOADS="${TMP_DIR}/downloads"
|
||||
nvm_download () {
|
||||
echo "$*" >> "${DOWNLOADS}"
|
||||
return 1
|
||||
}
|
||||
downloads () {
|
||||
if [ -f "${DOWNLOADS}" ]; then
|
||||
wc -l < "${DOWNLOADS}" | tr -d ' '
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
}
|
||||
|
||||
for VERSION in v21.0.0 v22.11.0 v27.0.0-alpha.1.0.0; do
|
||||
mkdir -p "${NVM_DIR}/versions/node/${VERSION}/bin" || die "fake node ${VERSION} could not be made"
|
||||
make_echo "${NVM_DIR}/versions/node/${VERSION}/bin/node" "${VERSION}"
|
||||
done
|
||||
make_fake_iojs v3.3.1 || die 'fake iojs could not be made'
|
||||
|
||||
# without recorded LTS status, selecting only one of lts and non-lts fails rather than guess
|
||||
try_err nvm ls --no-colors --only=lts
|
||||
[ "_${CAPTURED_EXIT_CODE}" = '_3' ] || die "nvm ls --only=lts without recorded LTS status should exit 3; got ${CAPTURED_EXIT_CODE}"
|
||||
[ "_${CAPTURED_STDERR}" = '_The LTS status of installed versions is not recorded yet; run `nvm ls-remote` to record it.' ] || die "got >${CAPTURED_STDERR}<"
|
||||
[ "_$(downloads)" = '_1' ] || die "missing LTS status should be downloaded once; got $(downloads)"
|
||||
|
||||
# so do internal lookups, rather than treat every version as non-LTS
|
||||
OUTPUT="$(printf 'v21.0.0\nv22.11.0\n' | NVM_ONLY=non-lts nvm_filter_installed_versions 2>/dev/null)"
|
||||
[ -z "${OUTPUT}" ] || die "nvm_filter_installed_versions without recorded LTS status should print nothing; got >${OUTPUT}<"
|
||||
[ "_$(NVM_ONLY=non-lts nvm_version 21 2>/dev/null)" = '_N/A' ] || die 'NVM_ONLY=non-lts nvm_version 21 without recorded LTS status should be N/A'
|
||||
|
||||
# selecting both, or neither, needs no LTS status
|
||||
[ "_$(nvm ls --no-colors --no-alias --only=lts,non-lts | nvm_grep -v system | tr -d ' *' | tr '\n' ' ')" = '_v21.0.0 v22.11.0 ' ] || die 'nvm ls --only=lts,non-lts should list both'
|
||||
[ "_$(nvm ls --no-colors --no-alias --only=alpha,iojs | nvm_grep -v system | tr -d ' *' | tr '\n' ' ')" = '_iojs-v3.3.1 v27.0.0-alpha.1.0.0 ' ] || die 'nvm ls --only=alpha,iojs should list the alpha and io.js'
|
||||
[ "_$(downloads)" = '_1' ] || die "selecting both or neither of lts and non-lts should not download; got $(downloads)"
|
||||
|
||||
printf 'v22.11.0\t2024-10-29\tsrc\t-\t-\t-\t-\t-\t-\tJod\t-\nv21.0.0\t2023-10-17\tsrc\t-\t-\t-\t-\t-\t-\t-\t-\n' | nvm_record_lts_status || die 'could not record LTS status'
|
||||
|
||||
INPUT="$(printf 'system\nv21.0.0\nv22.11.0\nv23.0.0\nv27.0.0-alpha.1.0.0\niojs-v3.3.1\nN/A')"
|
||||
for PAIR in 'lts:system v22.11.0 N/A ' 'non-lts:system v21.0.0 v23.0.0 N/A ' 'alpha:system v27.0.0-alpha.1.0.0 N/A ' 'iojs:system iojs-v3.3.1 N/A ' \
|
||||
'lts,non-lts:system v21.0.0 v22.11.0 v23.0.0 N/A ' 'alpha,lts,non-lts,iojs:system v21.0.0 v22.11.0 v23.0.0 v27.0.0-alpha.1.0.0 iojs-v3.3.1 N/A '; do
|
||||
OUTPUT="$(echo "${INPUT}" | NVM_ONLY="${PAIR%%:*}" nvm_filter_installed_versions | tr '\n' ' ')"
|
||||
[ "_${OUTPUT}" = "_${PAIR#*:}" ] || die "NVM_ONLY=${PAIR%%:*} nvm_filter_installed_versions printed >${OUTPUT}<, expected >${PAIR#*:}<"
|
||||
done
|
||||
|
||||
[ "_$(nvm ls --no-colors --no-alias --only=lts | nvm_grep -v system | tr -d ' *')" = '_v22.11.0' ] || die 'nvm ls --only=lts should list the recorded LTS version'
|
||||
[ "_$(nvm version --only=non-lts 21)" = '_v21.0.0' ] || die 'nvm version --only=non-lts 21 should be v21.0.0'
|
||||
[ "_$(nvm version --only=lts 21)" = '_N/A' ] || die 'nvm version --only=lts 21 should be N/A'
|
||||
[ "_$(downloads)" = '_1' ] || die "recorded LTS status should not be downloaded again; got $(downloads)"
|
||||
|
||||
cleanup
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
for VERSION in 'v27.0.0-alpha.0.0.0' 'v27.0.0-alpha.1.10.2' '27.0.0-alpha.1.2.0' 'v28.1.2-alpha.10.20.30'; do
|
||||
nvm_is_alpha_version "${VERSION}" || die "${VERSION} should be an alpha version"
|
||||
done
|
||||
|
||||
for VERSION in '' 'v27.0.0' 'v27.0.0-alpha.1.0' 'v27.0.0-alpha.1' 'v27.0.0-alpha.1.0.0.0' 'v27.0.0-alpha.1..0' 'v27.0.0-alpha.1.0.0-' \
|
||||
'v27.0-alpha.1.0.0' 'v27.0.0-alpha.' 'v27.0.0-alpha.a.b.c' 'v27.0.0-beta.1.0.0' 'iojs-v3.0.0' 'iojs-v27.0.0-alpha.1.0.0' \
|
||||
'v11.0.0-nightly201810011be804d625' 'v24.0.0-rc.1' 'node' 'lts/*' 'system'; do
|
||||
! nvm_is_alpha_version "${VERSION}" || die "${VERSION} should not be an alpha version"
|
||||
done
|
||||
Executable
+56
@@ -0,0 +1,56 @@
|
||||
#!/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
|
||||
}
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
NVM_DIR="${TMP_DIR}/nvm"
|
||||
export NVM_DIR
|
||||
mkdir -p "${NVM_DIR}" || die 'could not create NVM_DIR'
|
||||
unset NVM_ONLY
|
||||
|
||||
for VERSION in v26.12.1 v27.0.0 v27.0.0-alpha.1.1.1 v27.0.0-alpha.1.1.10 v27.0.0-alpha.1.2.0 v27.0.0-alpha.10.0.0 v27.0.0-alpha.20.0.10; do
|
||||
mkdir -p "${NVM_DIR}/versions/node/${VERSION}/bin" || die "fake node ${VERSION} could not be made"
|
||||
make_echo "${NVM_DIR}/versions/node/${VERSION}/bin/node" "${VERSION}"
|
||||
nvm_is_version_installed "${VERSION}" || die "fake node ${VERSION} is not installed"
|
||||
done
|
||||
|
||||
check () {
|
||||
EXPECTED="$1"
|
||||
shift
|
||||
OUTPUT="$(nvm_ls "$@" | nvm_grep -v '^system' | tr '\n' ' ')"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED}" ] || die "nvm_ls $* (NVM_ONLY=${NVM_ONLY-}) printed >${OUTPUT}<, expected >${EXPECTED}<"
|
||||
}
|
||||
|
||||
check 'v26.12.1 v27.0.0 '
|
||||
check 'v27.0.0 ' 27
|
||||
check 'N/A ' v27.0.0-alpha.1.1.1
|
||||
|
||||
NVM_ONLY=alpha
|
||||
check 'v27.0.0-alpha.1.1.1 v27.0.0-alpha.1.1.10 v27.0.0-alpha.1.2.0 v27.0.0-alpha.10.0.0 v27.0.0-alpha.20.0.10 '
|
||||
check 'v27.0.0-alpha.1.1.1 ' v27.0.0-alpha.1.1.1
|
||||
check 'v27.0.0-alpha.1.1.1 v27.0.0-alpha.1.1.10 ' v27.0.0-alpha.1.1
|
||||
check 'v27.0.0-alpha.1.1.1 v27.0.0-alpha.1.1.10 v27.0.0-alpha.1.2.0 ' v27.0.0-alpha.1
|
||||
check 'v27.0.0-alpha.10.0.0 ' v27.0.0-alpha.10
|
||||
check 'N/A ' v27.0.0-alpha.20.0.1
|
||||
|
||||
NVM_ONLY='alpha,lts,non-lts,iojs'
|
||||
check 'v26.12.1 v27.0.0-alpha.1.1.1 v27.0.0-alpha.1.1.10 v27.0.0-alpha.1.2.0 v27.0.0-alpha.10.0.0 v27.0.0-alpha.20.0.10 v27.0.0 '
|
||||
unset NVM_ONLY
|
||||
|
||||
cleanup
|
||||
Executable
+43
@@ -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 NVM_ONLY
|
||||
}
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
NVM_DIR="${TMP_DIR}/nvm"
|
||||
export NVM_DIR
|
||||
unset NVM_ONLY
|
||||
|
||||
CACHE_DIR="$(nvm_cache_dir)"
|
||||
SUFFIX="$(nvm_get_os)-$(nvm_get_arch)"
|
||||
mkdir -p "${CACHE_DIR}/bin/node-v27.0.0-alpha.1.2.0-${SUFFIX}" "${CACHE_DIR}/src/node-v27.0.0-alpha.1.10.0" "${CACHE_DIR}/bin/node-v26.12.1-${SUFFIX}" \
|
||||
|| die 'could not create cached artifacts'
|
||||
|
||||
OUTPUT="$(nvm_ls_cached | tr '\n' ' ')"
|
||||
[ "_${OUTPUT}" = '_v26.12.1 ' ] || die "cached alphas should be excluded by default; got >${OUTPUT}<"
|
||||
|
||||
NVM_ONLY=alpha
|
||||
OUTPUT="$(nvm_ls_cached | tr '\n' ' ')"
|
||||
[ "_${OUTPUT}" = '_v27.0.0-alpha.1.2.0 v27.0.0-alpha.1.10.0 ' ] || die "NVM_ONLY=alpha should list cached alphas, in order; got >${OUTPUT}<"
|
||||
OUTPUT="$(nvm_ls_cached 27.0.0-alpha.1.2 | tr '\n' ' ')"
|
||||
[ "_${OUTPUT}" = '_v27.0.0-alpha.1.2.0 ' ] || die "a partial alpha should match only at a dot; got >${OUTPUT}<"
|
||||
|
||||
NVM_ONLY='alpha,lts,non-lts,iojs'
|
||||
OUTPUT="$(nvm_ls_cached v27.0.0)"
|
||||
[ -z "${OUTPUT}" ] || die "v27.0.0 is not one of its alphas; got >${OUTPUT}<"
|
||||
|
||||
cleanup
|
||||
Executable
+92
@@ -0,0 +1,92 @@
|
||||
#!/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 index_row
|
||||
}
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
NVM_DIR="${TMP_DIR}/nvm"
|
||||
export NVM_DIR
|
||||
mkdir -p "${NVM_DIR}" || die 'could not create NVM_DIR'
|
||||
unset NVM_ONLY NVM_LTS
|
||||
|
||||
index_row () {
|
||||
printf '%s\t2026-01-01\tsrc\t-\t-\t-\t-\t-\t-\t%s\t-\n' "$1" "${2:--}"
|
||||
}
|
||||
|
||||
nvm_download () {
|
||||
case "$*" in
|
||||
*iojs*index.tab*)
|
||||
printf 'version\tdate\tfiles\tnpm\tv8\tuv\tzlib\topenssl\tmodules\n'
|
||||
printf 'v3.3.1\t2015-09-15\tsrc\t2.14.3\t4.4.63.30\t1.7.4\t1.2.8\t1.0.2d\t45\n'
|
||||
printf 'v1.0.0\t2015-01-14\tsrc\t1.1.0\t3.31.74.1\t1.2.0\t1.2.8\t1.0.1k\t42\n'
|
||||
;;
|
||||
*index.tab*)
|
||||
printf 'version\tdate\tfiles\tnpm\tv8\tuv\tzlib\topenssl\tmodules\tlts\tsecurity\n'
|
||||
index_row v27.0.0-alpha.1.10.2
|
||||
index_row v27.0.0-alpha.1.2.0
|
||||
index_row v27.0.0-alpha.0.0.0
|
||||
index_row v26.12.10
|
||||
index_row v26.12.2
|
||||
index_row v24.11.0 Krypton
|
||||
index_row v22.11.0 Jod
|
||||
index_row v21.0.0
|
||||
;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
OUTPUT="$(nvm_ls_remote | awk '{ print $1 }')"
|
||||
EXPECTED='v21.0.0
|
||||
v22.11.0
|
||||
v24.11.0
|
||||
v26.12.2
|
||||
v26.12.10'
|
||||
[ "_${OUTPUT}" = "_${EXPECTED}" ] || die "nvm_ls_remote should exclude alphas by default; got >${OUTPUT}<"
|
||||
|
||||
for PAIR in 'node:v26.12.10' '27:N/A' 'v27.0.0-alpha.1.2.0:N/A'; do
|
||||
OUTPUT="$(nvm_remote_version "${PAIR%%:*}")"
|
||||
[ "_${OUTPUT}" = "_${PAIR#*:}" ] || die "nvm_remote_version ${PAIR%%:*} printed >${OUTPUT}<, expected >${PAIR#*:}<"
|
||||
done
|
||||
|
||||
OUTPUT="$(NVM_ONLY=alpha nvm_ls_remote | awk '{ print $1 }')"
|
||||
EXPECTED='v27.0.0-alpha.0.0.0
|
||||
v27.0.0-alpha.1.2.0
|
||||
v27.0.0-alpha.1.10.2'
|
||||
[ "_${OUTPUT}" = "_${EXPECTED}" ] || die "NVM_ONLY=alpha nvm_ls_remote should list only alphas, in order; got >${OUTPUT}<"
|
||||
|
||||
for PAIR in '27:v27.0.0-alpha.1.10.2' 'v27.0.0-alpha.1.2.0:v27.0.0-alpha.1.2.0' 'node:v27.0.0-alpha.1.10.2'; do
|
||||
OUTPUT="$(NVM_ONLY=alpha nvm_remote_version "${PAIR%%:*}")"
|
||||
[ "_${OUTPUT}" = "_${PAIR#*:}" ] || die "NVM_ONLY=alpha nvm_remote_version ${PAIR%%:*} printed >${OUTPUT}<, expected >${PAIR#*:}<"
|
||||
done
|
||||
|
||||
ALL="$(NVM_ONLY='alpha,lts,non-lts,iojs' nvm_remote_versions | awk '{ print $1 }' | sort)"
|
||||
[ "_$(echo "${ALL}" | wc -l | tr -d ' ')" = '_10' ] || die "every category should list all 10 versions; got >${ALL}<"
|
||||
UNION=''
|
||||
for CATEGORY in alpha lts non-lts iojs; do
|
||||
LIST="$(NVM_ONLY="${CATEGORY}" nvm_remote_versions | awk '{ print $1 }')"
|
||||
[ -n "${LIST}" ] || die "category ${CATEGORY} listed nothing"
|
||||
UNION="${UNION:+${UNION}
|
||||
}${LIST}"
|
||||
done
|
||||
[ "_$(echo "${UNION}" | sort)" = "_${ALL}" ] || die "categories should partition the versions; got >${UNION}<, expected >${ALL}<"
|
||||
|
||||
[ "_$(NVM_ONLY=lts nvm_remote_versions | awk '{ print $1 }' | tr '\n' ' ')" = '_v22.11.0 v24.11.0 ' ] || die 'NVM_ONLY=lts listed the wrong versions'
|
||||
[ "_$(NVM_ONLY=iojs nvm_remote_versions | awk '{ print $1 }' | tr '\n' ' ')" = '_iojs-v1.0.0 iojs-v3.3.1 ' ] || die 'NVM_ONLY=iojs listed the wrong versions'
|
||||
|
||||
cleanup
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
for PAIR in 'alpha:alpha' 'iojs,lts:lts,iojs' 'non-lts,alpha,iojs,lts:alpha,lts,non-lts,iojs' 'lts,lts,non-lts,lts:lts,non-lts'; do
|
||||
try nvm_normalize_only "${PAIR%%:*}" 'SOURCE'
|
||||
[ "_${CAPTURED_EXIT_CODE}" = '_0' ] || die "nvm_normalize_only ${PAIR%%:*} exited ${CAPTURED_EXIT_CODE}"
|
||||
[ "_${CAPTURED_STDOUT}" = "_${PAIR#*:}" ] || die "nvm_normalize_only ${PAIR%%:*} printed >${CAPTURED_STDOUT}<, expected >${PAIR#*:}<"
|
||||
done
|
||||
|
||||
for VALUE in '' 'beta' 'lts,beta' ',lts' 'lts,' 'lts,,iojs' 'LTS' 'lts non-lts' 'nonlts' 'all'; do
|
||||
try_err nvm_normalize_only "${VALUE}" 'SOURCE'
|
||||
[ "_${CAPTURED_EXIT_CODE}" = '_55' ] || die "nvm_normalize_only >${VALUE}< exited ${CAPTURED_EXIT_CODE}, expected 55"
|
||||
EXPECTED="Invalid SOURCE value \"${VALUE}\": it must be a comma-separated list of any of: alpha, lts, non-lts, iojs"
|
||||
[ "_${CAPTURED_STDERR}" = "_${EXPECTED}" ] || die "nvm_normalize_only >${VALUE}< printed >${CAPTURED_STDERR}<, expected >${EXPECTED}<"
|
||||
try nvm_normalize_only "${VALUE}" 'SOURCE'
|
||||
[ -z "${CAPTURED_STDOUT}" ] || die "nvm_normalize_only >${VALUE}< printed >${CAPTURED_STDOUT}< to stdout"
|
||||
done
|
||||
Executable
+66
@@ -0,0 +1,66 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
unset NVM_ONLY NVM_ONLY_SELECTED
|
||||
NVM_NO_LTS_STATUS=1
|
||||
export NVM_NO_LTS_STATUS
|
||||
|
||||
check () {
|
||||
EXPECTED="$1"
|
||||
shift
|
||||
try nvm_resolve_only "$@"
|
||||
[ "_${CAPTURED_EXIT_CODE}" = '_0' ] || die "nvm_resolve_only $* (NVM_ONLY=${NVM_ONLY-}) exited ${CAPTURED_EXIT_CODE}"
|
||||
[ "_${CAPTURED_STDOUT}" = "_${EXPECTED}" ] || die "nvm_resolve_only $* (NVM_ONLY=${NVM_ONLY-}) printed >${CAPTURED_STDOUT}<, expected >${EXPECTED}<"
|
||||
}
|
||||
|
||||
check_err () {
|
||||
EXPECTED="$1"
|
||||
shift
|
||||
try_err nvm_resolve_only "$@"
|
||||
[ "_${CAPTURED_EXIT_CODE}" = "_${EXPECTED_CODE:-55}" ] || die "nvm_resolve_only $* (NVM_ONLY=${NVM_ONLY-}) exited ${CAPTURED_EXIT_CODE}, expected ${EXPECTED_CODE:-55}"
|
||||
[ "_${CAPTURED_STDERR}" = "_${EXPECTED}" ] || die "nvm_resolve_only $* (NVM_ONLY=${NVM_ONLY-}) printed >${CAPTURED_STDERR}<, expected >${EXPECTED}<"
|
||||
}
|
||||
|
||||
check 'lts,non-lts,iojs' 0 '' ''
|
||||
check 'alpha,iojs' 1 'iojs,alpha' ''
|
||||
check 'lts,non-lts' 0 '' '*'
|
||||
check 'lts,non-lts' 1 'alpha,lts' 'argon'
|
||||
check_err '`--only=alpha,iojs` excludes LTS versions, so it cannot be combined with an LTS selection like `--lts`.' 1 'alpha,iojs' '*'
|
||||
check_err '`--only` may only be provided once.' 2 'alpha' ''
|
||||
check_err 'Invalid `--only` value "": it must be a comma-separated list of any of: alpha, lts, non-lts, iojs' 1 '' ''
|
||||
check_err 'Invalid `--only` value ",alpha": it must be a comma-separated list of any of: alpha, lts, non-lts, iojs' 1 ',alpha' ''
|
||||
|
||||
NVM_ONLY='iojs,alpha'
|
||||
check 'alpha,iojs' 0 '' ''
|
||||
check 'non-lts' 1 'non-lts' ''
|
||||
check 'lts,non-lts' 0 '' '*'
|
||||
NVM_ONLY='alpha,bogus'
|
||||
check_err 'Invalid `$NVM_ONLY` value "alpha,bogus": it must be a comma-separated list of any of: alpha, lts, non-lts, iojs' 0 '' ''
|
||||
check 'lts' 1 'lts' ''
|
||||
|
||||
NVM_ONLY='lts'
|
||||
NVM_ONLY_SELECTED='alpha'
|
||||
check 'alpha' 0 '' ''
|
||||
check 'non-lts' 1 'non-lts' ''
|
||||
unset NVM_ONLY NVM_ONLY_SELECTED NVM_NO_LTS_STATUS
|
||||
|
||||
# selecting only one of lts and non-lts needs recorded LTS status; an LTS selection does not
|
||||
NVM_INDEX_NO_FETCH=1
|
||||
export NVM_INDEX_NO_FETCH
|
||||
nvm_download() { return 1; }
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
ORIG_NVM_DIR="${NVM_DIR}"
|
||||
NVM_DIR="${TMP_DIR}"
|
||||
EXPECTED_CODE=3
|
||||
check_err 'The LTS status of installed versions is not recorded yet; run `nvm ls-remote` to record it.' 1 'lts' ''
|
||||
unset EXPECTED_CODE
|
||||
check 'lts,non-lts' 0 '' '*'
|
||||
NVM_DIR="${ORIG_NVM_DIR}"
|
||||
rm -rf "${TMP_DIR}"
|
||||
unset NVM_INDEX_NO_FETCH
|
||||
Executable
+56
@@ -0,0 +1,56 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
INPUT='v27.0.0
|
||||
v27.0.0-alpha.1.10.2
|
||||
v26.12.10
|
||||
v27.0.0-alpha.1.2.0
|
||||
v26.12.2
|
||||
v27.0.0-alpha.0.0.0
|
||||
v26.12.2
|
||||
v4.0.0'
|
||||
EXPECTED='v4.0.0
|
||||
v26.12.2
|
||||
v26.12.10
|
||||
v27.0.0-alpha.0.0.0
|
||||
v27.0.0-alpha.1.2.0
|
||||
v27.0.0-alpha.1.10.2
|
||||
v27.0.0'
|
||||
OUTPUT="$(echo "${INPUT}" | nvm_sort_versions)"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED}" ] || die "nvm_sort_versions printed >${OUTPUT}<, expected >${EXPECTED}<"
|
||||
OUTPUT="$(echo "${INPUT}" | nvm_sort_versions 1)"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED}" ] || die "nvm_sort_versions 1 printed >${OUTPUT}<, expected >${EXPECTED}<"
|
||||
|
||||
INPUT='v3.3.1.iojs
|
||||
v10.0.0.node
|
||||
v27.0.0-alpha.1.0.0.node
|
||||
v1.0.0.iojs
|
||||
v2.0.0.node'
|
||||
EXPECTED='v1.0.0.iojs
|
||||
v2.0.0.node
|
||||
v3.3.1.iojs
|
||||
v10.0.0.node
|
||||
v27.0.0-alpha.1.0.0.node'
|
||||
OUTPUT="$(echo "${INPUT}" | nvm_sort_versions)"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED}" ] || die "nvm_sort_versions with suffixes printed >${OUTPUT}<, expected >${EXPECTED}<"
|
||||
|
||||
INPUT='v11.1.0-nightly20181101af6d26281f
|
||||
v11.0.0-nightly201810011be804d625
|
||||
v11.0.0-nightly20181002aaaaaaaaaa'
|
||||
OUTPUT="$(echo "${INPUT}" | nvm_sort_versions 1)"
|
||||
[ "_$(echo "${OUTPUT}" | grep -c 'v11\.0\.0-nightly')" = '_1' ] || die "nvm_sort_versions 1 should collapse same-release nightlies; got >${OUTPUT}<"
|
||||
[ "_$(echo "${OUTPUT}" | sed -n '2p')" = '_v11.1.0-nightly20181101af6d26281f' ] || die "nvm_sort_versions 1 should keep other nightlies; got >${OUTPUT}<"
|
||||
[ "_$(echo "${OUTPUT}" | wc -l | tr -d ' ')" = '_2' ] || die "nvm_sort_versions 1 printed the wrong number of lines; got >${OUTPUT}<"
|
||||
OUTPUT="$(echo "${INPUT}" | nvm_sort_versions)"
|
||||
[ "_$(echo "${OUTPUT}" | wc -l | tr -d ' ')" = '_3' ] || die "nvm_sort_versions should keep every distinct line; got >${OUTPUT}<"
|
||||
|
||||
INPUT='v24.11.0 Krypton *
|
||||
v22.11.0 Jod'
|
||||
EXPECTED='v22.11.0 Jod
|
||||
v24.11.0 Krypton *'
|
||||
OUTPUT="$(echo "${INPUT}" | nvm_sort_versions 1)"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED}" ] || die "nvm_sort_versions 1 should keep trailing fields; got >${OUTPUT}<"
|
||||
Reference in new issue
Block a user