From 5019c953e8968b5fccb6c51cf631b4063cfbcc6e Mon Sep 17 00:00:00 2001 From: Spencer Hakim Date: Tue, 17 May 2016 16:16:49 -0400 Subject: [PATCH 1/8] Made .travis.yml a bit more readable --- .travis.yml | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 510a86e..c490696 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,40 +3,49 @@ addons: apt_packages: - zsh - ksh + before_install: - curl --version - wget --version + install: - (mkdir /tmp/urchin && cd /tmp/urchin && curl -s "$(curl -s https://registry.npmjs.com/urchin | grep -Eo '"tarball":\s*"[^"]+"' | tail -n 1 | awk -F\" '{ print $4 }')" -O && tar -x -f urchin*) - chmod +x /tmp/urchin/package/urchin - '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y' + script: - export PATH=$(echo $PATH | sed 's/::/:/') - NVM_DIR=$TRAVIS_BUILD_DIR make TEST_SUITE=$TEST_SUITE URCHIN=/tmp/urchin/package/urchin test-$SHELL + env: - SHELL=bash TEST_SUITE=install_script + - SHELL=sh TEST_SUITE=fast - SHELL=dash TEST_SUITE=fast - SHELL=bash TEST_SUITE=fast - SHELL=zsh TEST_SUITE=fast -# - SHELL=ksh TEST_SUITE=fast + # - SHELL=ksh TEST_SUITE=fast + - SHELL=sh TEST_SUITE=slow - SHELL=dash TEST_SUITE=slow - SHELL=bash TEST_SUITE=slow - SHELL=zsh TEST_SUITE=slow -# - SHELL=ksh TEST_SUITE=slow + # - SHELL=ksh TEST_SUITE=slow + - SHELL=sh TEST_SUITE=sourcing - SHELL=dash TEST_SUITE=sourcing - SHELL=bash TEST_SUITE=sourcing - SHELL=zsh TEST_SUITE=sourcing -# - SHELL=ksh TEST_SUITE=sourcing + # - SHELL=ksh TEST_SUITE=sourcing + - SHELL=sh TEST_SUITE=installation -# - SHELL=sh TEST_SUITE=installation WITHOUT_CURL=1 - SHELL=dash TEST_SUITE=installation -# - SHELL=dash TEST_SUITE=installation WITHOUT_CURL=1 - SHELL=bash TEST_SUITE=installation -# - SHELL=bash TEST_SUITE=installation WITHOUT_CURL=1 - SHELL=zsh TEST_SUITE=installation -# - SHELL=zsh TEST_SUITE=installation WITHOUT_CURL=1 -# - SHELL=ksh TEST_SUITE=installation -# - SHELL=ksh TEST_SUITE=installation WITHOUT_CURL=1 + # - SHELL=ksh TEST_SUITE=installation + + # - SHELL=sh TEST_SUITE=installation WITHOUT_CURL=1 + # - SHELL=dash TEST_SUITE=installation WITHOUT_CURL=1 + # - SHELL=bash TEST_SUITE=installation WITHOUT_CURL=1 + # - SHELL=zsh TEST_SUITE=installation WITHOUT_CURL=1 + # - SHELL=ksh TEST_SUITE=installation WITHOUT_CURL=1 From f0f66b06c0911dea779b50c577cb36c78b49f36e Mon Sep 17 00:00:00 2001 From: Spencer Hakim Date: Tue, 17 May 2016 16:18:05 -0400 Subject: [PATCH 2/8] Added test --- ...ing \"nvm upgrade\" installs latest v0.12" | 21 +++++++++++++++++++ test/slow/nvm upgrade/setup_dir | 5 +++++ test/slow/nvm upgrade/teardown_dir | 5 +++++ 3 files changed, 31 insertions(+) create mode 100755 "test/slow/nvm upgrade/Running \"nvm upgrade\" installs latest v0.12" create mode 100755 test/slow/nvm upgrade/setup_dir create mode 100755 test/slow/nvm upgrade/teardown_dir diff --git "a/test/slow/nvm upgrade/Running \"nvm upgrade\" installs latest v0.12" "b/test/slow/nvm upgrade/Running \"nvm upgrade\" installs latest v0.12" new file mode 100755 index 0000000..94b5f92 --- /dev/null +++ "b/test/slow/nvm upgrade/Running \"nvm upgrade\" installs latest v0.12" @@ -0,0 +1,21 @@ +#!/bin/sh + +die () { echo $@ ; exit 1; } + +# Source nvm +. ../../../nvm.sh + +# Install some global packages +npm install -g npm || die "npm install -g npm failed" +npm install -g object-is@0.0.0 || die "npm install -g object-is failed" +npm list --global | grep object-is > /dev/null || die "object-is isn't installed" + +# Upgrade it +nvm upgrade || die "Failed to run nvm upgrade" + +# Uninstall old version +nvm uninstall 0.12.0 + +# Make sure a newer version of 0.12 is still installed +nvm ls | grep v0.12 +[ "$?" = "0" ] || die "Failed to upgrade node" diff --git a/test/slow/nvm upgrade/setup_dir b/test/slow/nvm upgrade/setup_dir new file mode 100755 index 0000000..2657940 --- /dev/null +++ b/test/slow/nvm upgrade/setup_dir @@ -0,0 +1,5 @@ +#!/bin/sh + +. ../../../nvm.sh +nvm install 0.12.0 +nvm use 0.12.0 diff --git a/test/slow/nvm upgrade/teardown_dir b/test/slow/nvm upgrade/teardown_dir new file mode 100755 index 0000000..95f99fa --- /dev/null +++ b/test/slow/nvm upgrade/teardown_dir @@ -0,0 +1,5 @@ +#!/bin/sh + +. ../../../nvm.sh +nvm uninstall 0.12 +nvm deactivate From b7ebeb2a3fadd439a9a6685aa0eb78db2c091ccf Mon Sep 17 00:00:00 2001 From: Spencer Hakim Date: Tue, 17 May 2016 16:31:20 -0400 Subject: [PATCH 3/8] Initial implementation for nvm upgrade --- nvm.sh | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/nvm.sh b/nvm.sh index 7e9d1d0..2768cdc 100644 --- a/nvm.sh +++ b/nvm.sh @@ -1954,6 +1954,42 @@ nvm() { fi return $? ;; + "upgrade" ) + local current_version + current_version="$(nvm_ls_current)" + + if [ $current_version = "none" ]; then + nvm_err 'No version currently active, cannot upgrade' + return 1 + fi + + if [ $current_version = "system" ]; then + nvm_err 'Cannot upgrade the system version of node' + return 1 + fi + + local semver_major + semver_major="$(echo $current_version | sed 's/v\([0-9]\+\)\.\([0-9]\+\).*/\1/')" + + local semver_minor + semver_minor="$(echo $current_version | sed 's/v\([0-9]\+\)\.\([0-9]\+\).*/\2/')" + + local install_version + if [ $semver_major = '0' ]; then + install_version="v0.$semver_minor" + else + install_version="v$semver_major" + fi + + if ! nvm_is_valid_version $install_version; then + nvm_err 'Failed to determine current version' + return 1 + fi + + nvm_echo "Upgrading $current_version to the latest $install_version" + nvm install $install_version --reinstall-packages-from=$current_version + return $? + ;; "uninstall" ) if [ $# -ne 2 ]; then >&2 nvm --help From 5a59b9828a622616dbb9849a33273aabf007c7d3 Mon Sep 17 00:00:00 2001 From: Spencer Hakim Date: Tue, 17 May 2016 16:44:28 -0400 Subject: [PATCH 4/8] Move nvm use --- .../nvm upgrade/Running \"nvm upgrade\" installs latest v0.12" | 3 ++- test/slow/nvm upgrade/setup_dir | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git "a/test/slow/nvm upgrade/Running \"nvm upgrade\" installs latest v0.12" "b/test/slow/nvm upgrade/Running \"nvm upgrade\" installs latest v0.12" index 94b5f92..92bc682 100755 --- "a/test/slow/nvm upgrade/Running \"nvm upgrade\" installs latest v0.12" +++ "b/test/slow/nvm upgrade/Running \"nvm upgrade\" installs latest v0.12" @@ -2,8 +2,9 @@ die () { echo $@ ; exit 1; } -# Source nvm +# Source nvm and activate 0.12.0 . ../../../nvm.sh +nvm use 0.12.0 # Install some global packages npm install -g npm || die "npm install -g npm failed" diff --git a/test/slow/nvm upgrade/setup_dir b/test/slow/nvm upgrade/setup_dir index 2657940..15cbc05 100755 --- a/test/slow/nvm upgrade/setup_dir +++ b/test/slow/nvm upgrade/setup_dir @@ -2,4 +2,3 @@ . ../../../nvm.sh nvm install 0.12.0 -nvm use 0.12.0 From 2f3e3c12cb1d1b0d45ef10510fb404b7b4554f41 Mon Sep 17 00:00:00 2001 From: Spencer Hakim Date: Tue, 17 May 2016 17:57:44 -0400 Subject: [PATCH 5/8] Optionally specify version --- nvm.sh | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/nvm.sh b/nvm.sh index 2768cdc..116c0e6 100644 --- a/nvm.sh +++ b/nvm.sh @@ -1955,24 +1955,33 @@ nvm() { return $? ;; "upgrade" ) - local current_version - current_version="$(nvm_ls_current)" + local base_version + base_version="$(nvm_ls_current)" - if [ $current_version = "none" ]; then + if [ $# -ge 2 ]; then + base_version="$(nvm_match_version $2)" + + if [ $base_version = "N/A" ]; then + nvm_err 'Cannot find the specified version' + return 1 + fi + fi + + if [ $base_version = "none" ]; then nvm_err 'No version currently active, cannot upgrade' return 1 fi - if [ $current_version = "system" ]; then + if [ $base_version = "system" ]; then nvm_err 'Cannot upgrade the system version of node' return 1 fi local semver_major - semver_major="$(echo $current_version | sed 's/v\([0-9]\+\)\.\([0-9]\+\).*/\1/')" + semver_major="$(echo $base_version | sed 's/v\([0-9]\+\)\.\([0-9]\+\).*/\1/')" local semver_minor - semver_minor="$(echo $current_version | sed 's/v\([0-9]\+\)\.\([0-9]\+\).*/\2/')" + semver_minor="$(echo $base_version | sed 's/v\([0-9]\+\)\.\([0-9]\+\).*/\2/')" local install_version if [ $semver_major = '0' ]; then @@ -1986,8 +1995,8 @@ nvm() { return 1 fi - nvm_echo "Upgrading $current_version to the latest $install_version" - nvm install $install_version --reinstall-packages-from=$current_version + nvm_echo "Upgrading $base_version to the latest $install_version" + nvm install $install_version --reinstall-packages-from=$base_version return $? ;; "uninstall" ) From 4c74d178429f3c6260bc6d391414e5c6cf36cd36 Mon Sep 17 00:00:00 2001 From: Spencer Hakim Date: Tue, 17 May 2016 17:58:01 -0400 Subject: [PATCH 6/8] Added help info --- nvm.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/nvm.sh b/nvm.sh index 116c0e6..d884b3d 100644 --- a/nvm.sh +++ b/nvm.sh @@ -1740,6 +1740,7 @@ nvm() { nvm_echo ' nvm --version Print out the latest released version of nvm' nvm_echo ' nvm install [-s] Download and install a , [-s] from source. Uses .nvmrc if available' nvm_echo ' --reinstall-packages-from= When installing, reinstall packages installed in ' + nvm_echo ' nvm upgrade [] Upgrade to the latest minor/patch version' nvm_echo ' nvm uninstall Uninstall a version' nvm_echo ' nvm use [--silent] Modify PATH to use . Uses .nvmrc if available' nvm_echo ' nvm exec [--silent] [] Run on . Uses .nvmrc if available' From bd142a8421dc4247d0e6aff83e38fbc5d55c54e0 Mon Sep 17 00:00:00 2001 From: Spencer Hakim Date: Wed, 18 May 2016 10:23:42 -0400 Subject: [PATCH 7/8] Revert "Made .travis.yml a bit more readable" This reverts commit 5019c953e8968b5fccb6c51cf631b4063cfbcc6e. --- .travis.yml | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index c490696..510a86e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,49 +3,40 @@ addons: apt_packages: - zsh - ksh - before_install: - curl --version - wget --version - install: - (mkdir /tmp/urchin && cd /tmp/urchin && curl -s "$(curl -s https://registry.npmjs.com/urchin | grep -Eo '"tarball":\s*"[^"]+"' | tail -n 1 | awk -F\" '{ print $4 }')" -O && tar -x -f urchin*) - chmod +x /tmp/urchin/package/urchin - '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y' - script: - export PATH=$(echo $PATH | sed 's/::/:/') - NVM_DIR=$TRAVIS_BUILD_DIR make TEST_SUITE=$TEST_SUITE URCHIN=/tmp/urchin/package/urchin test-$SHELL - env: - SHELL=bash TEST_SUITE=install_script - - SHELL=sh TEST_SUITE=fast - SHELL=dash TEST_SUITE=fast - SHELL=bash TEST_SUITE=fast - SHELL=zsh TEST_SUITE=fast - # - SHELL=ksh TEST_SUITE=fast - +# - SHELL=ksh TEST_SUITE=fast - SHELL=sh TEST_SUITE=slow - SHELL=dash TEST_SUITE=slow - SHELL=bash TEST_SUITE=slow - SHELL=zsh TEST_SUITE=slow - # - SHELL=ksh TEST_SUITE=slow - +# - SHELL=ksh TEST_SUITE=slow - SHELL=sh TEST_SUITE=sourcing - SHELL=dash TEST_SUITE=sourcing - SHELL=bash TEST_SUITE=sourcing - SHELL=zsh TEST_SUITE=sourcing - # - SHELL=ksh TEST_SUITE=sourcing - +# - SHELL=ksh TEST_SUITE=sourcing - SHELL=sh TEST_SUITE=installation +# - SHELL=sh TEST_SUITE=installation WITHOUT_CURL=1 - SHELL=dash TEST_SUITE=installation +# - SHELL=dash TEST_SUITE=installation WITHOUT_CURL=1 - SHELL=bash TEST_SUITE=installation +# - SHELL=bash TEST_SUITE=installation WITHOUT_CURL=1 - SHELL=zsh TEST_SUITE=installation - # - SHELL=ksh TEST_SUITE=installation - - # - SHELL=sh TEST_SUITE=installation WITHOUT_CURL=1 - # - SHELL=dash TEST_SUITE=installation WITHOUT_CURL=1 - # - SHELL=bash TEST_SUITE=installation WITHOUT_CURL=1 - # - SHELL=zsh TEST_SUITE=installation WITHOUT_CURL=1 - # - SHELL=ksh TEST_SUITE=installation WITHOUT_CURL=1 +# - SHELL=zsh TEST_SUITE=installation WITHOUT_CURL=1 +# - SHELL=ksh TEST_SUITE=installation +# - SHELL=ksh TEST_SUITE=installation WITHOUT_CURL=1 From ba5f880847b033a519cc6c7dc6741148a04e36f2 Mon Sep 17 00:00:00 2001 From: Spencer Hakim Date: Wed, 18 May 2016 13:45:48 -0400 Subject: [PATCH 8/8] Addressed some PR comments --- nvm.sh | 61 ++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/nvm.sh b/nvm.sh index d884b3d..25a719b 100644 --- a/nvm.sh +++ b/nvm.sh @@ -403,6 +403,31 @@ nvm_num_version_groups() { nvm_echo "${#NVM_NUM_GROUPS}" } +nvm_get_upgrade_version() { + if [ $# -lt 1 ]; then + nvm_echo 'N/A' + return 1 + fi + + local VERSION + VERSION="$1" + + local semver_major + semver_major="$(nvm_echo \"$base_version\" | command sed -e 's/v\([0-9]\+\)\.\([0-9]\+\).*/\1/')" + + local semver_minor + semver_minor="$(nvm_echo \"$base_version\" | command sed -e 's/v\([0-9]\+\)\.\([0-9]\+\).*/\2/')" + + local install_version + if [ $semver_major = '0' ]; then + install_version="v0.$semver_minor" + else + install_version="v$semver_major" + fi + + nvm_echo "$(nvm_remote_version \"$install_version\")" +} + nvm_strip_path() { if [ -z "${NVM_DIR-}" ]; then nvm_err '$NVM_DIR not set!' @@ -1960,44 +1985,30 @@ nvm() { base_version="$(nvm_ls_current)" if [ $# -ge 2 ]; then - base_version="$(nvm_match_version $2)" - - if [ $base_version = "N/A" ]; then - nvm_err 'Cannot find the specified version' - return 1 - fi + base_version="$(nvm_match_version \"$1\")" fi - if [ $base_version = "none" ]; then + if [ $base_version = 'none' ]; then nvm_err 'No version currently active, cannot upgrade' return 1 fi - if [ $base_version = "system" ]; then + if [ $base_version = 'system' ]; then nvm_err 'Cannot upgrade the system version of node' return 1 fi - local semver_major - semver_major="$(echo $base_version | sed 's/v\([0-9]\+\)\.\([0-9]\+\).*/\1/')" - - local semver_minor - semver_minor="$(echo $base_version | sed 's/v\([0-9]\+\)\.\([0-9]\+\).*/\2/')" - local install_version - if [ $semver_major = '0' ]; then - install_version="v0.$semver_minor" - else - install_version="v$semver_major" + install_version="$(nvm_get_upgrade_version \"$base_version\")" + + if [ $install_version = 'N/A' ]; then + nvm_err 'Unable to determine the version to upgrade to' + return 2 fi - if ! nvm_is_valid_version $install_version; then - nvm_err 'Failed to determine current version' - return 1 - fi - - nvm_echo "Upgrading $base_version to the latest $install_version" - nvm install $install_version --reinstall-packages-from=$base_version + nvm_echo "Upgrading $base_version to $install_version" + nvm_echo "($base_version will remain installed. Please adjust your aliases as necessary.)" + nvm install "$install_version" --reinstall-packages-from="$base_version" return $? ;; "uninstall" )