diff --git a/nvm.sh b/nvm.sh index 4a33cf8..6c72cae 100644 --- a/nvm.sh +++ b/nvm.sh @@ -858,14 +858,16 @@ nvm_ls_remote() { else PATTERN=".*" fi - nvm_ls_remote_index_tab node std "$NVM_NODEJS_ORG_MIRROR" "$PATTERN" + NVM_LTS="${NVM_LTS-}" nvm_ls_remote_index_tab node std "$NVM_NODEJS_ORG_MIRROR" "$PATTERN" } nvm_ls_remote_iojs() { - nvm_ls_remote_index_tab iojs std "$NVM_IOJS_ORG_MIRROR" "$1" + NVM_LTS="${NVM_LTS-}" nvm_ls_remote_index_tab iojs std "$NVM_IOJS_ORG_MIRROR" "$1" } nvm_ls_remote_index_tab() { + local LTS + LTS="${NVM_LTS-}" if [ "$#" -lt 4 ]; then nvm_err 'not enough arguments' return 5 @@ -915,10 +917,11 @@ nvm_ls_remote_index_tab() { 1d; s/^/$PREFIX/; " \ - | command awk -v pattern="${PATTERN-}" '{ + | command awk -v pattern="${PATTERN-}" -v lts="${LTS-}" '{ if (!$1) { next } if (pattern && tolower($1) !~ tolower(pattern)) { next } - if ($10 !~ /^\-?$/ && ! a[$10]++) print $1, $10; else print $1 + if (lts == "*" && $10 ~ /^\-?$/) { next } + if ($10 !~ /^\-?$/) print $1, $10; else print $1 }' \ | nvm_grep -w "${PATTERN:-.*}" \ | $SORT_COMMAND)" @@ -1012,7 +1015,7 @@ nvm_print_versions() { fi fi if [ "$LTS" != "$VERSION" ]; then - LTS=" (Latest LTS: $LTS)" + LTS=" (LTS: $LTS)" LTS_LENGTH="${#LTS}" if [ "${NVM_HAS_COLORS-}" = '1' ]; then LTS_FORMAT="\033[1;32m%${LTS_LENGTH}s\033[0m" @@ -1791,9 +1794,11 @@ nvm() { nvm_echo ' nvm run [--silent] [] Run `node` on with as arguments. Uses .nvmrc if available' nvm_echo ' nvm current Display currently activated version' nvm_echo ' nvm ls List installed versions' - nvm_echo ' nvm ls List versions matching a given description' + nvm_echo ' nvm ls List versions matching a given ' nvm_echo ' nvm ls-remote List remote versions available for install' + nvm_echo ' --lts When listing, only show LTS (long-term support) versions' nvm_echo ' nvm ls-remote List remote versions available for install, matching a given ' + nvm_echo ' --lts When listing, only show LTS (long-term support) versions' nvm_echo ' nvm version Resolve the given description to a single local version' nvm_echo ' nvm version-remote Resolve the given description to a single remote version' nvm_echo ' nvm deactivate Undo effects of `nvm` on current shell' @@ -2370,19 +2375,39 @@ nvm() { return $NVM_LS_EXIT_CODE ;; "ls-remote" | "list-remote" ) - local PATTERN - PATTERN="${2-}" + local LTS local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local NVM_NODE_PREFIX NVM_NODE_PREFIX="$(nvm_node_prefix)" + local PATTERN local NVM_FLAVOR - case "_$PATTERN" in - "_$NVM_IOJS_PREFIX" | "_$NVM_NODE_PREFIX" ) - NVM_FLAVOR="$PATTERN" - PATTERN="$3" - ;; - esac + while [ $# -gt 1 ] + do + case "$2" in + --lts) + LTS='*' + ;; + --*) + nvm_err "Unsupported option \"$2\"." + return 55; + ;; + *) + if [ -z "$PATTERN" ]; then + PATTERN="${2-}" + if [ -z "$NVM_FLAVOR" ]; then + case "_$PATTERN" in + "_$NVM_IOJS_PREFIX" | "_$NVM_NODE_PREFIX") + NVM_FLAVOR="$PATTERN" + PATTERN="" + ;; + esac + fi + fi + ;; + esac + shift + done local NVM_LS_REMOTE_EXIT_CODE NVM_LS_REMOTE_EXIT_CODE=0 @@ -2392,7 +2417,7 @@ nvm() { NVM_LS_REMOTE_POST_MERGED_OUTPUT='' if [ "_$NVM_FLAVOR" != "_$NVM_IOJS_PREFIX" ]; then local NVM_LS_REMOTE_OUTPUT - NVM_LS_REMOTE_OUTPUT=$(nvm_ls_remote "$PATTERN") + NVM_LS_REMOTE_OUTPUT=$(NVM_LTS="${LTS-}" nvm_ls_remote "$PATTERN") # split output into two NVM_LS_REMOTE_PRE_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT%%v4\.0\.0*}" NVM_LS_REMOTE_POST_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT#$NVM_LS_REMOTE_PRE_MERGED_OUTPUT}" @@ -2404,7 +2429,7 @@ nvm() { local NVM_LS_REMOTE_IOJS_OUTPUT NVM_LS_REMOTE_IOJS_OUTPUT='' if [ "_$NVM_FLAVOR" != "_$NVM_NODE_PREFIX" ]; then - NVM_LS_REMOTE_IOJS_OUTPUT=$(nvm_ls_remote_iojs "$PATTERN") + NVM_LS_REMOTE_IOJS_OUTPUT=$(NVM_LTS="${LTS-}" nvm_ls_remote_iojs "$PATTERN") NVM_LS_REMOTE_IOJS_EXIT_CODE=$? fi diff --git a/test/fast/Unit tests/mocks/nvm_ls_remote LTS argon.txt b/test/fast/Unit tests/mocks/nvm_ls_remote LTS argon.txt new file mode 100644 index 0000000..e8c3e5f --- /dev/null +++ b/test/fast/Unit tests/mocks/nvm_ls_remote LTS argon.txt @@ -0,0 +1,278 @@ +v0.1.14 +v0.1.15 +v0.1.16 +v0.1.17 +v0.1.18 +v0.1.19 +v0.1.20 +v0.1.21 +v0.1.22 +v0.1.23 +v0.1.24 +v0.1.25 +v0.1.26 +v0.1.27 +v0.1.28 +v0.1.29 +v0.1.30 +v0.1.31 +v0.1.32 +v0.1.33 +v0.1.90 +v0.1.91 +v0.1.92 +v0.1.93 +v0.1.94 +v0.1.95 +v0.1.96 +v0.1.97 +v0.1.98 +v0.1.99 +v0.1.100 +v0.1.101 +v0.1.102 +v0.1.103 +v0.1.104 +v0.2.0 +v0.2.1 +v0.2.2 +v0.2.3 +v0.2.4 +v0.2.5 +v0.2.6 +v0.3.0 +v0.3.1 +v0.3.2 +v0.3.3 +v0.3.4 +v0.3.5 +v0.3.6 +v0.3.7 +v0.3.8 +v0.4.0 +v0.4.1 +v0.4.2 +v0.4.3 +v0.4.4 +v0.4.5 +v0.4.6 +v0.4.7 +v0.4.8 +v0.4.9 +v0.4.10 +v0.4.11 +v0.4.12 +v0.5.0 +v0.5.1 +v0.5.2 +v0.5.3 +v0.5.4 +v0.5.5 +v0.5.6 +v0.5.7 +v0.5.8 +v0.5.9 +v0.5.10 +v0.6.0 +v0.6.1 +v0.6.2 +v0.6.3 +v0.6.4 +v0.6.5 +v0.6.6 +v0.6.7 +v0.6.8 +v0.6.9 +v0.6.10 +v0.6.11 +v0.6.12 +v0.6.13 +v0.6.14 +v0.6.15 +v0.6.16 +v0.6.17 +v0.6.18 +v0.6.19 +v0.6.20 +v0.6.21 +v0.7.0 +v0.7.1 +v0.7.2 +v0.7.3 +v0.7.4 +v0.7.5 +v0.7.6 +v0.7.7 +v0.7.8 +v0.7.9 +v0.7.10 +v0.7.11 +v0.7.12 +v0.8.0 +v0.8.1 +v0.8.2 +v0.8.3 +v0.8.4 +v0.8.5 +v0.8.6 +v0.8.7 +v0.8.8 +v0.8.9 +v0.8.10 +v0.8.11 +v0.8.12 +v0.8.13 +v0.8.14 +v0.8.15 +v0.8.16 +v0.8.17 +v0.8.18 +v0.8.19 +v0.8.20 +v0.8.21 +v0.8.22 +v0.8.23 +v0.8.24 +v0.8.25 +v0.8.26 +v0.8.27 +v0.8.28 +v0.9.0 +v0.9.1 +v0.9.2 +v0.9.3 +v0.9.4 +v0.9.5 +v0.9.6 +v0.9.7 +v0.9.8 +v0.9.9 +v0.9.10 +v0.9.11 +v0.9.12 +v0.10.0 +v0.10.1 +v0.10.2 +v0.10.3 +v0.10.4 +v0.10.5 +v0.10.6 +v0.10.7 +v0.10.8 +v0.10.9 +v0.10.10 +v0.10.11 +v0.10.12 +v0.10.13 +v0.10.14 +v0.10.15 +v0.10.16 +v0.10.17 +v0.10.18 +v0.10.19 +v0.10.20 +v0.10.21 +v0.10.22 +v0.10.23 +v0.10.24 +v0.10.25 +v0.10.26 +v0.10.27 +v0.10.28 +v0.10.29 +v0.10.30 +v0.10.31 +v0.10.32 +v0.10.33 +v0.10.34 +v0.10.35 +v0.10.36 +v0.10.37 +v0.10.38 +v0.10.39 +v0.10.40 +v0.10.41 +v0.10.42 +v0.10.43 +v0.10.44 +v0.10.45 +v0.10.46 +v0.11.0 +v0.11.1 +v0.11.2 +v0.11.3 +v0.11.4 +v0.11.5 +v0.11.6 +v0.11.7 +v0.11.8 +v0.11.9 +v0.11.10 +v0.11.11 +v0.11.12 +v0.11.13 +v0.11.14 +v0.11.15 +v0.11.16 +v0.12.0 +v0.12.1 +v0.12.2 +v0.12.3 +v0.12.4 +v0.12.5 +v0.12.6 +v0.12.7 +v0.12.8 +v0.12.9 +v0.12.10 +v0.12.11 +v0.12.12 +v0.12.13 +v0.12.14 +v0.12.15 +v4.0.0 +v4.1.0 +v4.1.1 +v4.1.2 +v4.2.0 Argon +v4.2.1 Argon +v4.2.2 Argon +v4.2.3 Argon +v4.2.4 Argon +v4.2.5 Argon +v4.2.6 Argon +v4.3.0 Argon +v4.3.1 Argon +v4.3.2 Argon +v4.4.0 Argon +v4.4.1 Argon +v4.4.2 Argon +v4.4.3 Argon +v4.4.4 Argon +v4.4.5 Argon +v4.4.6 Argon +v4.4.7 Argon +v5.0.0 +v5.1.0 +v5.1.1 +v5.2.0 +v5.3.0 +v5.4.0 +v5.4.1 +v5.5.0 +v5.6.0 +v5.7.0 +v5.7.1 +v5.8.0 +v5.9.0 +v5.9.1 +v5.10.0 +v5.10.1 +v5.11.0 +v5.11.1 +v5.12.0 +v6.0.0 +v6.1.0 +v6.2.0 +v6.2.1 +v6.2.2 diff --git a/test/fast/Unit tests/mocks/nvm_ls_remote LTS.txt b/test/fast/Unit tests/mocks/nvm_ls_remote LTS.txt new file mode 100644 index 0000000..f46b35a --- /dev/null +++ b/test/fast/Unit tests/mocks/nvm_ls_remote LTS.txt @@ -0,0 +1,18 @@ +v4.2.0 Argon +v4.2.1 Argon +v4.2.2 Argon +v4.2.3 Argon +v4.2.4 Argon +v4.2.5 Argon +v4.2.6 Argon +v4.3.0 Argon +v4.3.1 Argon +v4.3.2 Argon +v4.4.0 Argon +v4.4.1 Argon +v4.4.2 Argon +v4.4.3 Argon +v4.4.4 Argon +v4.4.5 Argon +v4.4.6 Argon +v4.4.7 Argon diff --git a/test/fast/Unit tests/mocks/nvm_ls_remote.txt b/test/fast/Unit tests/mocks/nvm_ls_remote.txt index c6f2e8f..e8c3e5f 100644 --- a/test/fast/Unit tests/mocks/nvm_ls_remote.txt +++ b/test/fast/Unit tests/mocks/nvm_ls_remote.txt @@ -234,23 +234,23 @@ v4.0.0 v4.1.0 v4.1.1 v4.1.2 -v4.2.0 -v4.2.1 -v4.2.2 -v4.2.3 -v4.2.4 -v4.2.5 -v4.2.6 -v4.3.0 -v4.3.1 -v4.3.2 -v4.4.0 -v4.4.1 -v4.4.2 -v4.4.3 -v4.4.4 -v4.4.5 -v4.4.6 +v4.2.0 Argon +v4.2.1 Argon +v4.2.2 Argon +v4.2.3 Argon +v4.2.4 Argon +v4.2.5 Argon +v4.2.6 Argon +v4.3.0 Argon +v4.3.1 Argon +v4.3.2 Argon +v4.4.0 Argon +v4.4.1 Argon +v4.4.2 Argon +v4.4.3 Argon +v4.4.4 Argon +v4.4.5 Argon +v4.4.6 Argon v4.4.7 Argon v5.0.0 v5.1.0 diff --git a/test/fast/Unit tests/nvm_ls_remote b/test/fast/Unit tests/nvm_ls_remote index c824dd4..52dd1f3 100755 --- a/test/fast/Unit tests/nvm_ls_remote +++ b/test/fast/Unit tests/nvm_ls_remote @@ -8,13 +8,15 @@ cleanup() { . ../../../nvm.sh +MOCKS_DIR="$PWD/mocks" + # sample output at the time the test was written -TAB_PATH="$PWD/mocks/nodejs.org-dist-index.tab" +TAB_PATH="$MOCKS_DIR/nodejs.org-dist-index.tab" nvm_download() { cat "$TAB_PATH" } -EXPECTED_OUTPUT_PATH="$PWD/mocks/nvm_ls_remote.txt" +EXPECTED_OUTPUT_PATH="$MOCKS_DIR/nvm_ls_remote.txt" OUTPUT="$(nvm_ls_remote foo)" EXIT_CODE="$(nvm_ls_remote foo >/dev/null 2>&1 ; echo $?)" @@ -55,4 +57,15 @@ OUTPUT="$(nvm_ls_remote unstable)" EXPECTED_OUTPUT="v0.11.16" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote unstable did not output $EXPECTED_OUTPUT; got $OUTPUT" +EXPECTED_OUTPUT_PATH="$MOCKS_DIR/nvm_ls_remote LTS.txt" +EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH")" +OUTPUT="$(NVM_LTS='*' nvm_ls_remote)" + +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "\`NVM_LTS='*' nvm_ls_remote\` did not output >$EXPECTED_OUTPUT<; got >$OUTPUT<" + +EXPECTED_OUTPUT_PATH="$MOCKS_DIR/nvm_ls_remote LTS argon.txt" +EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH")" +OUTPUT="$(NVM_LTS=argon nvm_ls_remote)" +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "\`NVM_LTS=argon nvm_ls_remote\` did not output >$EXPECTED_OUTPUT<; got >$OUTPUT<" + cleanup diff --git a/update_test_mocks.sh b/update_test_mocks.sh index ee08915..571b870 100755 --- a/update_test_mocks.sh +++ b/update_test_mocks.sh @@ -13,6 +13,8 @@ mkdir -p "$MOCKS_DIR" nvm_ls_remote > "$MOCKS_DIR/nvm_ls_remote.txt" nvm_ls_remote_iojs > "$MOCKS_DIR/nvm_ls_remote_iojs.txt" +NVM_LTS=* nvm_ls_remote > "$MOCKS_DIR/nvm_ls_remote LTS.txt" +NVM_LTS=argon nvm_ls_remote > "$MOCKS_DIR/nvm_ls_remote LTS argon.txt" nvm_download -L -s "$NVM_NODEJS_ORG_MIRROR/index.tab" -o - > "$MOCKS_DIR/nodejs.org-dist-index.tab" nvm_download -L -s "$NVM_IOJS_ORG_MIRROR/index.tab" -o - > "$MOCKS_DIR/iojs.org-dist-index.tab"