Skip to content

Commit da2720a

Browse files
committed
[Fix] nvm ls, nvm alias, nvm install: error when an LTS name is invalid
1 parent 9fb9dec commit da2720a

File tree

5 files changed

+67
-17
lines changed

5 files changed

+67
-17
lines changed

nvm.sh

+13-4
Original file line numberDiff line numberDiff line change
@@ -1253,7 +1253,9 @@ nvm_alias() {
12531253
nvm_err 'An alias is required.'
12541254
return 1
12551255
fi
1256-
ALIAS="$(nvm_normalize_lts "${ALIAS}")"
1256+
if ! ALIAS="$(nvm_normalize_lts "${ALIAS}")"; then
1257+
return $?
1258+
fi
12571259

12581260
if [ -z "${ALIAS}" ]; then
12591261
return 2
@@ -1656,7 +1658,9 @@ $VERSION_LIST
16561658
EOF
16571659

16581660
if [ -n "${LTS-}" ]; then
1659-
LTS="$(nvm_normalize_lts "lts/${LTS}")"
1661+
if ! LTS="$(nvm_normalize_lts "lts/${LTS}")"; then
1662+
return $?
1663+
fi
16601664
LTS="${LTS#lts/}"
16611665
fi
16621666

@@ -3421,9 +3425,11 @@ nvm() {
34213425
;;
34223426
esac
34233427

3428+
local EXIT_CODE
34243429
VERSION="$(NVM_VERSION_ONLY=true NVM_LTS="${LTS-}" nvm_remote_version "${provided_version}")"
3430+
EXIT_CODE="$?"
34253431

3426-
if [ "${VERSION}" = 'N/A' ]; then
3432+
if [ "${VERSION}" = 'N/A' ] || [ $EXIT_CODE -ne 0 ]; then
34273433
local LTS_MSG
34283434
local REMOTE_CMD
34293435
if [ "${LTS-}" = '*' ]; then
@@ -3432,6 +3438,10 @@ nvm() {
34323438
elif [ -n "${LTS-}" ]; then
34333439
LTS_MSG="(with LTS filter '${LTS}') "
34343440
REMOTE_CMD="nvm ls-remote --lts=${LTS}"
3441+
if [ -z "${provided_version}" ]; then
3442+
nvm_err "Version with LTS filter '${LTS}' not found - try \`${REMOTE_CMD}\` to browse available versions."
3443+
return 3
3444+
fi
34353445
else
34363446
REMOTE_CMD='nvm ls-remote'
34373447
fi
@@ -3496,7 +3506,6 @@ nvm() {
34963506
FLAVOR="$(nvm_node_prefix)"
34973507
fi
34983508

3499-
local EXIT_CODE
35003509
EXIT_CODE=0
35013510

35023511
if nvm_is_version_installed "${VERSION}"; then
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#!/bin/sh
2+
3+
die () { echo "$@" ; exit 1; }
4+
5+
\. ../../../nvm.sh
6+
7+
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
8+
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt"
9+
10+
nvm_download() {
11+
if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then
12+
cat "${REMOTE}"
13+
elif [ "$*" = "-L -s $(nvm_get_mirror iojs)/index.tab -o -" ]; then
14+
cat "${REMOTE_IOJS}"
15+
else
16+
nvm_err "unknown nvm_download call: $*"
17+
return 42
18+
fi
19+
}
20+
21+
nvm_install_binary() {
22+
return 42
23+
}
24+
nvm_install_source() {
25+
return 42
26+
}
27+
28+
ACTUAL="$(nvm install lts/ARGON 2>&1)"
29+
EXIT_CODE=$?
30+
[ $EXIT_CODE -eq 3 ] || die "Expected exit code of 3, got ${EXIT_CODE}"
31+
32+
EXPECTED="LTS names must be lowercase
33+
Version with LTS filter 'ARGON' not found - try \`nvm ls-remote --lts=ARGON\` to browse available versions."
34+
35+
[ "${ACTUAL}" = "${EXPECTED}" ] || die "Expected >${EXPECTED}<, got >${ACTUAL}<"

test/fast/Unit tests/nvm ls-remote

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#!/bin/sh
22

3-
set -e
4-
53
die () { echo "$@" ; cleanup ; exit 1; }
64

75
cleanup() {
@@ -56,6 +54,14 @@ printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
5654
INDEX=$(($INDEX + 1))
5755
done
5856

57+
OUTPUT="$(nvm ls-remote lts/ARGON 2>&1)"
58+
EXIT_CODE=$?
59+
[ $EXIT_CODE -eq 3 ] || die "nvm ls-remote lts/ARGON did not exit 3, got '${EXIT_CODE}'"
60+
61+
EXPECTED_OUTPUT="LTS names must be lowercase
62+
N/A"
63+
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote lts/ARGON did not output expected error message; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
64+
5965
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
6066
nvm_ls_remote() {
6167
cat "${REMOTE}"

test/fast/Unit tests/nvm_install_no_progress_bar

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ cleanup () {
66
nvm cache clear
77
nvm deactivate
88
rm -rf ${NVM_DIR}/v*
9-
nvm unalias default
9+
nvm unalias default || true
1010
}
1111

1212
die () { >&2 echo "$@" ; cleanup ; exit 1; }

test/installation_node/install LTS

+10-10
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ die () { echo "$@" ; exit 1; }
99
nvm unalias default >/dev/null 2>&1 || die 'unable to unalias default'
1010

1111
set +ex # needed for stderr
12-
OUTPUT="$(nvm install --lts 3 2>&1)"
12+
OUTPUT="$(nvm install --lts 0.12 2>&1)"
13+
EXIT_CODE="$?"
1314
set -ex
14-
EXIT_CODE="$(nvm install --lts 3 >/dev/null 2>&1 && echo $? || echo $?)"
15-
EXPECTED_OUTPUT="Version '3' (with LTS filter) not found - try \`nvm ls-remote --lts\` to browse available versions."
16-
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts 3\` did not exit with 3, got >${EXIT_CODE}<"
15+
EXPECTED_OUTPUT="Version '0.12' (with LTS filter) not found - try \`nvm ls-remote --lts\` to browse available versions."
16+
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts 0.12\` did not exit with 3, got >${EXIT_CODE}<"
1717
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts 3\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
1818

1919
set +ex # needed for stderr
20-
OUTPUT="$(nvm install --lts=argon 3 2>&1)"
21-
set -ex
22-
EXIT_CODE="$(nvm install --lts=argon 3 >/dev/null 2>&1 && echo $? || echo $?)"
23-
EXPECTED_OUTPUT="Version '3' (with LTS filter 'argon') not found - try \`nvm ls-remote --lts=argon\` to browse available versions."
24-
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts=argon 3\` did not exit with 3, got >${EXIT_CODE}<"
25-
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts=argon 3\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
20+
OUTPUT="$(nvm install --lts=argon 0.12 2>&1)"
21+
EXIT_CODE="$?"
22+
set -x
23+
EXPECTED_OUTPUT="Version '0.12' (with LTS filter 'argon') not found - try \`nvm ls-remote --lts=argon\` to browse available versions."
24+
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts=argon 0.12\` did not exit with 3, got >${EXIT_CODE}<"
25+
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts=argon 0.12\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
2626

2727
nvm install --lts 4.2.2 || die 'nvm install --lts 4.2.2 failed'
2828

0 commit comments

Comments
 (0)