From 4626d1aae6be7213fa7bb78d2fb304279b1d89e7 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 4 Mar 2020 01:03:36 -0800 Subject: [PATCH] [New] add `lts/-1` etc, to point to an LTS line relative to "latest" --- nvm.sh | 19 ++++++++++++- test/fast/Unit tests/mocks/LTS_names.txt | 5 ++++ test/fast/Unit tests/nvm_alias LTS-N | 34 ++++++++++++++++++++++++ update_test_mocks.sh | 5 ++++ 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 test/fast/Unit tests/mocks/LTS_names.txt create mode 100755 test/fast/Unit tests/nvm_alias LTS-N diff --git a/nvm.sh b/nvm.sh index 8bb36f7..96c662f 100644 --- a/nvm.sh +++ b/nvm.sh @@ -855,8 +855,25 @@ nvm_alias() { return 1 fi + local NVM_ALIAS_DIR + NVM_ALIAS_DIR="$(nvm_alias_path)" + + if [ "$(expr "${ALIAS}" : '^lts/-[1-9][0-9]*$')" -gt 0 ]; then + local N + N="$(echo "${ALIAS}" | cut -d '-' -f 2)" + local RESULT + RESULT="$(command ls "${NVM_ALIAS_DIR}/lts" | command tail -n "${N}" | command head -n 1)" + if [ "${RESULT}" != '*' ]; then + nvm_alias "lts/${RESULT}" + return $? + else + nvm_err 'That many LTS releases do not exist yet.' + return 2 + fi + fi + local NVM_ALIAS_PATH - NVM_ALIAS_PATH="$(nvm_alias_path)/${ALIAS}" + NVM_ALIAS_PATH="${NVM_ALIAS_DIR}/${ALIAS}" if [ ! -f "${NVM_ALIAS_PATH}" ]; then nvm_err 'Alias does not exist.' return 2 diff --git a/test/fast/Unit tests/mocks/LTS_names.txt b/test/fast/Unit tests/mocks/LTS_names.txt new file mode 100644 index 0000000..b814a02 --- /dev/null +++ b/test/fast/Unit tests/mocks/LTS_names.txt @@ -0,0 +1,5 @@ +erbium +dubnium +carbon +boron +argon diff --git a/test/fast/Unit tests/nvm_alias LTS-N b/test/fast/Unit tests/nvm_alias LTS-N new file mode 100755 index 0000000..352644a --- /dev/null +++ b/test/fast/Unit tests/nvm_alias LTS-N @@ -0,0 +1,34 @@ +#!/bin/sh + +die () { echo "$@" ; cleanup ; exit 1; } + + +cleanup() { + unset -f nvm_download +} + +\. ../../../nvm.sh + +set -ex + +MOCKS_DIR="${PWD}/mocks" + +# sample output at the time the test was written +TAB_PATH="${MOCKS_DIR}/nodejs.org-dist-index.tab" +nvm_download() { + cat "${TAB_PATH}" +} + +nvm_ls_remote >/dev/null || die "nvm_ls_remote_failed?!" + +LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt" + +N=0 +while IFS= read -r LTS; do + N=$(($N+1)) + EXPECTED="$(nvm_alias "lts/${LTS}")" + ACTUAL="$(nvm_alias "lts/-${N}")" + [ "${EXPECTED}" = "${ACTUAL}" ] || die "\`nvm_alias lts/-${N}\` was \`${ACTUAL}\`; expected \`${EXPECTED}\`" +done < "${LTS_NAMES_PATH}" + +cleanup diff --git a/update_test_mocks.sh b/update_test_mocks.sh index 28458ea..30a3782 100755 --- a/update_test_mocks.sh +++ b/update_test_mocks.sh @@ -44,9 +44,14 @@ set -e ALIAS_PATH="$MOCKS_DIR/nvm_make_alias LTS alias calls.txt" : > "$ALIAS_PATH" +LTS_NAMES_PATH="$MOCKS_DIR/LTS_names.txt" +: > "$LTS_NAMES_PATH" nvm_make_alias() { # prevent local alias creation, and store arguments echo "${1}|${2}" >> "$ALIAS_PATH" + if [ "${1}" != 'lts/*' ]; then + echo "${1#lts/}" >> "$LTS_NAMES_PATH" + fi } nvm ls-remote --lts > /dev/null