From 6575b6b0522e503248d319da9075b58d43b7813b Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 4 Jun 2020 16:15:39 -0700 Subject: [PATCH] [Fix] `install`: improved arg parsing around `--reinstall-packages-from` Fixes #1762 --- nvm.sh | 64 ++++++++++++++++--- .../install while reinstalling packages | 13 ++++ 2 files changed, 69 insertions(+), 8 deletions(-) diff --git a/nvm.sh b/nvm.sh index fdeec08..32aacff 100644 --- a/nvm.sh +++ b/nvm.sh @@ -2572,6 +2572,12 @@ nvm() { local LTS local NVM_UPGRADE_NPM NVM_UPGRADE_NPM=0 + + local PROVIDED_REINSTALL_PACKAGES_FROM + local REINSTALL_PACKAGES_FROM + local SKIP_DEFAULT_PACKAGES + local DEFAULT_PACKAGES + while [ $# -ne 0 ]; do case "$1" in ---*) @@ -2603,6 +2609,40 @@ nvm() { NVM_UPGRADE_NPM=1 shift ;; + --reinstall-packages-from=*) + if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ]; then + nvm_err '--reinstall-packages-from may not be provided more than once' + return 6 + fi + PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 27-)" + if [ -z "${PROVIDED_REINSTALL_PACKAGES_FROM}" ]; then + nvm_err 'If --reinstall-packages-from is provided, it must point to an installed version of node.' + return 6 + fi + REINSTALL_PACKAGES_FROM="$(nvm_version "${PROVIDED_REINSTALL_PACKAGES_FROM}")" ||: + shift + ;; + --copy-packages-from=*) + if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ]; then + nvm_err '--reinstall-packages-from may not be provided more than once, or combined with `--copy-packages-from`' + return 6 + fi + PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 22-)" + if [ -z "${PROVIDED_REINSTALL_PACKAGES_FROM}" ]; then + nvm_err 'If --copy-packages-from is provided, it must point to an installed version of node.' + return 6 + fi + REINSTALL_PACKAGES_FROM="$(nvm_version "${PROVIDED_REINSTALL_PACKAGES_FROM}")" ||: + shift + ;; + --reinstall-packages-from | --copy-packages-from) + nvm_err "If ${1} is provided, it must point to an installed version of node using \`=\`." + return 6 + ;; + --skip-default-packages) + SKIP_DEFAULT_PACKAGES=true + shift + ;; *) break # stop parsing args ;; @@ -2667,14 +2707,14 @@ nvm() { fi ADDITIONAL_PARAMETERS='' - local PROVIDED_REINSTALL_PACKAGES_FROM - local REINSTALL_PACKAGES_FROM - local SKIP_DEFAULT_PACKAGES - local DEFAULT_PACKAGES while [ $# -ne 0 ]; do case "$1" in --reinstall-packages-from=*) + if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ]; then + nvm_err '--reinstall-packages-from may not be provided more than once' + return 6 + fi PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 27-)" if [ -z "${PROVIDED_REINSTALL_PACKAGES_FROM}" ]; then nvm_err 'If --reinstall-packages-from is provided, it must point to an installed version of node.' @@ -2682,14 +2722,22 @@ nvm() { fi REINSTALL_PACKAGES_FROM="$(nvm_version "${PROVIDED_REINSTALL_PACKAGES_FROM}")" ||: ;; - --reinstall-packages-from) - nvm_err 'If --reinstall-packages-from is provided, it must point to an installed version of node using `=`.' - return 6 - ;; --copy-packages-from=*) + if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ]; then + nvm_err '--reinstall-packages-from may not be provided more than once, or combined with `--copy-packages-from`' + return 6 + fi PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 22-)" + if [ -z "${PROVIDED_REINSTALL_PACKAGES_FROM}" ]; then + nvm_err 'If --copy-packages-from is provided, it must point to an installed version of node.' + return 6 + fi REINSTALL_PACKAGES_FROM="$(nvm_version "${PROVIDED_REINSTALL_PACKAGES_FROM}")" ||: ;; + --reinstall-packages-from | --copy-packages-from) + nvm_err "If ${1} is provided, it must point to an installed version of node using \`=\`." + return 6 + ;; --skip-default-packages) SKIP_DEFAULT_PACKAGES=true ;; diff --git a/test/installation_node/install while reinstalling packages b/test/installation_node/install while reinstalling packages index 5588842..b180bcc 100755 --- a/test/installation_node/install while reinstalling packages +++ b/test/installation_node/install while reinstalling packages @@ -7,6 +7,7 @@ die () { echo "$@" ; exit 1; } # Remove the stuff we're clobbering. [ -e "${NVM_DIR}/versions/node/v9.7.0" ] && rm -R "${NVM_DIR}/versions/node/v9.7.0" [ -e "${NVM_DIR}/versions/node/v9.10.0" ] && rm -R "${NVM_DIR}/versions/node/v9.10.0" +[ -e "${NVM_DIR}/versions/node/v4.9.1" ] && rm -R "${NVM_DIR}/versions/node/v4.9.1" # Install from binary nvm install 9.7.0 @@ -31,3 +32,15 @@ nvm use 9 node --version | grep v9.10.0 > /dev/null || die "nvm ls 9 didn't use v9.10.0" npm list --global | grep object-is > /dev/null || die "object-is isn't installed" + + +# LTS + +nvm install --lts=argon --reinstall-packages-from=9 || die "nvm install 9.10.0 --reinstall-packages-from=9 failed" + +[ -d "${NVM_DIR}/versions/node/v4.9.1" ] || die "nvm install 4.9.1 didn't install" + +nvm use --lts=argon +node --version | grep v4.9.1 > /dev/null || die "nvm ls --lts=argon didn't use v4.9.1" + +npm list --global | grep object-is > /dev/null || die "object-is isn't installed"