From c4c7690dec3e0c6b9ab03128218029c280cd209e Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 16 Dec 2021 23:01:05 -0800 Subject: [PATCH] [Fix] `ls-remote`/`install`: support `lts/-X` patterns in installs Fixes #2692 --- nvm.sh | 5 +++++ test/fast/Unit tests/nvm ls-remote | 26 +++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/nvm.sh b/nvm.sh index b45f12f..6c20f91 100644 --- a/nvm.sh +++ b/nvm.sh @@ -1465,6 +1465,11 @@ nvm_ls_remote_index_tab() { $VERSION_LIST EOF + if [ -n "${LTS-}" ]; then + LTS="$(nvm_normalize_lts "lts/${LTS}")" + LTS="${LTS#lts/}" + fi + VERSIONS="$({ command awk -v lts="${LTS-}" '{ if (!$1) { next } if (lts && $10 ~ /^\-?$/) { next } diff --git a/test/fast/Unit tests/nvm ls-remote b/test/fast/Unit tests/nvm ls-remote index 96675b2..933b36d 100755 --- a/test/fast/Unit tests/nvm ls-remote +++ b/test/fast/Unit tests/nvm ls-remote @@ -31,19 +31,39 @@ nvm_ls_remote_iojs() { cat "$REMOTE_IOJS" } -EXPECTED_OUTPUT_PATH="$PWD/mocks/nvm ls-remote.txt" +MOCKS_DIR="$PWD/mocks" + +EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt" OUTPUT="$(nvm ls-remote | sed 's/[ \t]*$//')" EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm ls-remote did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")" -EXPECTED_OUTPUT_PATH="$PWD/mocks/nvm ls-remote lts.txt" +EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt" OUTPUT="$(nvm ls-remote --lts="*" | sed 's/[ \t]*$//')" EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote --lts=* did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")" -EXPECTED_OUTPUT_PATH="$PWD/mocks/nvm ls-remote lts.txt" +EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt" OUTPUT="$(nvm ls-remote "lts/*" | sed 's/[ \t]*$//')" EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")" +EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt" +OUTPUT="$(nvm ls-remote "lts/-1" | sed 's/[ \t]*$//')" +EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )" +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")" + +LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt" +LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)" + +INDEX=1 +for LTS in $LTS_LIST; do + ACTUAL="$(nvm ls-remote "lts/-${INDEX}" | sed 's/[ \t]*$//')" + MESSAGE="for lts/-${INDEX} / ${LTS}" + EXPECTED="$(nvm ls-remote "lts/${LTS}" | sed 's/[ \t]*$//')" + [ "${ACTUAL}" = "${EXPECTED}" ] || die "${MESSAGE}: expected >${EXPECTED}<, got >${ACTUAL}<" + + INDEX=$(($INDEX + 1)) +done + cleanup