From 005e29a22382c5fbc0edbaa8278614c52da88f74 Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Sun, 17 Apr 2016 22:22:37 +0100 Subject: [PATCH 01/48] Check dir permissions before attempting to nvm uninstall --- nvm.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/nvm.sh b/nvm.sh index 0e1c9dc..b712838 100755 --- a/nvm.sh +++ b/nvm.sh @@ -1828,6 +1828,17 @@ nvm() { NVM_PREFIX="$(nvm_node_prefix)" NVM_SUCCESS_MSG="Uninstalled node $VERSION" fi + + # Check version dir permissions + local FILES_WITHOUT_WRITE_PERMISIONS="$(find "$VERSION_PATH" -exec [ ! -w "{}" ] \; -exec echo "{}" \;)" + if [ "$FILES_WITHOUT_WRITE_PERMISIONS" ]; then + >&2 echo 'Cannot uninstall, incorrect permissions on installation folder.' + >&2 echo 'This is usually caused by running `npm install -g` as root. Run the following command as root to fix the permissions and then try again.' + >&2 echo + >&2 echo " chown -R $(whoami) \"$VERSION_PATH\"" + return 1 + fi + # Delete all files related to target version. command rm -rf "$NVM_DIR/src/$NVM_PREFIX-$VERSION" \ "$NVM_DIR/src/$NVM_PREFIX-$VERSION.tar.*" \ From 6fb528f4e49a673103ad669f0e49bd5acb919f16 Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Sun, 17 Apr 2016 22:23:56 +0100 Subject: [PATCH 02/48] Add slow test to check nvm uninstall --- ...nvm uninstall 0.12.6\" uninstalls v0.12.6" | 28 +++++++++++++++++++ test/slow/nvm uninstall/setup_dir | 4 +++ test/slow/nvm uninstall/teardown_dir | 5 ++++ 3 files changed, 37 insertions(+) create mode 100755 "test/slow/nvm uninstall/Running \"nvm uninstall 0.12.6\" uninstalls v0.12.6" create mode 100755 test/slow/nvm uninstall/setup_dir create mode 100755 test/slow/nvm uninstall/teardown_dir diff --git "a/test/slow/nvm uninstall/Running \"nvm uninstall 0.12.6\" uninstalls v0.12.6" "b/test/slow/nvm uninstall/Running \"nvm uninstall 0.12.6\" uninstalls v0.12.6" new file mode 100755 index 0000000..9af0171 --- /dev/null +++ "b/test/slow/nvm uninstall/Running \"nvm uninstall 0.12.6\" uninstalls v0.12.6" @@ -0,0 +1,28 @@ +#!/bin/sh + +die () { echo $@ ; exit 1; } + +# Source nvm +. ../../../nvm.sh + +# Version to install/uninstall +NVM_TEST_VERSION=0.12.6 + +# Make sure it's not already here +[ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION + +# Install it +nvm install $NVM_TEST_VERSION + +# Make sure it installed +nvm ls | grep "$NVM_TEST_VERSION" || die "Failed to install node" + +# Switch to another version so we can uninstall +nvm use 0.12.7 + +# Uninstall it +nvm uninstall $NVM_TEST_VERSION + +# Make sure it uninstalled +nvm ls | grep "$NVM_TEST_VERSION" +[ "$?" != "0" ] || die "Failed to uninstall node" diff --git a/test/slow/nvm uninstall/setup_dir b/test/slow/nvm uninstall/setup_dir new file mode 100755 index 0000000..f385d98 --- /dev/null +++ b/test/slow/nvm uninstall/setup_dir @@ -0,0 +1,4 @@ +#!/bin/sh + +. ../../../nvm.sh +nvm install 0.12.7 diff --git a/test/slow/nvm uninstall/teardown_dir b/test/slow/nvm uninstall/teardown_dir new file mode 100755 index 0000000..f505f21 --- /dev/null +++ b/test/slow/nvm uninstall/teardown_dir @@ -0,0 +1,5 @@ +#!/bin/sh + +. ../../../nvm.sh +nvm uninstall 0.12.7 +nvm deactivate From dff4f80f325146783162f57f6f26629bf240ef8d Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Sun, 17 Apr 2016 22:26:09 +0100 Subject: [PATCH 03/48] Add fast test to check nvm uninstall with file permission error --- ..." with incorrect file permissions fails nicely" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100755 "test/fast/Running \"nvm uninstall\" with incorrect file permissions fails nicely" diff --git "a/test/fast/Running \"nvm uninstall\" with incorrect file permissions fails nicely" "b/test/fast/Running \"nvm uninstall\" with incorrect file permissions fails nicely" new file mode 100755 index 0000000..1fad640 --- /dev/null +++ "b/test/fast/Running \"nvm uninstall\" with incorrect file permissions fails nicely" @@ -0,0 +1,14 @@ +#!/bin/sh + +cd ../.. +mkdir v0.0.1 +mkdir src/node-v0.0.1 + +sudo touch v0.0.1/sudo + +. ./nvm.sh + +RETURN_MESSAGE="$(nvm uninstall v0.0.1 2>&1)" +CHECK_FOR="Cannot uninstall, incorrect permissions on installation folder" + +test "${RETURN_MESSAGE#*$CHECK_FOR}" != "$RETURN_MESSAGE" || exit 1 From 5970a06b197085a7104121f0d78beedd33313d0e Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Mon, 18 Apr 2016 22:08:40 +0100 Subject: [PATCH 04/48] Add slow test to check nvm uninstall with file permission error --- ...h incorrect file permissions fails nicely" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 "test/slow/nvm uninstall/Running \"nvm uninstall\" with incorrect file permissions fails nicely" diff --git "a/test/slow/nvm uninstall/Running \"nvm uninstall\" with incorrect file permissions fails nicely" "b/test/slow/nvm uninstall/Running \"nvm uninstall\" with incorrect file permissions fails nicely" new file mode 100755 index 0000000..eff2bc4 --- /dev/null +++ "b/test/slow/nvm uninstall/Running \"nvm uninstall\" with incorrect file permissions fails nicely" @@ -0,0 +1,30 @@ +#!/bin/sh + +die () { echo $@ ; exit 1; } + +# Source nvm +. ../../../nvm.sh + +# Version to install/uninstall +NVM_TEST_VERSION=5.10.1 + +# Make sure it's not already here +[ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION + +# Install it +nvm install $NVM_TEST_VERSION + +# Make sure it installed +nvm ls | grep "$NVM_TEST_VERSION" || die "Failed to install node" + +# Install global module as root +npm_path=$(which npm) +sudo "$npm_path" install jspm -g + +# Switch to another version so we can uninstall +nvm use 0.12.7 + +# Attempt to uninstall it +RETURN_MESSAGE="$(nvm uninstall $NVM_TEST_VERSION 2>&1)" +CHECK_FOR="Cannot uninstall, incorrect permissions on installation folder" +test "${RETURN_MESSAGE#*$CHECK_FOR}" != "$RETURN_MESSAGE" || die "Failed to show error message" From 3a2d35f1670f170167c773cc1f6a23196d58be5e Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Tue, 19 Apr 2016 01:40:16 +0100 Subject: [PATCH 05/48] Check permissions in shell rather than using find -exec --- nvm.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/nvm.sh b/nvm.sh index b712838..926ca35 100755 --- a/nvm.sh +++ b/nvm.sh @@ -1830,8 +1830,18 @@ nvm() { fi # Check version dir permissions - local FILES_WITHOUT_WRITE_PERMISIONS="$(find "$VERSION_PATH" -exec [ ! -w "{}" ] \; -exec echo "{}" \;)" - if [ "$FILES_WITHOUT_WRITE_PERMISIONS" ]; then + local PERMISSIONS_OK=true + check_file_permissions() { + for FILE in $1/* $1/.[!.]* $1/..?* ; do + if [ -d "$FILE" ]; then + check_file_permissions "$FILE" + elif [ -e "$FILE" ]; then + [ ! -w "$FILE" ] && PERMISSIONS_OK=false + fi + done + } + check_file_permissions "$VERSION_PATH" + if [ "$PERMISSIONS_OK" = false ]; then >&2 echo 'Cannot uninstall, incorrect permissions on installation folder.' >&2 echo 'This is usually caused by running `npm install -g` as root. Run the following command as root to fix the permissions and then try again.' >&2 echo From 755c39209e484f4f4bd3a2e197c66e6df0bc0b6f Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Mon, 18 Apr 2016 18:23:24 -0700 Subject: [PATCH 06/48] [Refactor] make `check_file_permissions` be pure instead of relying on a closure. Also, make it return early, to be a bit more efficient. (from #847) --- nvm.sh | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/nvm.sh b/nvm.sh index 926ca35..2b933bc 100755 --- a/nvm.sh +++ b/nvm.sh @@ -1535,6 +1535,20 @@ nvm_is_natural_num() { esac } +# Check version dir permissions +nvm_check_file_permissions() { + for FILE in $1/* $1/.[!.]* $1/..?* ; do + if [ -d "$FILE" ]; then + if ! nvm_check_file_permissions "$FILE"; then + return 2 + fi + elif [ -e "$FILE" ] && [ ! -w "$FILE" ]; then + return 1 + fi + done + return 0 +} + nvm() { if [ $# -lt 1 ]; then nvm help @@ -1829,19 +1843,7 @@ nvm() { NVM_SUCCESS_MSG="Uninstalled node $VERSION" fi - # Check version dir permissions - local PERMISSIONS_OK=true - check_file_permissions() { - for FILE in $1/* $1/.[!.]* $1/..?* ; do - if [ -d "$FILE" ]; then - check_file_permissions "$FILE" - elif [ -e "$FILE" ]; then - [ ! -w "$FILE" ] && PERMISSIONS_OK=false - fi - done - } - check_file_permissions "$VERSION_PATH" - if [ "$PERMISSIONS_OK" = false ]; then + if ! nvm_check_file_permissions "$VERSION_PATH"; then >&2 echo 'Cannot uninstall, incorrect permissions on installation folder.' >&2 echo 'This is usually caused by running `npm install -g` as root. Run the following command as root to fix the permissions and then try again.' >&2 echo @@ -2384,7 +2386,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' nvm_ls_remote nvm_ls_remote_iojs nvm_ls_remote_index_tab \ nvm_ls nvm_remote_version nvm_remote_versions \ nvm_install_iojs_binary nvm_install_node_binary \ - nvm_install_node_source \ + nvm_install_node_source nvm_check_file_permissions \ nvm_version nvm_rc_version nvm_match_version \ nvm_ensure_default_set nvm_get_arch nvm_get_os \ nvm_print_implicit_alias nvm_validate_implicit_alias \ From ac18d018548efe4371064b02f69158e9cebc5f6e Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Mon, 18 Apr 2016 20:43:08 -0700 Subject: [PATCH 07/48] [Tests] update index.tab data mocks. --- .../fast/Unit tests/nodejs.org-dist-index.tab | 166 ++++++++++-------- test/fast/Unit tests/nvm_ls_remote | 5 +- 2 files changed, 99 insertions(+), 72 deletions(-) diff --git a/test/fast/Unit tests/nodejs.org-dist-index.tab b/test/fast/Unit tests/nodejs.org-dist-index.tab index 030ddb9..073bac7 100644 --- a/test/fast/Unit tests/nodejs.org-dist-index.tab +++ b/test/fast/Unit tests/nodejs.org-dist-index.tab @@ -1,18 +1,43 @@ version date files npm v8 uv zlib openssl modules lts +v5.10.1 2016-04-05 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.8.3 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - +v5.10.0 2016-04-01 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.8.3 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - +v5.9.1 2016-03-22 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.7.3 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - +v5.9.0 2016-03-16 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.7.3 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - +v5.8.0 2016-03-09 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.7.3 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - +v5.7.1 2016-03-02 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.6.0 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - +v5.7.0 2016-02-23 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.6.0 4.6.85.31 1.8.0 1.2.8 1.0.2f 47 - +v5.6.0 2016-02-09 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.6.0 4.6.85.31 1.8.0 1.2.8 1.0.2f 47 - +v5.5.0 2016-01-21 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.3.12 4.6.85.31 1.8.0 1.2.8 1.0.2e 47 - +v5.4.1 2016-01-12 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.3.12 4.6.85.31 1.8.0 1.2.8 1.0.2e 47 - +v5.4.0 2016-01-06 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.3.12 4.6.85.31 1.8.0 1.2.8 1.0.2e 47 - v5.3.0 2015-12-15 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.3.12 4.6.85.31 1.8.0 1.2.8 1.0.2e 47 - v5.2.0 2015-12-09 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.3.12 4.6.85.31 1.7.5 1.2.8 1.0.2e 47 - v5.1.1 2015-12-03 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.3.12 4.6.85.31 1.7.5 1.2.8 1.0.2e 47 - v5.1.0 2015-11-17 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.3.12 4.6.85.31 1.7.5 1.2.8 1.0.2d 47 - v5.0.0 2015-10-29 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.3.6 4.6.85.28 1.7.5 1.2.8 1.0.2d 47 - +v4.4.3 2016-04-12 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.15.1 4.5.103.35 1.8.0 1.2.8 1.0.2g 46 Argon +v4.4.2 2016-04-01 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.15.0 4.5.103.35 1.8.0 1.2.8 1.0.2g 46 Argon +v4.4.1 2016-03-22 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.20 4.5.103.35 1.8.0 1.2.8 1.0.2g 46 Argon +v4.4.0 2016-03-08 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.20 4.5.103.35 1.8.0 1.2.8 1.0.2g 46 Argon +v4.3.2 2016-03-02 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.12 4.5.103.35 1.8.0 1.2.8 1.0.2g 46 Argon +v4.3.1 2016-02-16 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.12 4.5.103.35 1.8.0 1.2.8 1.0.2f 46 Argon +v4.3.0 2016-02-09 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.12 4.5.103.35 1.8.0 1.2.8 1.0.2f 46 Argon +v4.2.6 2016-01-21 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.12 4.5.103.35 1.8.0 1.2.8 1.0.2e 46 Argon +v4.2.5 2016-01-20 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.12 4.5.103.35 1.8.0 1.2.8 1.0.2e 46 Argon +v4.2.4 2015-12-23 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.12 4.5.103.35 1.7.5 1.2.8 1.0.2e 46 Argon v4.2.3 2015-12-03 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.7 4.5.103.35 1.7.5 1.2.8 1.0.2e 46 Argon v4.2.2 2015-11-03 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.7 4.5.103.35 1.7.5 1.2.8 1.0.2d 46 Argon v4.2.1 2015-10-13 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.7 4.5.103.35 1.7.5 1.2.8 1.0.2d 46 Argon v4.2.0 2015-10-12 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.7 4.5.103.35 1.7.5 1.2.8 1.0.2d 46 Argon v4.1.2 2015-10-05 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.4 4.5.103.35 1.7.5 1.2.8 1.0.2d 46 - v4.1.1 2015-09-23 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.4 4.5.103.33 1.7.4 1.2.8 1.0.2d 46 - -v4.1.0 2015-09-18 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.3 4.5.103.33 1.7.4 1.2.8 1.0.2d 46 - +v4.1.0 2015-09-17 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.3 4.5.103.33 1.7.4 1.2.8 1.0.2d 46 - v4.0.0 2015-09-08 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 2.14.2 4.5.103.30 1.7.3 1.2.8 1.0.2d 46 - -v0.12.9 2015-12-03 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.14.9 3.28.71.19 1.6.1 1.2.8 1.0.1p 14 - +v0.12.13 2016-03-31 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.15.0 3.28.71.19 1.6.1 1.2.8 1.0.1s 14 - +v0.12.12 2016-03-08 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.14.9 3.28.71.19 1.6.1 1.2.8 1.0.1s 14 - +v0.12.11 2016-03-03 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.14.9 3.28.71.19 1.6.1 1.2.8 1.0.1s 14 - +v0.12.10 2016-02-09 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.14.9 3.28.71.19 1.6.1 1.2.8 1.0.1r 14 - +v0.12.9 2015-12-03 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.14.9 3.28.71.19 1.6.1 1.2.8 1.0.1q 14 - v0.12.8 2015-11-24 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.14.9 3.28.71.19 1.6.1 1.2.8 1.0.1p 14 - v0.12.7 2015-07-09 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.11.3 3.28.71.19 1.6.1 1.2.8 1.0.1p 14 - v0.12.6 2015-07-04 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.11.2 3.28.71.19 1.6.1 1.2.8 1.0.1o 14 - @@ -24,27 +49,30 @@ v0.12.1 2015-03-24 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,s v0.12.0 2015-02-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.5.1 3.28.73.0 1.0.2 1.2.8 1.0.1l 14 - v0.11.16 2015-01-30 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.3.0 3.28.73.0 1.0.2 1.2.8 1.0.1l 14 - v0.11.15 2015-01-20 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.1.6 3.28.73.0 1.0.2 1.2.8 1.0.1j 14 - -v0.11.14 2015-01-16 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.0.0 3.26.33.0 1.0.0 1.2.3 1.0.1i 14 - +v0.11.14 2014-08-19 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.0.0 3.26.33.0 1.0.0 1.2.3 1.0.1i 14 - v0.11.13 2014-05-02 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.9 3.25.30.0 0.11.25 1.2.3 1.0.1g 14 - -v0.11.12 2014-04-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.3 3.22.24.19 0.11.22 1.2.3 1.0.1f 14 - -v0.11.11 2014-04-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.25 3.22.24.19 0.11.18 1.2.3 1.0.1f 14 - -v0.11.10 2014-04-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.22 3.22.24.10 0.11.17 1.2.3 1.0.1e 13 - -v0.11.9 2013-12-02 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.15 3.22.24.5 0.11.15 1.2.3 1.0.1e 13 - -v0.11.8 2013-12-02 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.13 3.21.18.3 0.11.14 1.2.3 1.0.1e 13 - -v0.11.7 2013-10-09 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.8 3.20.17.0 0.11.13 1.2.3 1.0.1e 0x000C - -v0.11.6 2013-08-22 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x86-msi 1.3.8 3.20.14.1 0.11.8 1.2.3 1.0.1e 0x000C - -v0.11.5 2013-08-12 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.6 3.20.11.0 0.11.7 1.2.3 1.0.1e 0x000C - +v0.11.12 2014-03-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.3 3.22.24.19 0.11.22 1.2.3 1.0.1f 14 - +v0.11.11 2014-01-29 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.25 3.22.24.19 0.11.18 1.2.3 1.0.1f 14 - +v0.11.10 2013-12-31 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.22 3.22.24.10 0.11.17 1.2.3 1.0.1e 13 - +v0.11.9 2013-11-21 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.15 3.22.24.5 0.11.15 1.2.3 1.0.1e 13 - +v0.11.8 2013-10-30 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.13 3.21.18.3 0.11.14 1.2.3 1.0.1e 13 - +v0.11.7 2013-09-04 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.8 3.20.17.0 0.11.13 1.2.3 1.0.1e 0x000C - +v0.11.6 2013-08-21 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x86-msi 1.3.8 3.20.14.1 0.11.8 1.2.3 1.0.1e 0x000C - +v0.11.5 2013-08-07 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.6 3.20.11.0 0.11.7 1.2.3 1.0.1e 0x000C - v0.11.4 2013-07-12 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x86-msi 1.3.4 3.20.2.0 0.11.5 1.2.3 1.0.1e 0x000C - v0.11.3 2013-06-26 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.25 3.19.13.0 0.11.5 1.2.3 1.0.1e 0x000C - v0.11.2 2013-05-13 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.21 3.19.0.0 0.11.2 1.2.3 1.0.1e 0x000C - v0.11.1 2013-04-19 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.18 3.18.0.0 0.11.1 1.2.3 1.0.1e 0x000C - -v0.11.0 2013-04-01 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.15 3.17.13.0 0.10.3 1.2.3 1.0.1e 0x000C - -v0.10.41 2015-12-03 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.29 3.14.5.9 0.10.36 1.2.8 1.0.1p 11 - +v0.11.0 2013-03-28 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.15 3.17.13.0 0.10.3 1.2.3 1.0.1e 0x000C - +v0.10.44 2016-03-31 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 2.15.0 3.14.5.9 0.10.36 1.2.8 1.0.1s 11 - +v0.10.43 2016-03-03 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.29 3.14.5.9 0.10.36 1.2.8 1.0.1s 11 - +v0.10.42 2016-02-09 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.29 3.14.5.9 0.10.36 1.2.8 1.0.1r 11 - +v0.10.41 2015-12-03 headers,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.29 3.14.5.9 0.10.36 1.2.8 1.0.1q 11 - v0.10.40 2015-07-09 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.36 1.2.8 1.0.1p 11 - v0.10.39 2015-06-19 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.36 1.2.8 1.0.1o 11 - v0.10.38 2015-03-23 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.36 1.2.8 1.0.1m 11 - -v0.10.37 2015-03-12 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.36 1.2.8 1.0.1l 11 - -v0.10.36 2015-01-30 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.30 1.2.8 1.0.1l 11 - +v0.10.37 2015-03-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.36 1.2.8 1.0.1l 11 - +v0.10.36 2015-01-26 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.30 1.2.8 1.0.1l 11 - v0.10.35 2014-12-22 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.30 1.2.8 1.0.1j 11 - v0.10.34 2014-12-17 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.30 1.2.8 1.0.1j 11 - v0.10.33 2014-10-21 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.28 3.14.5.9 0.10.29 1.2.3 1.0.1j 11 - @@ -52,47 +80,47 @@ v0.10.32 2014-09-16 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src, v0.10.31 2014-08-19 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.23 3.14.5.9 0.10.28 1.2.3 1.0.1i 11 - v0.10.30 2014-07-31 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.21 3.14.5.9 0.10.28 1.2.3 1.0.1h 11 - v0.10.29 2014-06-09 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.14 3.14.5.9 0.10.27 1.2.3 1.0.1h 11 - -v0.10.28 2014-06-13 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.9 3.14.5.9 0.10.27 1.2.3 1.0.1g 11 - -v0.10.27 2014-08-07 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.8 3.14.5.9 0.10.27 1.2.3 1.0.1g 11 - -v0.10.26 2014-04-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.3 3.14.5.9 0.10.25 1.2.3 1.0.1e 11 - -v0.10.25 2014-04-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.24 3.14.5.9 0.10.23 1.2.3 1.0.1e 11 - +v0.10.28 2014-05-02 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.9 3.14.5.9 0.10.27 1.2.3 1.0.1g 11 - +v0.10.27 2014-05-01 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.8 3.14.5.9 0.10.27 1.2.3 1.0.1g 11 - +v0.10.26 2014-02-18 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.4.3 3.14.5.9 0.10.25 1.2.3 1.0.1e 11 - +v0.10.25 2014-01-23 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.24 3.14.5.9 0.10.23 1.2.3 1.0.1e 11 - v0.10.24 2013-12-19 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.21 3.14.5.9 0.10.21 1.2.3 1.0.1e 11 - v0.10.23 2013-12-12 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.17 3.14.5.9 0.10.20 1.2.3 1.0.1e 11 - -v0.10.22 2013-12-02 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.14 3.14.5.9 0.10.19 1.2.3 1.0.1e 11 - +v0.10.22 2013-11-12 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.14 3.14.5.9 0.10.19 1.2.3 1.0.1e 11 - v0.10.21 2013-10-18 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.11 3.14.5.9 0.10.18 1.2.3 1.0.1e 11 - v0.10.20 2013-09-30 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.11 3.14.5.9 0.10.17 1.2.3 1.0.1e 11 - -v0.10.19 2013-09-26 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.11 3.14.5.9 0.10.17 1.2.3 1.0.1e 11 - -v0.10.18 2013-10-09 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.8 3.14.5.9 0.10.15 1.2.3 1.0.1e 11 - -v0.10.17 2013-08-25 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.8 3.14.5.9 0.10.14 1.2.3 1.0.1e 11 - +v0.10.19 2013-09-24 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.11 3.14.5.9 0.10.17 1.2.3 1.0.1e 11 - +v0.10.18 2013-09-04 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.8 3.14.5.9 0.10.15 1.2.3 1.0.1e 11 - +v0.10.17 2013-08-21 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.8 3.14.5.9 0.10.14 1.2.3 1.0.1e 11 - v0.10.16 2013-08-16 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.8 3.14.5.9 0.10.13 1.2.3 1.0.1e 11 - -v0.10.15 2013-08-12 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.5 3.14.5.9 0.10.13 1.2.3 1.0.1e 11 - -v0.10.14 2013-08-12 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.5 3.14.5.9 0.10.13 1.2.3 1.0.1e 11 - -v0.10.13 2013-07-13 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.2 3.14.5.9 0.10.12 1.2.3 1.0.1e 11 - +v0.10.15 2013-07-25 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.5 3.14.5.9 0.10.13 1.2.3 1.0.1e 11 - +v0.10.14 2013-07-25 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.5 3.14.5.9 0.10.13 1.2.3 1.0.1e 11 - +v0.10.13 2013-07-09 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.3.2 3.14.5.9 0.10.12 1.2.3 1.0.1e 11 - v0.10.12 2013-06-18 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.32 3.14.5.9 0.10.11 1.2.3 1.0.1e 11 - v0.10.11 2013-06-13 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.30 3.14.5.9 0.10.11 1.2.3 1.0.1e 11 - v0.10.10 2013-06-04 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.25 3.14.5.9 0.10.10 1.2.3 1.0.1e 11 - -v0.10.9 2013-06-02 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.24 3.14.5.9 0.10.9 1.2.3 1.0.1e 11 - +v0.10.9 2013-05-30 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.24 3.14.5.9 0.10.9 1.2.3 1.0.1e 11 - v0.10.8 2013-05-24 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.23 3.14.5.9 0.10.8 1.2.3 1.0.1e 11 - v0.10.7 2013-05-17 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.21 3.14.5.8 0.10.7 1.2.3 1.0.1e 11 - v0.10.6 2013-05-14 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.18 3.14.5.8 0.10.5 1.2.3 1.0.1e 11 - -v0.10.5 2013-04-26 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.18 3.14.5.8 0.10.5 1.2.3 1.0.1e 11 - -v0.10.4 2013-04-26 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.18 3.14.5.8 0.10.4 1.2.3 1.0.1e 11 - -v0.10.3 2013-04-26 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.17 3.14.5.8 0.10.3 1.2.3 1.0.1e 0x000B - +v0.10.5 2013-04-23 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.18 3.14.5.8 0.10.5 1.2.3 1.0.1e 11 - +v0.10.4 2013-04-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.18 3.14.5.8 0.10.4 1.2.3 1.0.1e 11 - +v0.10.3 2013-04-03 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.17 3.14.5.8 0.10.3 1.2.3 1.0.1e 0x000B - v0.10.2 2013-03-28 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.15 3.14.5.8 0.10.3 1.2.3 1.0.1e 0x000B - v0.10.1 2013-03-21 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.15 3.14.5.8 0.10 1.2.3 1.0.1e 0x000B - v0.10.0 2013-03-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.14 3.14.5.8 0.9 1.2.3 1.0.1e 0x000B - -v0.9.12 2013-03-07 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.12 3.14.5.8 0.9 1.2.3 1.0.1e 0x000B - +v0.9.12 2013-03-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.12 3.14.5.8 0.9 1.2.3 1.0.1e 0x000B - v0.9.11 2013-03-01 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.12 3.14.5.0 0.9 1.2.3 1.0.1e 0x000B - -v0.9.10 2013-02-25 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.12 3.15.11.15 0.9 1.2.3 1.0.1c 0x000B - +v0.9.10 2013-02-19 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.12 3.15.11.15 0.9 1.2.3 1.0.1c 0x000B - v0.9.9 2013-02-07 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.10 3.15.11.10 0.9 1.2.3 1.0.1c 0x000B - -v0.9.8 2013-02-02 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.3 3.15.11.10 0.9 1.2.3 1.0.1c 0x000A - +v0.9.8 2013-01-24 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.3 3.15.11.10 0.9 1.2.3 1.0.1c 0x000A - v0.9.7 2013-01-18 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.2 3.15.11.7 0.9 1.2.3 1.0.1c 0x000A - v0.9.6 2013-01-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.0 3.15.11.5 0.9 1.2.3 1.0.1c 0x000A - v0.9.5 2012-12-30 linux-x64,linux-x86,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.70 3.13.7.4 0.9 1.2.3 1.0.1c 0x000A - v0.9.4 2012-12-21 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.70 3.13.7.4 0.9 1.2.3 1.0.1c 0x000A - -v0.9.3 2015-10-14 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.64 3.13.7.4 0.9 1.2.3 1.0.1c 0x000A - +v0.9.3 2012-10-24 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.64 3.13.7.4 0.9 1.2.3 1.0.1c 0x000A - v0.9.2 2012-09-17 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.61 3.11.10.22 0.9 1.2.3 1.0.1c 0x000A - -v0.9.1 2012-09-13 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.59 3.11.10.19 0.9 1.2.3 1.0.0f 0x000A - +v0.9.1 2012-08-28 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.59 3.11.10.19 0.9 1.2.3 1.0.0f 0x000A - v0.9.0 2012-07-20 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.44 3.11.10.15 0.9 1.2.3 1.0.0f 1 - v0.8.28 2014-07-31 linux-x64,linux-x86,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.30 3.11.10.26 0.8 1.2.3 1.0.0f 1 - v0.8.27 2014-06-09 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x86-msi 1.2.30 3.11.10.26 0.8 1.2.3 1.0.0f 1 - @@ -100,26 +128,26 @@ v0.8.26 2013-10-18 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,s v0.8.25 2013-06-13 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.30 3.11.10.25 0.8 1.2.3 1.0.0f 1 - v0.8.24 2013-06-03 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.24 3.11.10.25 0.8 1.2.3 1.0.0f 1 - v0.8.23 2013-04-09 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.18 3.11.10.25 0.8 1.2.3 1.0.0f 1 - -v0.8.22 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.14 3.11.10.25 0.8 1.2.3 1.0.0f 1 - +v0.8.22 2013-03-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.14 3.11.10.25 0.8 1.2.3 1.0.0f 1 - v0.8.21 2013-02-25 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.11 3.11.10.25 0.8 1.2.3 1.0.0f 1 - v0.8.20 2013-02-15 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.11 3.11.10.25 0.8 1.2.3 1.0.0f 1 - -v0.8.19 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.10 3.11.10.25 0.8 1.2.3 1.0.0f 1 - +v0.8.19 2013-02-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.10 3.11.10.25 0.8 1.2.3 1.0.0f 1 - v0.8.18 2013-01-18 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.2 3.11.10.25 0.8 1.2.3 1.0.0f 1 - -v0.8.17 2013-01-13 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.0 3.11.10.25 0.8 1.2.3 1.0.0f 1 - -v0.8.16 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.69 3.11.10.25 0.8 1.2.3 1.0.0f 1 - +v0.8.17 2013-01-10 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.2.0 3.11.10.25 0.8 1.2.3 1.0.0f 1 - +v0.8.16 2012-12-12 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.69 3.11.10.25 0.8 1.2.3 1.0.0f 1 - v0.8.15 2012-11-26 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.66 3.11.10.25 0.8 1.2.3 1.0.0f 1 - -v0.8.14 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.65 3.11.10.25 0.8 1.2.3 1.0.0f 1 - -v0.8.13 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.65 3.11.10.25 0.8 1.2.3 1.0.0f 1 - -v0.8.12 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.63 3.11.10.22 0.8 1.2.3 1.0.0f 1 - -v0.8.11 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.62 3.11.10.22 0.8 1.2.3 1.0.0f 1 - -v0.8.10 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.62 3.11.10.22 0.8 1.2.3 1.0.0f 1 - -v0.8.9 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.61 3.11.10.22 0.8 1.2.3 1.0.0f 1 - -v0.8.8 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x64-msi,win-x86-exe,win-x86-msi 1.1.59 3.11.10.19 0.8 1.2.3 1.0.0f 1 - -v0.8.7 2015-09-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.49 3.11.10.17 0.8 1.2.3 1.0.0f 1 - +v0.8.14 2012-10-25 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.65 3.11.10.25 0.8 1.2.3 1.0.0f 1 - +v0.8.13 2012-10-25 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.65 3.11.10.25 0.8 1.2.3 1.0.0f 1 - +v0.8.12 2012-10-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.63 3.11.10.22 0.8 1.2.3 1.0.0f 1 - +v0.8.11 2012-09-27 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.62 3.11.10.22 0.8 1.2.3 1.0.0f 1 - +v0.8.10 2012-09-25 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.62 3.11.10.22 0.8 1.2.3 1.0.0f 1 - +v0.8.9 2012-09-11 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.61 3.11.10.22 0.8 1.2.3 1.0.0f 1 - +v0.8.8 2012-08-22 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x64-msi,win-x86-exe,win-x86-msi 1.1.59 3.11.10.19 0.8 1.2.3 1.0.0f 1 - +v0.8.7 2012-08-15 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.49 3.11.10.17 0.8 1.2.3 1.0.0f 1 - v0.8.6 2012-08-06 linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,osx-x86-tar,src,sunos-x64,sunos-x86,win-x64-exe,win-x86-exe,win-x86-msi 1.1.48 3.11.10.17 0.8 1.2.3 1.0.0f 1 - -v0.8.5 2015-09-06 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.46 3.11.10.17 0.8 1.2.3 1.0.0f 1 - -v0.8.4 2015-09-06 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.45 3.11.10.17 0.8 1.2.3 1.0.0f 1 - -v0.8.3 2015-09-06 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.43 3.11.10.15 0.8 1.2.3 1.0.0f 1 - +v0.8.5 2012-08-02 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.46 3.11.10.17 0.8 1.2.3 1.0.0f 1 - +v0.8.4 2012-07-24 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.45 3.11.10.17 0.8 1.2.3 1.0.0f 1 - +v0.8.3 2012-07-17 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.43 3.11.10.15 0.8 1.2.3 1.0.0f 1 - v0.8.2 2012-07-09 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.36 3.11.10.14 0.8 1.2.3 1.0.0f 1 - v0.8.1 2012-06-29 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.33 3.11.10.12 0.8 1.2.3 1.0.0f 1 - v0.8.0 2012-06-22 osx-x64-pkg,src,win-x64-exe,win-x86-exe,win-x86-msi 1.1.32 3.11.10.10 0.8 1.2.3 1.0.0f 1 - @@ -129,31 +157,31 @@ v0.7.10 2012-06-11 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.25 3.9.24.31 0.6 v0.7.9 2012-05-29 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.23 3.11.1.0 0.6 1.2.3 1.0.0f 1 - v0.7.8 2012-04-18 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.18 3.9.24.9 0.6 1.2.3 1.0.0f 1 - v0.7.7 2012-03-30 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.15 3.9.24.7 0.6 1.2.3 0.9.8r 1 - -v0.7.6 2012-03-31 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.8 3.9.17.0 0.6 1.2.3 0.9.8r 1 - -v0.7.5 2012-03-31 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.1 3.9.5.0 0.6 1.2.3 0.9.8r 1 - -v0.7.4 2012-03-31 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.1 3.9.5.0 0.6 1.2.3 0.9.8r 1 - -v0.7.3 2012-03-31 osx-x64-pkg,src,win-x86-exe 1.1.0-3 3.9.2.0 0.6 1.2.3 0.9.8r 1 - -v0.7.2 2012-03-31 osx-x64-pkg,src,win-x86-exe 1.1.0-3 3.8.9.0 0.6 1.2.3 0.9.8r 1 - +v0.7.6 2012-03-13 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.8 3.9.17.0 0.6 1.2.3 0.9.8r 1 - +v0.7.5 2012-02-23 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.1 3.9.5.0 0.6 1.2.3 0.9.8r 1 - +v0.7.4 2012-02-14 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.1 3.9.5.0 0.6 1.2.3 0.9.8r 1 - +v0.7.3 2012-02-07 osx-x64-pkg,src,win-x86-exe 1.1.0-3 3.9.2.0 0.6 1.2.3 0.9.8r 1 - +v0.7.2 2012-02-01 osx-x64-pkg,src,win-x86-exe 1.1.0-3 3.8.9.0 0.6 1.2.3 0.9.8r 1 - v0.7.1 2012-01-23 osx-x64-pkg,src,win-x86-exe 1.1.0-2 3.8.8.0 0.6 1.2.3 0.9.8r 1 - v0.7.0 2012-01-17 osx-x64-pkg,src,win-x86-exe 1.1.0-2 3.8.6.0 0.6 1.2.3 0.9.8r 1 - v0.6.21 2012-08-03 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.37 3.6.6.25 0.6 1.2.3 0.9.8r 1 - v0.6.20 2012-07-10 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.37 3.6.6.25 0.6 1.2.3 0.9.8r 1 - -v0.6.19 2012-06-08 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.24 3.6.6.25 0.6 1.2.3 0.9.8r 1 - +v0.6.19 2012-06-06 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.24 3.6.6.25 0.6 1.2.3 0.9.8r 1 - v0.6.18 2012-05-14 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.21 3.6.6.25 0.6 1.2.3 0.9.8r 1 - v0.6.17 2012-05-04 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.21 3.6.6.25 0.6 1.2.3 0.9.8r 1 - v0.6.16 2012-04-27 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.19 3.6.6.25 0.6 1.2.3 0.9.8r 1 - -v0.6.15 2012-04-09 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.16 3.6.6.24 0.6 1.2.3 0.9.8r 1 - +v0.6.15 2012-04-08 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.16 3.6.6.24 0.6 1.2.3 0.9.8r 1 - v0.6.14 2012-03-23 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.12 3.6.6.24 0.6 1.2.3 0.9.8r 1 - -v0.6.13 2012-03-31 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.9 3.6.6.24 0.6 1.2.3 0.9.8r 1 - +v0.6.13 2012-03-15 osx-x64-pkg,src,win-x64-exe,win-x86-exe 1.1.9 3.6.6.24 0.6 1.2.3 0.9.8r 1 - v0.6.12 2012-03-02 osx-x64-pkg,src,win-x86-exe 1.1.4 3.6.6.24 0.6 1.2.3 0.9.8r 1 - -v0.6.11 2012-02-17 osx-x64-pkg,src,win-x86-exe 1.1.1 3.6.6.20 0.6 1.2.3 0.9.8r 1 - -v0.6.10 2012-02-04 osx-x64-pkg,src,win-x86-exe 1.1.0-3 3.6.6.20 0.6 1.2.3 0.9.8r 1 - +v0.6.11 2012-02-08 osx-x64-pkg,src,win-x86-exe 1.1.1 3.6.6.20 0.6 1.2.3 0.9.8r 1 - +v0.6.10 2012-02-03 osx-x64-pkg,src,win-x86-exe 1.1.0-3 3.6.6.20 0.6 1.2.3 0.9.8r 1 - v0.6.9 2012-01-27 osx-x64-pkg,src,win-x86-exe 1.1.0-3 3.6.6.19 0.6 1.2.3 0.9.8r 1 - -v0.6.8 2012-01-23 osx-x64-pkg,src,win-x86-exe 1.1.0-2 3.6.6.19 0.6 1.2.3 0.9.8r 1 - +v0.6.8 2012-01-20 osx-x64-pkg,src,win-x86-exe 1.1.0-2 3.6.6.19 0.6 1.2.3 0.9.8r 1 - v0.6.7 2012-01-07 osx-x64-pkg,src,win-x86-exe 1.1.0-beta-10 3.6.6.15 0.6 1.2.3 0.9.8r 1 - -v0.6.6 2012-03-31 osx-x64-pkg,src,win-x86-exe 1.1.0-beta-4 3.6.6.14 0.6 1.2.3 0.9.8r 1 - -v0.6.5 2012-03-31 osx-x64-pkg,src,win-x86-exe 1.1.0-alpha-6 3.6.6.11 0.6 1.2.3 0.9.8r 1 - -v0.6.4 2011-12-03 osx-x64-pkg,src,win-x86-exe 1.1.0-alpha-6 3.6.6.8 0.6 1.2.3 0.9.8r 1 - +v0.6.6 2011-12-15 osx-x64-pkg,src,win-x86-exe 1.1.0-beta-4 3.6.6.14 0.6 1.2.3 0.9.8r 1 - +v0.6.5 2011-12-04 osx-x64-pkg,src,win-x86-exe 1.1.0-alpha-6 3.6.6.11 0.6 1.2.3 0.9.8r 1 - +v0.6.4 2011-12-02 osx-x64-pkg,src,win-x86-exe 1.1.0-alpha-6 3.6.6.8 0.6 1.2.3 0.9.8r 1 - v0.6.3 2011-11-25 osx-x64-pkg,src,win-x86-exe 1.1.0-alpha-2 3.6.6.8 0.6 1.2.3 0.9.8r 1 - v0.6.2 2011-11-18 osx-x64-pkg,src,win-x86-exe - 3.6.6.8 0.6 1.2.3 0.9.8r 1 - v0.6.1 2011-11-11 osx-x64-pkg,src,win-x86-exe - 3.6.6.7 0.1 1.2.3 0.9.8r 1 - @@ -169,7 +197,7 @@ v0.5.3 2011-08-26 src,win-x86-exe - 3.4.14.0 0.1 - - 1 - v0.5.2 2011-08-26 src,win-x86-exe - 3.4.14.0 0.1 - - 1 - v0.5.1 2011-08-26 src,win-x86-exe - 3.4.10.0 0.1 - - 1 - v0.5.0 2011-08-26 src - 3.1.8.25 - - - 1 - -v0.4.12 2015-10-17 src - 3.1.8.26 - - - 1 - +v0.4.12 2011-09-15 src - 3.1.8.26 - - - 1 - v0.4.11 2011-08-26 src - 3.1.8.26 - - - 1 - v0.4.10 2011-08-26 src - 3.1.8.26 - - - 1 - v0.4.9 2011-08-26 src - 3.1.8.25 - - - 1 - @@ -198,10 +226,10 @@ v0.2.3 2011-08-26 src - 2.3.8.0 - - - 1 - v0.2.2 2011-08-26 src - 2.3.8.0 - - - 1 - v0.2.1 2011-08-26 src - 2.3.8.0 - - - 1 - v0.2.0 2011-08-26 src - 2.3.8.0 - - - 1 - -v0.1.104 2011-08-26 src - 2.3.6.1 - - - 1 - -v0.1.103 2011-08-26 src - 2.3.5.0 - - - 1 - -v0.1.102 2011-08-26 src - 2.3.2.0 - - - 1 - -v0.1.101 2011-08-26 src - 2.3.0.0 - - - 1 - +v0.1.104 2011-08-26 src - 2.3.6.1 - - - - - +v0.1.103 2011-08-26 src - 2.3.5.0 - - - - - +v0.1.102 2011-08-26 src - 2.3.2.0 - - - - - +v0.1.101 2011-08-26 src - 2.3.0.0 - - - - - v0.1.100 2011-08-26 src - 2.2.21.0 - - - - - v0.1.99 2011-08-26 src - 2.2.18.0 - - - - - v0.1.98 2011-08-26 src - 2.2.16.0 - - - - - diff --git a/test/fast/Unit tests/nvm_ls_remote b/test/fast/Unit tests/nvm_ls_remote index dbb6358..95759e1 100755 --- a/test/fast/Unit tests/nvm_ls_remote +++ b/test/fast/Unit tests/nvm_ls_remote @@ -38,7 +38,7 @@ v0.3.8" # Sanity checks OUTPUT="$(nvm_print_implicit_alias remote stable)" -EXPECTED_OUTPUT="5.3" +EXPECTED_OUTPUT="5.10" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_print_implicit_alias remote stable did not output $EXPECTED_OUTPUT; got $OUTPUT" OUTPUT="$(nvm_print_implicit_alias remote unstable)" @@ -46,7 +46,7 @@ EXPECTED_OUTPUT="0.11" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_print_implicit_alias remote unstable did not output $EXPECTED_OUTPUT; got $OUTPUT" OUTPUT="$(nvm_ls_remote stable)" -EXPECTED_OUTPUT="v5.3.0" +EXPECTED_OUTPUT="v5.10.1" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote stable did not output $EXPECTED_OUTPUT; got $OUTPUT" OUTPUT="$(nvm_ls_remote unstable)" @@ -54,4 +54,3 @@ EXPECTED_OUTPUT="v0.11.16" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote unstable did not output $EXPECTED_OUTPUT; got $OUTPUT" cleanup - From 96afff7af2c3bd20bc9d0aa610ba888b20f163ea Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Tue, 19 Apr 2016 22:49:49 -0700 Subject: [PATCH 08/48] =?UTF-8?q?[Tests]=20Set=20up=20=E2=80=9Cmocks?= =?UTF-8?q?=E2=80=9D=20directory,=20and=20updater=20script.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{ => mocks}/iojs.org-dist-index.tab | 0 .../{ => mocks}/nodejs.org-dist-index.tab | 0 test/fast/Unit tests/nvm_ls_remote | 2 +- test/fast/Unit tests/nvm_ls_remote_iojs | 2 +- update_test_mocks.sh | 17 +++++++++++++++++ 5 files changed, 19 insertions(+), 2 deletions(-) rename test/fast/Unit tests/{ => mocks}/iojs.org-dist-index.tab (100%) rename test/fast/Unit tests/{ => mocks}/nodejs.org-dist-index.tab (100%) create mode 100755 update_test_mocks.sh diff --git a/test/fast/Unit tests/iojs.org-dist-index.tab b/test/fast/Unit tests/mocks/iojs.org-dist-index.tab similarity index 100% rename from test/fast/Unit tests/iojs.org-dist-index.tab rename to test/fast/Unit tests/mocks/iojs.org-dist-index.tab diff --git a/test/fast/Unit tests/nodejs.org-dist-index.tab b/test/fast/Unit tests/mocks/nodejs.org-dist-index.tab similarity index 100% rename from test/fast/Unit tests/nodejs.org-dist-index.tab rename to test/fast/Unit tests/mocks/nodejs.org-dist-index.tab diff --git a/test/fast/Unit tests/nvm_ls_remote b/test/fast/Unit tests/nvm_ls_remote index 95759e1..ed4e2c1 100755 --- a/test/fast/Unit tests/nvm_ls_remote +++ b/test/fast/Unit tests/nvm_ls_remote @@ -9,7 +9,7 @@ cleanup() { . ../../../nvm.sh # sample output at the time the test was written -TAB_PATH="$PWD/nodejs.org-dist-index.tab" +TAB_PATH="$PWD/mocks/nodejs.org-dist-index.tab" nvm_download() { cat "$TAB_PATH" } diff --git a/test/fast/Unit tests/nvm_ls_remote_iojs b/test/fast/Unit tests/nvm_ls_remote_iojs index d93e077..03bb417 100755 --- a/test/fast/Unit tests/nvm_ls_remote_iojs +++ b/test/fast/Unit tests/nvm_ls_remote_iojs @@ -9,7 +9,7 @@ cleanup() { . ../../../nvm.sh # sample output at the time the test was written -TAB_PATH="$PWD/iojs.org-dist-index.tab" +TAB_PATH="$PWD/mocks/iojs.org-dist-index.tab" nvm_download() { cat "$TAB_PATH" } diff --git a/update_test_mocks.sh b/update_test_mocks.sh new file mode 100755 index 0000000..7f42195 --- /dev/null +++ b/update_test_mocks.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +set -e + +echo 'Updating test mocks...' + +MOCKS_DIR="$PWD/test/fast/Unit tests/mocks" + +echo "creating $MOCKS_DIR" +mkdir -p MOCKS_DIR + +. "$NVM_DIR/nvm.sh" + +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" + +echo "done! Don't forget to git commit them." From b0693f2d6a1a11bd5b95d412bdb17d69346ae680 Mon Sep 17 00:00:00 2001 From: Jorge Bucaran Date: Wed, 27 Apr 2016 11:24:59 +0900 Subject: [PATCH 09/48] Add fin https://github.com/fisherman/fin. fin is a pure fish, node version manager for fish-shell. --- README.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index 42b1558..9566b30 100644 --- a/README.markdown +++ b/README.markdown @@ -9,9 +9,12 @@ Note: `nvm` does not support Windows (see [#284](https://github.com/creationix/n - [nodist](https://github.com/marcelklehr/nodist) Note: `nvm` does not support [Fish] either (see [#303](https://github.com/creationix/nvm/issues/303)). Alternatives exist, which are neither supported nor developed by us: - - [nvm](https://github.com/derekstavis/plugin-nvm) plugin for [Oh My Fish](https://github.com/oh-my-fish/oh-my-fish), which makes nvm and its completions available in fish shell - [bass](https://github.com/edc/bass) allows to use utilities written for Bash in fish shell - [fast-nvm-fish](https://github.com/brigand/fast-nvm-fish) only works with version numbers (not aliases) but doesn't significantly slow your shell startup + - [fin](https://github.com/fisherman/fin) is a pure fish node version manager for fish shell + - [nvm](https://github.com/derekstavis/plugin-nvm) plugin for [Oh My Fish](https://github.com/oh-my-fish/oh-my-fish), which makes nvm and its completions available in fish shell + + Note: We still have some problems with FreeBSD, because there is no pre-built binary from official for FreeBSD, and building from source may need [patches](https://www.freshports.org/www/node/files/patch-deps_v8_src_base_platform_platform-posix.cc), see the issue ticket: - [[#900] [Bug] nodejs on FreeBSD need to be patched ](https://github.com/creationix/nvm/issues/900) From 804eae30fb253e6f0575e724b7ae93eb78d119c4 Mon Sep 17 00:00:00 2001 From: Oskar Eriksson Date: Wed, 27 Apr 2016 08:12:53 +0200 Subject: [PATCH 10/48] Added section about verifying nvm install using the command util --- README.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.markdown b/README.markdown index 9566b30..654dfa8 100644 --- a/README.markdown +++ b/README.markdown @@ -44,6 +44,14 @@ Eg: `curl ... | NVM_DIR="path/to/nvm" bash` Note: On OSX, if you get `nvm: command not found` after running the install script, your system may not have a [.bash_profile file] where the command is set up. Simple create one with `touch ~/.bash_profile` and run the install script again. +### Verify installation + +To verify that nvm has been installed, do + + command -v nvm + +which should output 'nvm' if the installation was successful. Please note that `which nvm` will not work, since `nvm` is a sourced shell function, not an executable binary. + ### Manual install For manual install create a folder somewhere in your filesystem with the `nvm.sh` file inside it. I put mine in `~/.nvm`. From 886cde7da5e772e21d6127790a0b9c18baff4444 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 27 Apr 2016 01:08:20 -0700 Subject: [PATCH 11/48] Readme: Clean up trailing whitespace --- README.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.markdown b/README.markdown index 654dfa8..69b970d 100644 --- a/README.markdown +++ b/README.markdown @@ -12,8 +12,8 @@ Note: `nvm` does not support [Fish] either (see [#303](https://github.com/creati - [bass](https://github.com/edc/bass) allows to use utilities written for Bash in fish shell - [fast-nvm-fish](https://github.com/brigand/fast-nvm-fish) only works with version numbers (not aliases) but doesn't significantly slow your shell startup - [fin](https://github.com/fisherman/fin) is a pure fish node version manager for fish shell - - [nvm](https://github.com/derekstavis/plugin-nvm) plugin for [Oh My Fish](https://github.com/oh-my-fish/oh-my-fish), which makes nvm and its completions available in fish shell - + - [plugin-nvm](https://github.com/derekstavis/plugin-nvm) plugin for [Oh My Fish](https://github.com/oh-my-fish/oh-my-fish), which makes nvm and its completions available in fish shell + Note: We still have some problems with FreeBSD, because there is no pre-built binary from official for FreeBSD, and building from source may need [patches](https://www.freshports.org/www/node/files/patch-deps_v8_src_base_platform_platform-posix.cc), see the issue ticket: @@ -46,10 +46,10 @@ Note: On OSX, if you get `nvm: command not found` after running the install scri ### Verify installation -To verify that nvm has been installed, do - +To verify that nvm has been installed, do + command -v nvm - + which should output 'nvm' if the installation was successful. Please note that `which nvm` will not work, since `nvm` is a sourced shell function, not an executable binary. ### Manual install @@ -74,7 +74,7 @@ Add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it For manual upgrade with `git`, change to the `$NVM_DIR`, pull down the latest changes, and check out the latest version: cd "$NVM_DIR" && git pull origin master && git checkout `git describe --abbrev=0 --tags` - + After upgrading, don't forget to activate the new version: . "$NVM_DIR/nvm.sh" From 7b1a4e5126d08352fc8ee0c1512a3ea341222954 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Tue, 26 Apr 2016 22:21:57 -0700 Subject: [PATCH 12/48] `nvm alias`: slightly speed up alias resolution. --- nvm.sh | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/nvm.sh b/nvm.sh index 2b933bc..c999484 100755 --- a/nvm.sh +++ b/nvm.sh @@ -391,7 +391,7 @@ nvm_binary_available() { nvm_alias() { local ALIAS - ALIAS="$1" + ALIAS="${1-}" if [ -z "$ALIAS" ]; then echo >&2 'An alias is required.' return 1 @@ -2259,8 +2259,10 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' command mkdir -p "$NVM_ALIAS_DIR" if [ $# -le 2 ]; then local DEST - for ALIAS_PATH in "$NVM_ALIAS_DIR"/"${2-}"*; do - ALIAS="$(command basename "$ALIAS_PATH")" + local ALIAS + local ALIAS_PATH + for ALIAS_PATH in "$NVM_ALIAS_DIR/${2-}"*; do + ALIAS="${ALIAS_PATH/$NVM_ALIAS_DIR\//}" DEST="$(nvm_alias "$ALIAS" 2> /dev/null)" if [ -n "$DEST" ]; then VERSION="$(nvm_version "$DEST")" @@ -2291,18 +2293,18 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' fi if [ -z "${3-}" ]; then command rm -f "$NVM_ALIAS_DIR/$2" - echo "$2 -> *poof*" + echo "${2-} -> *poof*" return fi - VERSION="$(nvm_version "$3")" + VERSION="$(nvm_version "${3-}")" if [ $? -ne 0 ]; then - echo "! WARNING: Version '$3' does not exist." >&2 + echo "! WARNING: Version '${3-}' does not exist." >&2 fi - echo "$3" | tee "$NVM_ALIAS_DIR/$2" >/dev/null + echo "$3" | tee "$NVM_ALIAS_DIR/${2-}" >/dev/null if [ ! "_$3" = "_$VERSION" ]; then - echo "$2 -> $3 (-> $VERSION)" + echo "${2-} -> ${3-} (-> $VERSION)" else - echo "$2 -> $3" + echo "${2-} -> ${3-}" fi ;; "unalias" ) From 4df2a7fca95b49b77143c1f337f79cd63aed4ebf Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Tue, 26 Apr 2016 22:29:55 -0700 Subject: [PATCH 13/48] `nvm alias`: factor out alias printing logic to functions --- nvm.sh | 73 +++++++++++++------- test/fast/Unit tests/nvm_print_alias_path | 43 ++++++++++++ test/fast/Unit tests/nvm_print_default_alias | 33 +++++++++ 3 files changed, 124 insertions(+), 25 deletions(-) create mode 100755 test/fast/Unit tests/nvm_print_alias_path create mode 100755 test/fast/Unit tests/nvm_print_default_alias diff --git a/nvm.sh b/nvm.sh index c999484..6b42333 100755 --- a/nvm.sh +++ b/nvm.sh @@ -389,6 +389,50 @@ nvm_binary_available() { nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "$1")" "$FIRST_VERSION_WITH_BINARY" } +nvm_print_alias_path() { + local NVM_ALIAS_DIR + NVM_ALIAS_DIR="${1-}" + if [ -z "$NVM_ALIAS_DIR" ]; then + >&2 echo 'An alias dir is required.' + return 1 + fi + local ALIAS_PATH + ALIAS_PATH="${2-}" + if [ -z "$ALIAS_PATH" ]; then + >&2 echo 'An alias path is required.' + return 2 + fi + local ALIAS + ALIAS="${ALIAS_PATH##$NVM_ALIAS_DIR\/}" + local DEST + DEST="$(nvm_alias "$ALIAS" 2> /dev/null)" + if [ -n "$DEST" ]; then + local VERSION + VERSION="$(nvm_version "$DEST")" + if [ "_$DEST" = "_$VERSION" ]; then + echo "$ALIAS -> $DEST" + else + echo "$ALIAS -> $DEST (-> $VERSION)" + fi + fi +} + +nvm_print_default_alias() { + local ALIAS + ALIAS="${1-}" + local DEST + DEST="$(nvm_print_implicit_alias local "$ALIAS")" + if [ "_$DEST" != '_' ]; then + local VERSION + VERSION="$(nvm_version "$DEST")" + if [ "_$DEST" = "_$VERSION" ]; then + echo "$ALIAS -> $DEST (default)" + else + echo "$ALIAS -> $DEST (-> $VERSION) (default)" + fi + fi +} + nvm_alias() { local ALIAS ALIAS="${1-}" @@ -1561,7 +1605,6 @@ nvm() { # initialize local variables local VERSION local ADDITIONAL_PARAMETERS - local ALIAS case $1 in "help" ) @@ -2258,35 +2301,15 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' NVM_ALIAS_DIR="$(nvm_alias_path)" command mkdir -p "$NVM_ALIAS_DIR" if [ $# -le 2 ]; then - local DEST - local ALIAS local ALIAS_PATH for ALIAS_PATH in "$NVM_ALIAS_DIR/${2-}"*; do - ALIAS="${ALIAS_PATH/$NVM_ALIAS_DIR\//}" - DEST="$(nvm_alias "$ALIAS" 2> /dev/null)" - if [ -n "$DEST" ]; then - VERSION="$(nvm_version "$DEST")" - if [ "_$DEST" = "_$VERSION" ]; then - echo "$ALIAS -> $DEST" - else - echo "$ALIAS -> $DEST (-> $VERSION)" - fi - fi + nvm_print_alias_path "$NVM_ALIAS_DIR" "$ALIAS_PATH" done + local ALIAS for ALIAS in "$(nvm_node_prefix)" "stable" "unstable" "$(nvm_iojs_prefix)"; do - if [ ! -f "$NVM_ALIAS_DIR/$ALIAS" ]; then - if [ $# -lt 2 ] || [ "~$ALIAS" = "~$2" ]; then - DEST="$(nvm_print_implicit_alias local "$ALIAS")" - if [ "_$DEST" != "_" ]; then - VERSION="$(nvm_version "$DEST")" - if [ "_$DEST" = "_$VERSION" ]; then - echo "$ALIAS -> $DEST (default)" - else - echo "$ALIAS -> $DEST (-> $VERSION) (default)" - fi - fi - fi + if [ ! -f "$NVM_ALIAS_DIR/$ALIAS" ] && ([ $# -lt 2 ] || [ "~$ALIAS" = "~${2-}" ]); then + nvm_print_default_alias "$ALIAS" fi done return diff --git a/test/fast/Unit tests/nvm_print_alias_path b/test/fast/Unit tests/nvm_print_alias_path new file mode 100755 index 0000000..1711ead --- /dev/null +++ b/test/fast/Unit tests/nvm_print_alias_path @@ -0,0 +1,43 @@ +#!/bin/sh + +die () { echo $@ ; cleanup ; exit 1; } + +cleanup () { + unset -f nvm_alias nvm_version +} + +. ../../../nvm.sh + +NVM_ALIAS_DIR='path/to/the alias/dir' + +OUTPUT="$(nvm_print_alias_path 2>&1)" +EXPECTED_OUTPUT='An alias dir is required.' +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_alias_path' produced wrong output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'" + +OUTPUT="$(nvm_print_alias_path "$NVM_ALIAS_DIR" 2>&1)" +EXPECTED_OUTPUT='An alias path is required.' +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\"' produced wrong output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'" + +nvm_alias() { + echo '' +} + +OUTPUT="$(nvm_print_alias_path "$NVM_ALIAS_DIR" foo)" +EXPECTED_OUTPUT='' +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\" foo' should produce no output when nvm_alias does not; got '$OUTPUT'" + +EXIT_CODE="$(nvm_print_alias_path "$NVM_ALIAS_DIR" foo >/dev/null 2>&1 ; echo $?)" +[ "$EXIT_CODE" = '0' ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\" foo' should exit zero when nvm_alias produces no output; got $EXIT_CODE" + +nvm_alias() { + echo "\"$1\"" +} +nvm_version() { + echo "v$1" +} + +OUTPUT="$(nvm_print_alias_path "$NVM_ALIAS_DIR" "$NVM_ALIAS_DIR/blah")" +EXPECTED_OUTPUT='blah -> "blah" (-> v"blah")' +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\" \"\$NVM_ALIAS_DIR/blah\"' should strip alias dir and print nvm_alias output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'" + +cleanup diff --git a/test/fast/Unit tests/nvm_print_default_alias b/test/fast/Unit tests/nvm_print_default_alias new file mode 100755 index 0000000..932c1aa --- /dev/null +++ b/test/fast/Unit tests/nvm_print_default_alias @@ -0,0 +1,33 @@ +#!/bin/sh + +die () { echo $@ ; cleanup ; exit 1; } + +cleanup () { + unset -f nvm_print_implicit_alias nvm_version +} + +. ../../../nvm.sh + +nvm_print_implicit_alias() { + echo '' +} + +OUTPUT="$(nvm_print_default_alias foo)" +EXPECTED_OUTPUT='' +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_print_default_alias foo' should produce no output when nvm_print_implicit_alias does not; got '$OUTPUT'" + +EXIT_CODE="$(nvm_print_default_alias foo >/dev/null 2>&1 ; echo $?)" +[ "$EXIT_CODE" = '0' ] || die "'nvm_print_default_alias foo' should exit zero when nvm_print_implicit_alias produces no output; got $EXIT_CODE" + +nvm_print_implicit_alias() { + echo "\"$1-$2\"" +} +nvm_version() { + echo "v$1" +} + +OUTPUT="$(nvm_print_default_alias blah)" +EXPECTED_OUTPUT='blah -> "local-blah" (-> v"local-blah") (default)' +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_default_alias blah' should strip alias dir and print nvm_print_implicit_alias output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'" + +cleanup From 1eb4d482e09c0d30d31f7fd4cab2329e3e0d6544 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Tue, 26 Apr 2016 22:58:31 -0700 Subject: [PATCH 14/48] `nvm alias`: If the alias target is empty, call into `nvm unalias` --- nvm.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/nvm.sh b/nvm.sh index 6b42333..f3689e4 100755 --- a/nvm.sh +++ b/nvm.sh @@ -2315,9 +2315,8 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' return fi if [ -z "${3-}" ]; then - command rm -f "$NVM_ALIAS_DIR/$2" - echo "${2-} -> *poof*" - return + nvm unalias "${2-}" + return $? fi VERSION="$(nvm_version "${3-}")" if [ $? -ne 0 ]; then From 677c69dda012414dab143d23651c4dfc9a63003e Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Tue, 26 Apr 2016 23:07:10 -0700 Subject: [PATCH 15/48] `nvm alias`: explicitly forbid user aliases in subdirs. --- nvm.sh | 8 ++++++ ...\" should not accept aliases with slashes" | 27 +++++++++++++++++++ ...\" should not accept aliases with slashes" | 27 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100755 "test/fast/Aliases/\"nvm alias\" should not accept aliases with slashes" create mode 100755 "test/fast/Aliases/\"nvm unalias\" should not accept aliases with slashes" diff --git a/nvm.sh b/nvm.sh index f3689e4..81e4ccb 100755 --- a/nvm.sh +++ b/nvm.sh @@ -2318,6 +2318,10 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' nvm unalias "${2-}" return $? fi + if [ "${2#*\/}" != "${2-}" ]; then + >&2 echo "Aliases in subdirectories are not supported." + return 1 + fi VERSION="$(nvm_version "${3-}")" if [ $? -ne 0 ]; then echo "! WARNING: Version '${3-}' does not exist." >&2 @@ -2337,6 +2341,10 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' >&2 nvm help return 127 fi + if [ "${2#*\/}" != "${2-}" ]; then + >&2 echo "Aliases in subdirectories are not supported." + return 1 + fi [ ! -f "$NVM_ALIAS_DIR/$2" ] && echo "Alias $2 doesn't exist!" >&2 && return local NVM_ALIAS_ORIGINAL NVM_ALIAS_ORIGINAL="$(nvm_alias "$2")" diff --git "a/test/fast/Aliases/\"nvm alias\" should not accept aliases with slashes" "b/test/fast/Aliases/\"nvm alias\" should not accept aliases with slashes" new file mode 100755 index 0000000..f5b1d0f --- /dev/null +++ "b/test/fast/Aliases/\"nvm alias\" should not accept aliases with slashes" @@ -0,0 +1,27 @@ +#!/bin/sh + +. ../../../nvm.sh + +die () { echo $@ ; exit 1; } + +OUTPUT="$(nvm alias foo/bar baz 2>&1)" +EXPECTED_OUTPUT="Aliases in subdirectories are not supported." +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'" + +EXIT_CODE="$(nvm alias foo/bar baz >/dev/null 2>&1 ; echo $?)" +[ "$EXIT_CODE" = "1" ] || die "trying to create an alias with a slash should fail with code 1, got '$EXIT_CODE'" + +OUTPUT="$(nvm alias foo/ baz 2>&1)" +EXPECTED_OUTPUT="Aliases in subdirectories are not supported." +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias ending with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'" + +EXIT_CODE="$(nvm alias foo/ baz >/dev/null 2>&1 ; echo $?)" +[ "$EXIT_CODE" = "1" ] || die "trying to create an alias ending with a slash should fail with code 1, got '$EXIT_CODE'" + +OUTPUT="$(nvm alias /bar baz 2>&1)" +EXPECTED_OUTPUT="Aliases in subdirectories are not supported." +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias starting with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'" + +EXIT_CODE="$(nvm alias /bar baz >/dev/null 2>&1 ; echo $?)" +[ "$EXIT_CODE" = "1" ] || die "trying to create an alias starting with a slash should fail with code 1, got '$EXIT_CODE'" + diff --git "a/test/fast/Aliases/\"nvm unalias\" should not accept aliases with slashes" "b/test/fast/Aliases/\"nvm unalias\" should not accept aliases with slashes" new file mode 100755 index 0000000..ff0a304 --- /dev/null +++ "b/test/fast/Aliases/\"nvm unalias\" should not accept aliases with slashes" @@ -0,0 +1,27 @@ +#!/bin/sh + +. ../../../nvm.sh + +die () { echo $@ ; exit 1; } + +OUTPUT="$(nvm unalias foo/bar 2>&1)" +EXPECTED_OUTPUT="Aliases in subdirectories are not supported." +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to remove an alias with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'" + +EXIT_CODE="$(nvm unalias foo/bar >/dev/null 2>&1 ; echo $?)" +[ "$EXIT_CODE" = "1" ] || die "trying to remove an alias with a slash should fail with code 1, got '$EXIT_CODE'" + +OUTPUT="$(nvm unalias foo/ 2>&1)" +EXPECTED_OUTPUT="Aliases in subdirectories are not supported." +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to remove an alias ending with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'" + +EXIT_CODE="$(nvm unalias foo/ >/dev/null 2>&1 ; echo $?)" +[ "$EXIT_CODE" = "1" ] || die "trying to remove an alias ending with a slash should fail with code 1, got '$EXIT_CODE'" + +OUTPUT="$(nvm unalias /bar 2>&1)" +EXPECTED_OUTPUT="Aliases in subdirectories are not supported." +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to remove an alias starting with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'" + +EXIT_CODE="$(nvm unalias /bar >/dev/null 2>&1 ; echo $?)" +[ "$EXIT_CODE" = "1" ] || die "trying to remove an alias starting with a slash should fail with code 1, got '$EXIT_CODE'" + From ec54c925c13ae4b5469a5b6cb965fa8018c32b45 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 27 Apr 2016 01:25:56 -0700 Subject: [PATCH 16/48] [Tests] use mocks for `nvm_ls_remote`/`nvm_ls_remote_iojs` tests. --- .../mocks/nodejs.org-dist-index.tab | 2 + test/fast/Unit tests/mocks/nvm_ls_remote.txt | 264 ++++++++++++++++++ .../Unit tests/mocks/nvm_ls_remote_iojs.txt | 41 +++ test/fast/Unit tests/nvm_ls_remote | 10 +- test/fast/Unit tests/nvm_ls_remote_iojs | 6 +- update_test_mocks.sh | 2 + 6 files changed, 319 insertions(+), 6 deletions(-) create mode 100644 test/fast/Unit tests/mocks/nvm_ls_remote.txt create mode 100644 test/fast/Unit tests/mocks/nvm_ls_remote_iojs.txt diff --git a/test/fast/Unit tests/mocks/nodejs.org-dist-index.tab b/test/fast/Unit tests/mocks/nodejs.org-dist-index.tab index 073bac7..c7c6bd3 100644 --- a/test/fast/Unit tests/mocks/nodejs.org-dist-index.tab +++ b/test/fast/Unit tests/mocks/nodejs.org-dist-index.tab @@ -1,4 +1,6 @@ version date files npm v8 uv zlib openssl modules lts +v6.0.0 2016-04-26 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.8.6 5.0.71.35 1.9.0 1.2.8 1.0.2g 48 - +v5.11.0 2016-04-21 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.8.6 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - v5.10.1 2016-04-05 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.8.3 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - v5.10.0 2016-04-01 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.8.3 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - v5.9.1 2016-03-22 headers,linux-arm64,linux-armv6l,linux-armv7l,linux-ppc64le,linux-x64,linux-x86,osx-x64-pkg,osx-x64-tar,src,sunos-x64,sunos-x86,win-x64-msi,win-x86-msi 3.7.3 4.6.85.31 1.8.0 1.2.8 1.0.2g 47 - diff --git a/test/fast/Unit tests/mocks/nvm_ls_remote.txt b/test/fast/Unit tests/mocks/nvm_ls_remote.txt new file mode 100644 index 0000000..a46cb95 --- /dev/null +++ b/test/fast/Unit tests/mocks/nvm_ls_remote.txt @@ -0,0 +1,264 @@ +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.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 +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 +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 +v6.0.0 diff --git a/test/fast/Unit tests/mocks/nvm_ls_remote_iojs.txt b/test/fast/Unit tests/mocks/nvm_ls_remote_iojs.txt new file mode 100644 index 0000000..d263a73 --- /dev/null +++ b/test/fast/Unit tests/mocks/nvm_ls_remote_iojs.txt @@ -0,0 +1,41 @@ +iojs-v1.0.0 +iojs-v1.0.1 +iojs-v1.0.2 +iojs-v1.0.3 +iojs-v1.0.4 +iojs-v1.1.0 +iojs-v1.2.0 +iojs-v1.3.0 +iojs-v1.4.1 +iojs-v1.4.2 +iojs-v1.4.3 +iojs-v1.5.0 +iojs-v1.5.1 +iojs-v1.6.0 +iojs-v1.6.1 +iojs-v1.6.2 +iojs-v1.6.3 +iojs-v1.6.4 +iojs-v1.7.1 +iojs-v1.8.1 +iojs-v1.8.2 +iojs-v1.8.3 +iojs-v1.8.4 +iojs-v2.0.0 +iojs-v2.0.1 +iojs-v2.0.2 +iojs-v2.1.0 +iojs-v2.2.0 +iojs-v2.2.1 +iojs-v2.3.0 +iojs-v2.3.1 +iojs-v2.3.2 +iojs-v2.3.3 +iojs-v2.3.4 +iojs-v2.4.0 +iojs-v2.5.0 +iojs-v3.0.0 +iojs-v3.1.0 +iojs-v3.2.0 +iojs-v3.3.0 +iojs-v3.3.1 diff --git a/test/fast/Unit tests/nvm_ls_remote b/test/fast/Unit tests/nvm_ls_remote index ed4e2c1..d8f7d3d 100755 --- a/test/fast/Unit tests/nvm_ls_remote +++ b/test/fast/Unit tests/nvm_ls_remote @@ -14,14 +14,16 @@ nvm_download() { cat "$TAB_PATH" } +EXPECTED_OUTPUT_PATH="$PWD/mocks/nvm_ls_remote.txt" + OUTPUT="$(nvm_ls_remote foo)" EXIT_CODE="$(nvm_ls_remote foo >/dev/null 2>&1 ; echo $?)" [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" OUTPUT="$(nvm_ls_remote)" -EXPECTED_OUTPUT="$(nvm_download | \egrep -o 'v[0-9]+\.[0-9]+\.[0-9]+' | sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n)" -[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm_ls_remote did not output expected sorted versions; got $(echo "$OUTPUT") expected $(echo "$EXPECTED_OUTPUT")" +EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH")" +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm_ls_remote did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")" OUTPUT="$(nvm_ls_remote 0.3)" EXPECTED_OUTPUT="v0.3.0 @@ -38,7 +40,7 @@ v0.3.8" # Sanity checks OUTPUT="$(nvm_print_implicit_alias remote stable)" -EXPECTED_OUTPUT="5.10" +EXPECTED_OUTPUT="6.0" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_print_implicit_alias remote stable did not output $EXPECTED_OUTPUT; got $OUTPUT" OUTPUT="$(nvm_print_implicit_alias remote unstable)" @@ -46,7 +48,7 @@ EXPECTED_OUTPUT="0.11" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_print_implicit_alias remote unstable did not output $EXPECTED_OUTPUT; got $OUTPUT" OUTPUT="$(nvm_ls_remote stable)" -EXPECTED_OUTPUT="v5.10.1" +EXPECTED_OUTPUT="v6.0.0" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote stable did not output $EXPECTED_OUTPUT; got $OUTPUT" OUTPUT="$(nvm_ls_remote unstable)" diff --git a/test/fast/Unit tests/nvm_ls_remote_iojs b/test/fast/Unit tests/nvm_ls_remote_iojs index 03bb417..1f909c7 100755 --- a/test/fast/Unit tests/nvm_ls_remote_iojs +++ b/test/fast/Unit tests/nvm_ls_remote_iojs @@ -14,14 +14,16 @@ nvm_download() { cat "$TAB_PATH" } +EXPECTED_OUTPUT_PATH="$PWD/mocks/nvm_ls_remote_iojs.txt" + OUTPUT="$(nvm_ls_remote_iojs foo)" EXIT_CODE="$(nvm_ls_remote_iojs foo >/dev/null 2>&1 ; echo $?)" [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" OUTPUT="$(nvm_ls_remote_iojs)" -EXPECTED_OUTPUT="$(nvm_download | \egrep -o 'v[0-9]+\.[0-9]+\.[0-9]+' | sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n | sed -e 's/^/iojs-/')" -[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm_ls_remote_iojs did not output expected sorted versions; got $(echo "$OUTPUT") expected $(echo "$EXPECTED_OUTPUT")" +EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH")" +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm_ls_remote_iojs did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")" OUTPUT="$(nvm_ls_remote_iojs 1.0)" EXPECTED_OUTPUT="iojs-v1.0.0 diff --git a/update_test_mocks.sh b/update_test_mocks.sh index 7f42195..10eaed6 100755 --- a/update_test_mocks.sh +++ b/update_test_mocks.sh @@ -11,6 +11,8 @@ mkdir -p MOCKS_DIR . "$NVM_DIR/nvm.sh" +nvm_ls_remote > "$MOCKS_DIR/nvm_ls_remote.txt" +nvm_ls_remote_iojs > "$MOCKS_DIR/nvm_ls_remote_iojs.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" From 91c77c6ba8318af451cd7272fa55d2959f4fd34b Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 27 Apr 2016 17:34:53 -0700 Subject: [PATCH 17/48] [Tests] fix shebangs --- ...ich foo\" should return a nonzero exit code when not found" | 2 +- ...unning \"nvm ls 0.0.2\" should display only version 0.0.2." | 1 - ... ls foo\" should return a nonzero exit code when not found" | 3 +-- .../Listing versions/Running \"nvm ls io\" should return NA" | 3 +-- ...s node_\" should return a nonzero exit code when not found" | 3 +-- ...ls unstable\" should return the appropriate implicit alias" | 3 +-- ...nvm ls system\" should include \"system\" when appropriate" | 1 - .../Running \"nvm ls\" should filter out \"versions\"" | 1 - ...ning \"nvm ls\" should include \"system\" when appropriate" | 1 - ...vm ls\" should list versions in the \"versions\" directory" | 1 - ...-like versioning vx.x.x should only list a matched version" | 1 - 11 files changed, 5 insertions(+), 15 deletions(-) diff --git "a/test/fast/Listing paths/Running \"nvm which foo\" should return a nonzero exit code when not found" "b/test/fast/Listing paths/Running \"nvm which foo\" should return a nonzero exit code when not found" index 4c4a301..0c1e30b 100755 --- "a/test/fast/Listing paths/Running \"nvm which foo\" should return a nonzero exit code when not found" +++ "b/test/fast/Listing paths/Running \"nvm which foo\" should return a nonzero exit code when not found" @@ -1,4 +1,4 @@ - #!/bin/sh +#!/bin/sh . ../../../nvm.sh diff --git "a/test/fast/Listing versions/Running \"nvm ls 0.0.2\" should display only version 0.0.2." "b/test/fast/Listing versions/Running \"nvm ls 0.0.2\" should display only version 0.0.2." index c2b7a63..45a2d1a 100755 --- "a/test/fast/Listing versions/Running \"nvm ls 0.0.2\" should display only version 0.0.2." +++ "b/test/fast/Listing versions/Running \"nvm ls 0.0.2\" should display only version 0.0.2." @@ -18,4 +18,3 @@ nvm ls 0.0.2 | grep 'v0.0.20' > /dev/null if [ $? -eq 0 ]; then die '"nvm ls 0.0.2" contained v0.0.20' fi - diff --git "a/test/fast/Listing versions/Running \"nvm ls foo\" should return a nonzero exit code when not found" "b/test/fast/Listing versions/Running \"nvm ls foo\" should return a nonzero exit code when not found" index d3f6974..19e0f96 100755 --- "a/test/fast/Listing versions/Running \"nvm ls foo\" should return a nonzero exit code when not found" +++ "b/test/fast/Listing versions/Running \"nvm ls foo\" should return a nonzero exit code when not found" @@ -1,7 +1,6 @@ - #!/bin/sh +#!/bin/sh . ../../../nvm.sh nvm ls nonexistent_version [ "$?" = "3" ] - diff --git "a/test/fast/Listing versions/Running \"nvm ls io\" should return NA" "b/test/fast/Listing versions/Running \"nvm ls io\" should return NA" index ddd1123..2c61b66 100755 --- "a/test/fast/Listing versions/Running \"nvm ls io\" should return NA" +++ "b/test/fast/Listing versions/Running \"nvm ls io\" should return NA" @@ -1,7 +1,6 @@ - #!/bin/sh +#!/bin/sh . ../../../nvm.sh nvm ls io [ "$?" = "3" ] - diff --git "a/test/fast/Listing versions/Running \"nvm ls node_\" should return a nonzero exit code when not found" "b/test/fast/Listing versions/Running \"nvm ls node_\" should return a nonzero exit code when not found" index 2d6b012..b4ad7a2 100755 --- "a/test/fast/Listing versions/Running \"nvm ls node_\" should return a nonzero exit code when not found" +++ "b/test/fast/Listing versions/Running \"nvm ls node_\" should return a nonzero exit code when not found" @@ -1,7 +1,6 @@ - #!/bin/sh +#!/bin/sh . ../../../nvm.sh nvm ls node_ [ "$?" = "3" ] - diff --git "a/test/fast/Listing versions/Running \"nvm ls stable\" and \"nvm ls unstable\" should return the appropriate implicit alias" "b/test/fast/Listing versions/Running \"nvm ls stable\" and \"nvm ls unstable\" should return the appropriate implicit alias" index a5ab151..79051bd 100755 --- "a/test/fast/Listing versions/Running \"nvm ls stable\" and \"nvm ls unstable\" should return the appropriate implicit alias" +++ "b/test/fast/Listing versions/Running \"nvm ls stable\" and \"nvm ls unstable\" should return the appropriate implicit alias" @@ -1,4 +1,4 @@ - #!/bin/sh +#!/bin/sh . ../../../nvm.sh @@ -26,4 +26,3 @@ nvm ls stable | \grep -v "$STABLE_VERSION" >/dev/null \ || die "'nvm ls stable' contained $STABLE_VERSION instead of v0.1.2" nvm ls stable | \grep v0.1.2 >/dev/null \ || die "'nvm ls stable' did not contain v0.1.2" - diff --git "a/test/fast/Listing versions/Running \"nvm ls system\" should include \"system\" when appropriate" "b/test/fast/Listing versions/Running \"nvm ls system\" should include \"system\" when appropriate" index f1e5ef6..d24cb3c 100755 --- "a/test/fast/Listing versions/Running \"nvm ls system\" should include \"system\" when appropriate" +++ "b/test/fast/Listing versions/Running \"nvm ls system\" should include \"system\" when appropriate" @@ -18,4 +18,3 @@ nvm ls system | grep system 2>&1 > /dev/null nvm_has_system_node() { return 1; } nvm ls system | grep system 2>&1 > /dev/null [ $? -ne 0 ] || die '"nvm ls system" contained "system" when system node is not present' - diff --git "a/test/fast/Listing versions/Running \"nvm ls\" should filter out \"versions\"" "b/test/fast/Listing versions/Running \"nvm ls\" should filter out \"versions\"" index c4d61bd..d63066d 100755 --- "a/test/fast/Listing versions/Running \"nvm ls\" should filter out \"versions\"" +++ "b/test/fast/Listing versions/Running \"nvm ls\" should filter out \"versions\"" @@ -8,4 +8,3 @@ mkdir -p ../../../versions/node [ -z "$(nvm ls | \grep 'versions')" ] # The result should contain only the appropriate version numbers. - diff --git "a/test/fast/Listing versions/Running \"nvm ls\" should include \"system\" when appropriate" "b/test/fast/Listing versions/Running \"nvm ls\" should include \"system\" when appropriate" index 9afd40a..e8554f0 100755 --- "a/test/fast/Listing versions/Running \"nvm ls\" should include \"system\" when appropriate" +++ "b/test/fast/Listing versions/Running \"nvm ls\" should include \"system\" when appropriate" @@ -18,4 +18,3 @@ nvm ls | grep system 2>&1 > /dev/null nvm_has_system_node() { return 1; } nvm ls | grep system 2>&1 > /dev/null [ $? -ne 0 ] || die '"nvm ls" contained "system" when system node is not present' - diff --git "a/test/fast/Listing versions/Running \"nvm ls\" should list versions in the \"versions\" directory" "b/test/fast/Listing versions/Running \"nvm ls\" should list versions in the \"versions\" directory" index 8368b1e..488e991 100755 --- "a/test/fast/Listing versions/Running \"nvm ls\" should list versions in the \"versions\" directory" +++ "b/test/fast/Listing versions/Running \"nvm ls\" should list versions in the \"versions\" directory" @@ -9,4 +9,3 @@ mkdir ../../../v0.1.3 nvm ls 0.12 | grep v0.12.1 || die '"nvm ls" did not list a version in the versions/ directory' nvm ls 0.1 | grep v0.1.3 || die '"nvm ls" did not list a version not in the versions/ directory' - diff --git "a/test/fast/Listing versions/Running \"nvm ls\" with node-like versioning vx.x.x should only list a matched version" "b/test/fast/Listing versions/Running \"nvm ls\" with node-like versioning vx.x.x should only list a matched version" index 43c77d8..eeebea5 100755 --- "a/test/fast/Listing versions/Running \"nvm ls\" with node-like versioning vx.x.x should only list a matched version" +++ "b/test/fast/Listing versions/Running \"nvm ls\" with node-like versioning vx.x.x should only list a matched version" @@ -8,4 +8,3 @@ nvm ls v0.1 | grep v0.1.2 && nvm ls v0.1.2 | grep v0.1.2 && nvm ls v0.1. | grep v0.1.2 && nvm ls v0.1.1 | grep N/A - From 9106cc25a43d3eb8a81284225fb1b9e54432287a Mon Sep 17 00:00:00 2001 From: Philip Ingrey Date: Wed, 27 Apr 2016 11:29:18 +0100 Subject: [PATCH 18/48] Switch from pull to fetch in the manual update guide --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index 69b970d..4999302 100644 --- a/README.markdown +++ b/README.markdown @@ -73,7 +73,7 @@ Add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it For manual upgrade with `git`, change to the `$NVM_DIR`, pull down the latest changes, and check out the latest version: - cd "$NVM_DIR" && git pull origin master && git checkout `git describe --abbrev=0 --tags` + cd "$NVM_DIR" && git fetch origin && git checkout `git describe --abbrev=0 --tags` After upgrading, don't forget to activate the new version: From 379d079c30530dbc459fe919fb917711c2ca111d Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 27 Apr 2016 17:05:33 -0700 Subject: [PATCH 19/48] [Tests] Ensure color codes are stripped in alias tests. --- test/common.sh | 6 ++ ...\" again should change the target" | 15 ++-- ...s implicit aliases when they do not exist" | 19 +++-- ... instead of implicit aliases when present" | 20 ++--- ...ng \"nvm alias\" should list all aliases." | 84 +++++++++---------- test/fast/Aliases/circular/nvm_resolve_alias | 22 ++--- .../Aliases/circular/nvm_resolve_local_alias | 22 ++--- test/fast/Unit tests/nvm_print_alias_path | 5 +- test/fast/Unit tests/nvm_print_default_alias | 5 +- ...nvm.sh should use the default if available | 5 +- ... with --install should install the default | 5 +- 11 files changed, 111 insertions(+), 97 deletions(-) diff --git a/test/common.sh b/test/common.sh index 7d09064..f87cc5c 100644 --- a/test/common.sh +++ b/test/common.sh @@ -11,3 +11,9 @@ assert_not_ok() { ! $($FUNCTION $@) || die '"'"$FUNCTION $@"'" should have failed, but succeeded' } + +strip_colors() { + while read -r line; do + echo "$line" | LC_ALL=C command sed 's/\[[ -?]*[@-~]//g' + done +} diff --git "a/test/fast/Aliases/Running \"nvm alias \" again should change the target" "b/test/fast/Aliases/Running \"nvm alias \" again should change the target" index d4a8a2d..8c8bb68 100755 --- "a/test/fast/Aliases/Running \"nvm alias \" again should change the target" +++ "b/test/fast/Aliases/Running \"nvm alias \" again should change the target" @@ -1,6 +1,7 @@ #!/bin/sh . ../../../nvm.sh +. ../../common.sh die () { echo $@ ; exit 1; } @@ -10,12 +11,14 @@ if [ -n "$ZSH_VERSION" ]; then setopt noclobber fi -nvm alias test-stable-1 0.0.2 +nvm alias test-stable-1 0.0.2 || die '`nvm alias test-stable-1 0.0.2` failed' -nvm alias test-stable-1 | \grep -e "test-stable-1 -> 0.0.2 (-> v0.0.2)" \ - || die "nvm alias test-stable-1 0.0.2 did not set test-stable-1 to 0.0.2" +OUTPUT="$(nvm alias test-stable-1 | strip_colors)" +EXPECTED_OUTPUT='test-stable-1 -> 0.0.2 (-> v0.0.2)' +echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.2 did not set test-stable-1 to 0.0.2: got '$OUTPUT'" -nvm alias test-stable-1 0.0.1 +nvm alias test-stable-1 0.0.1 || die '`nvm alias test-stable-1 0.0.1` failed' -nvm alias test-stable-1 | \grep -e "test-stable-1 -> 0.0.1 (-> v0.0.1)" \ - || die "nvm alias test-stable-1 0.0.1 did not set test-stable-1 to 0.0.1" +OUTPUT="$(nvm alias test-stable-1 | strip_colors)" +EXPECTED_OUTPUT='test-stable-1 -> 0.0.1 (-> v0.0.1)' +echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.1 did not set test-stable-1 to 0.0.1: got '$OUTPUT'" diff --git "a/test/fast/Aliases/Running \"nvm alias\" lists implicit aliases when they do not exist" "b/test/fast/Aliases/Running \"nvm alias\" lists implicit aliases when they do not exist" index 8fd73d8..2c27ad1 100755 --- "a/test/fast/Aliases/Running \"nvm alias\" lists implicit aliases when they do not exist" +++ "b/test/fast/Aliases/Running \"nvm alias\" lists implicit aliases when they do not exist" @@ -1,26 +1,27 @@ #!/bin/sh . ../../../nvm.sh +. ../../common.sh die () { echo $@ ; exit 1; } -NVM_ALIAS_OUTPUT=$(nvm alias) +NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors) EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)" STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")" -echo "$NVM_ALIAS_OUTPUT" | \grep -e "^stable -> $EXPECTED_STABLE (-> $STABLE_VERSION) (default)$" \ - || die "nvm alias did not contain the default local stable node version" +echo "$NVM_ALIAS_OUTPUT" | \grep -F "stable -> $EXPECTED_STABLE (-> $STABLE_VERSION) (default)" \ + || die "nvm alias did not contain the default local stable node version; got '$NVM_ALIAS_OUTPUT'" -echo "$NVM_ALIAS_OUTPUT" | \grep -e "^node -> stable (-> $STABLE_VERSION) (default)$" \ - || die "nvm alias did not contain the default local stable node version under 'node'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F "node -> stable (-> $STABLE_VERSION) (default)" \ + || die "nvm alias did not contain the default local stable node version under 'node'; got '$NVM_ALIAS_OUTPUT'" EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)" UNSTABLE_VERSION="$(nvm_version "$EXPECTED_UNSTABLE")" -echo "$NVM_ALIAS_OUTPUT" | \grep -e "^unstable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION) (default)$" \ - || die "nvm alias did not contain the default local unstable node version" +echo "$NVM_ALIAS_OUTPUT" | \grep -F "unstable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION) (default)" \ + || die "nvm alias did not contain the default local unstable node version; got '$NVM_ALIAS_OUTPUT'" EXPECTED_IOJS="$(nvm_print_implicit_alias local iojs)" IOJS_VERSION="$(nvm_version "$EXPECTED_IOJS")" -echo "$NVM_ALIAS_OUTPUT" | \grep -e "^iojs -> $EXPECTED_IOJS (-> $IOJS_VERSION) (default)$" \ - || die "nvm alias did not contain the default local iojs version" +echo "$NVM_ALIAS_OUTPUT" | \grep -F "iojs -> $EXPECTED_IOJS (-> $IOJS_VERSION) (default)" \ + || die "nvm alias did not contain the default local iojs version; got '$NVM_ALIAS_OUTPUT'" diff --git "a/test/fast/Aliases/Running \"nvm alias\" lists manual aliases instead of implicit aliases when present" "b/test/fast/Aliases/Running \"nvm alias\" lists manual aliases instead of implicit aliases when present" index 6c0fa99..45346bd 100755 --- "a/test/fast/Aliases/Running \"nvm alias\" lists manual aliases instead of implicit aliases when present" +++ "b/test/fast/Aliases/Running \"nvm alias\" lists manual aliases instead of implicit aliases when present" @@ -1,6 +1,7 @@ #!/bin/sh . ../../../nvm.sh +. ../../common.sh die () { echo $@ ; cleanup ; exit 1; } cleanup () { @@ -31,19 +32,18 @@ nvm alias unstable "$EXPECTED_STABLE" nvm alias node stable nvm alias iojs unstable -NVM_ALIAS_OUTPUT=$(nvm alias) +NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors) -echo "$NVM_ALIAS_OUTPUT" | command grep -e "^stable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION)$" \ - || die "nvm alias did not contain the overridden 'stable' alias" +echo "$NVM_ALIAS_OUTPUT" | command grep -F "stable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION)" \ + || die "nvm alias did not contain the overridden 'stable' alias; got '$NVM_ALIAS_OUTPUT'" -echo "$NVM_ALIAS_OUTPUT" | command grep -e "^unstable -> $EXPECTED_STABLE (-> $STABLE_VERSION)$" \ - || die "nvm alias did not contain the overridden 'unstable' alias" +echo "$NVM_ALIAS_OUTPUT" | command grep -F "unstable -> $EXPECTED_STABLE (-> $STABLE_VERSION)" \ + || die "nvm alias did not contain the overridden 'unstable' alias; got '$NVM_ALIAS_OUTPUT'" -echo "$NVM_ALIAS_OUTPUT" | command grep -e "^node -> stable (-> $UNSTABLE_VERSION)$" \ - || die "nvm alias did not contain the overridden 'node' alias" +echo "$NVM_ALIAS_OUTPUT" | command grep -F "node -> stable (-> $UNSTABLE_VERSION)" \ + || die "nvm alias did not contain the overridden 'node' alias; got '$NVM_ALIAS_OUTPUT'" -echo "$NVM_ALIAS_OUTPUT" | command grep -e "^iojs -> unstable (-> $STABLE_VERSION)$" \ - || die "nvm alias did not contain the overridden 'iojs' alias" +echo "$NVM_ALIAS_OUTPUT" | command grep -F "iojs -> unstable (-> $STABLE_VERSION)" \ + || die "nvm alias did not contain the overridden 'iojs' alias; got '$NVM_ALIAS_OUTPUT'" cleanup - diff --git "a/test/fast/Aliases/Running \"nvm alias\" should list all aliases." "b/test/fast/Aliases/Running \"nvm alias\" should list all aliases." index 1a7cac1..1135388 100755 --- "a/test/fast/Aliases/Running \"nvm alias\" should list all aliases." +++ "b/test/fast/Aliases/Running \"nvm alias\" should list all aliases." @@ -1,48 +1,48 @@ #!/bin/sh . ../../../nvm.sh +. ../../common.sh die () { echo $@ ; exit 1; } -NVM_ALIAS_OUTPUT=$(nvm alias) -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-1 -> 0.0.1 (-> v0.0.1)$' \ - || die "did not find test-stable-1 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-2 -> 0.0.2 (-> v0.0.2)$' \ - || die "did not find test-stable-2 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-3 -> 0.0.3 (-> v0.0.3)$' \ - || die "did not find test-stable-3 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-4 -> 0.0.4 (-> v0.0.4)$' \ - || die "did not find test-stable-4 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-5 -> 0.0.5 (-> v0.0.5)$' \ - || die "did not find test-stable-5 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-6 -> 0.0.6 (-> v0.0.6)$' \ - || die "did not find test-stable-6 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-7 -> 0.0.7 (-> v0.0.7)$' \ - || die "did not find test-stable-7 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-8 -> 0.0.8 (-> v0.0.8)$' \ - || die "did not find test-stable-8 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-9 -> 0.0.9 (-> v0.0.9)$' \ - || die "did not find test-stable-9 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-10 -> 0.0.10 (-> v0.0.10)$' \ - || die "did not find test-stable-10 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-1 -> 0.1.1 (-> v0.1.1)$' \ - || die "did not find test-unstable-1 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-2 -> 0.1.2 (-> v0.1.2)$' \ - || die "did not find test-unstable-2 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-3 -> 0.1.3 (-> v0.1.3)$' \ - || die "did not find test-unstable-3 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-4 -> 0.1.4 (-> v0.1.4)$' \ - || die "did not find test-unstable-4 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-5 -> 0.1.5 (-> v0.1.5)$' \ - || die "did not find test-unstable-5 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-6 -> 0.1.6 (-> v0.1.6)$' \ - || die "did not find test-unstable-6 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-7 -> 0.1.7 (-> v0.1.7)$' \ - || die "did not find test-unstable-7 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-8 -> 0.1.8 (-> v0.1.8)$' \ - || die "did not find test-unstable-8 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-9 -> 0.1.9 (-> v0.1.9)$' \ - || die "did not find test-unstable-9 alias" -echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-10 -> 0.1.10 (-> v0.1.10)$' \ - || die "did not find test-unstable-10 alias" - +NVM_ALIAS_OUTPUT="$(nvm alias | strip_colors)" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-1 -> 0.0.1 (-> v0.0.1)' \ + || die "did not find test-stable-1 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-2 -> 0.0.2 (-> v0.0.2)' \ + || die "did not find test-stable-2 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-3 -> 0.0.3 (-> v0.0.3)' \ + || die "did not find test-stable-3 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-4 -> 0.0.4 (-> v0.0.4)' \ + || die "did not find test-stable-4 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-5 -> 0.0.5 (-> v0.0.5)' \ + || die "did not find test-stable-5 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-6 -> 0.0.6 (-> v0.0.6)' \ + || die "did not find test-stable-6 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-7 -> 0.0.7 (-> v0.0.7)' \ + || die "did not find test-stable-7 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-8 -> 0.0.8 (-> v0.0.8)' \ + || die "did not find test-stable-8 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-9 -> 0.0.9 (-> v0.0.9)' \ + || die "did not find test-stable-9 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-10 -> 0.0.10 (-> v0.0.10)' \ + || die "did not find test-stable-10 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-1 -> 0.1.1 (-> v0.1.1)' \ + || die "did not find test-unstable-1 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-2 -> 0.1.2 (-> v0.1.2)' \ + || die "did not find test-unstable-2 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-3 -> 0.1.3 (-> v0.1.3)' \ + || die "did not find test-unstable-3 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-4 -> 0.1.4 (-> v0.1.4)' \ + || die "did not find test-unstable-4 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-5 -> 0.1.5 (-> v0.1.5)' \ + || die "did not find test-unstable-5 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-6 -> 0.1.6 (-> v0.1.6)' \ + || die "did not find test-unstable-6 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-7 -> 0.1.7 (-> v0.1.7)' \ + || die "did not find test-unstable-7 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-8 -> 0.1.8 (-> v0.1.8)' \ + || die "did not find test-unstable-8 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-9 -> 0.1.9 (-> v0.1.9)' \ + || die "did not find test-unstable-9 alias; got '$NVM_ALIAS_OUTPUT'" +echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-10 -> 0.1.10 (-> v0.1.10)' \ + || die "did not find test-unstable-10 alias; got '$NVM_ALIAS_OUTPUT'" diff --git a/test/fast/Aliases/circular/nvm_resolve_alias b/test/fast/Aliases/circular/nvm_resolve_alias index 4b5dab9..e481826 100755 --- a/test/fast/Aliases/circular/nvm_resolve_alias +++ b/test/fast/Aliases/circular/nvm_resolve_alias @@ -1,36 +1,36 @@ #!/bin/sh +. ../../../common.sh die () { echo $@ ; exit 1; } . ../../../../nvm.sh -ALIAS="$(nvm_resolve_alias loopback)" +ALIAS="$(nvm_resolve_alias loopback | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias loopback was not ∞; got $ALIAS" -OUTPUT="$(nvm alias loopback)" +OUTPUT="$(nvm alias loopback | strip_colors)" EXPECTED_OUTPUT="loopback -> loopback (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias loopback was not $EXPECTED_OUTPUT; got $OUTPUT" -ALIAS="$(nvm_resolve_alias one)" +ALIAS="$(nvm_resolve_alias one | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias one was not ∞; got $ALIAS" -OUTPUT="$(nvm alias one)" +OUTPUT="$(nvm alias one | strip_colors)" EXPECTED_OUTPUT="one -> two (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias one was not $EXPECTED_OUTPUT; got $OUTPUT" -ALIAS="$(nvm_resolve_alias two)" +ALIAS="$(nvm_resolve_alias two | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias two was not ∞; got $ALIAS" -OUTPUT="$(nvm alias two)" +OUTPUT="$(nvm alias two | strip_colors)" EXPECTED_OUTPUT="two -> three (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias two was not $EXPECTED_OUTPUT; got $OUTPUT" -ALIAS="$(nvm_resolve_alias three)" +ALIAS="$(nvm_resolve_alias three | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias three was not ∞; got $ALIAS" -OUTPUT="$(nvm alias three)" +OUTPUT="$(nvm alias three | strip_colors)" EXPECTED_OUTPUT="three -> one (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias three was not $EXPECTED_OUTPUT; got $OUTPUT" -ALIAS="$(nvm_resolve_alias four)" +ALIAS="$(nvm_resolve_alias four | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias four was not ∞; got $ALIAS" -OUTPUT="$(nvm alias four)" +OUTPUT="$(nvm alias four | strip_colors)" EXPECTED_OUTPUT="four -> two (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias four was not $EXPECTED_OUTPUT; got $OUTPUT" - diff --git a/test/fast/Aliases/circular/nvm_resolve_local_alias b/test/fast/Aliases/circular/nvm_resolve_local_alias index 1d25054..dace4d0 100755 --- a/test/fast/Aliases/circular/nvm_resolve_local_alias +++ b/test/fast/Aliases/circular/nvm_resolve_local_alias @@ -1,36 +1,36 @@ #!/bin/sh +. ../../../common.sh die () { echo $@ ; exit 1; } . ../../../../nvm.sh -ALIAS="$(nvm_resolve_local_alias loopback)" +ALIAS="$(nvm_resolve_local_alias loopback | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias loopback was not ∞; got $ALIAS" -OUTPUT="$(nvm alias loopback)" +OUTPUT="$(nvm alias loopback | strip_colors)" EXPECTED_OUTPUT="loopback -> loopback (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias loopback was not $EXPECTED_OUTPUT; got $OUTPUT" -ALIAS="$(nvm_resolve_local_alias one)" +ALIAS="$(nvm_resolve_local_alias one | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias one was not ∞; got $ALIAS" -OUTPUT="$(nvm alias one)" +OUTPUT="$(nvm alias one | strip_colors)" EXPECTED_OUTPUT="one -> two (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias one was not $EXPECTED_OUTPUT; got $OUTPUT" -ALIAS="$(nvm_resolve_local_alias two)" +ALIAS="$(nvm_resolve_local_alias two | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias two was not ∞; got $ALIAS" -OUTPUT="$(nvm alias two)" +OUTPUT="$(nvm alias two | strip_colors)" EXPECTED_OUTPUT="two -> three (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias two was not $EXPECTED_OUTPUT; got $OUTPUT" -ALIAS="$(nvm_resolve_local_alias three)" +ALIAS="$(nvm_resolve_local_alias three | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias three was not ∞; got $ALIAS" -OUTPUT="$(nvm alias three)" +OUTPUT="$(nvm alias three | strip_colors)" EXPECTED_OUTPUT="three -> one (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias three was not $EXPECTED_OUTPUT; got $OUTPUT" -ALIAS="$(nvm_resolve_local_alias four)" +ALIAS="$(nvm_resolve_local_alias four | strip_colors)" [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias four was not ∞; got $ALIAS" -OUTPUT="$(nvm alias four)" +OUTPUT="$(nvm alias four | strip_colors)" EXPECTED_OUTPUT="four -> two (-> ∞)" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias four was not $EXPECTED_OUTPUT; got $OUTPUT" - diff --git a/test/fast/Unit tests/nvm_print_alias_path b/test/fast/Unit tests/nvm_print_alias_path index 1711ead..14f439a 100755 --- a/test/fast/Unit tests/nvm_print_alias_path +++ b/test/fast/Unit tests/nvm_print_alias_path @@ -1,4 +1,5 @@ #!/bin/sh +. ../../common.sh die () { echo $@ ; cleanup ; exit 1; } @@ -22,7 +23,7 @@ nvm_alias() { echo '' } -OUTPUT="$(nvm_print_alias_path "$NVM_ALIAS_DIR" foo)" +OUTPUT="$(nvm_print_alias_path "$NVM_ALIAS_DIR" foo | strip_colors)" EXPECTED_OUTPUT='' [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\" foo' should produce no output when nvm_alias does not; got '$OUTPUT'" @@ -36,7 +37,7 @@ nvm_version() { echo "v$1" } -OUTPUT="$(nvm_print_alias_path "$NVM_ALIAS_DIR" "$NVM_ALIAS_DIR/blah")" +OUTPUT="$(nvm_print_alias_path "$NVM_ALIAS_DIR" "$NVM_ALIAS_DIR/blah" | strip_colors)" EXPECTED_OUTPUT='blah -> "blah" (-> v"blah")' [ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\" \"\$NVM_ALIAS_DIR/blah\"' should strip alias dir and print nvm_alias output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'" diff --git a/test/fast/Unit tests/nvm_print_default_alias b/test/fast/Unit tests/nvm_print_default_alias index 932c1aa..a2e0e55 100755 --- a/test/fast/Unit tests/nvm_print_default_alias +++ b/test/fast/Unit tests/nvm_print_default_alias @@ -1,4 +1,5 @@ #!/bin/sh +. ../../common.sh die () { echo $@ ; cleanup ; exit 1; } @@ -12,7 +13,7 @@ nvm_print_implicit_alias() { echo '' } -OUTPUT="$(nvm_print_default_alias foo)" +OUTPUT="$(nvm_print_default_alias foo | strip_colors)" EXPECTED_OUTPUT='' [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_print_default_alias foo' should produce no output when nvm_print_implicit_alias does not; got '$OUTPUT'" @@ -26,7 +27,7 @@ nvm_version() { echo "v$1" } -OUTPUT="$(nvm_print_default_alias blah)" +OUTPUT="$(nvm_print_default_alias blah | strip_colors)" EXPECTED_OUTPUT='blah -> "local-blah" (-> v"local-blah") (default)' [ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_default_alias blah' should strip alias dir and print nvm_print_implicit_alias output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'" diff --git a/test/sourcing/Sourcing nvm.sh should use the default if available b/test/sourcing/Sourcing nvm.sh should use the default if available index 57cb839..03b2fe3 100755 --- a/test/sourcing/Sourcing nvm.sh should use the default if available +++ b/test/sourcing/Sourcing nvm.sh should use the default if available @@ -5,13 +5,14 @@ die () { echo $@ ; exit 1; } echo '0.10.1' > ../../alias/default || die 'creation of default alias failed' . ../../nvm.sh || die 'sourcing returned nonzero exit code' +. ../common.sh -NVM_LS_CURRENT="$(nvm ls current | \grep -o v0.10.1)" +NVM_LS_CURRENT="$(nvm ls current | strip_colors | \grep -o v0.10.1)" [ "_$NVM_LS_CURRENT" = '_v0.10.1' ] || die "'nvm ls current' did not return '-> v0.10.1', got '$NVM_LS_CURRENT'" # NVM_LS_CURRENT_COLORED="$(nvm ls current | sed -n l)" -NVM_ALIAS_DEFAULT="$(nvm alias default)" +NVM_ALIAS_DEFAULT="$(nvm alias default | strip_colors)" [ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.1 (-> v0.10.1)" ] \ || die "'nvm alias default did not return 'default -> 0.10.1 (-> v0.10.1)', got '$NVM_ALIAS_DEFAULT'" diff --git a/test/sourcing/Sourcing nvm.sh with --install should install the default b/test/sourcing/Sourcing nvm.sh with --install should install the default index e25ddf0..3b6fbaf 100755 --- a/test/sourcing/Sourcing nvm.sh with --install should install the default +++ b/test/sourcing/Sourcing nvm.sh with --install should install the default @@ -1,4 +1,5 @@ #!/bin/sh +. ../common.sh die () { echo $@ ; exit 1; } supports_source_options () { @@ -23,10 +24,10 @@ nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: $(nvm ls)" [ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE" -NVM_LS_CURRENT="$(nvm ls current | \grep -o v0.10.2)" +NVM_LS_CURRENT="$(nvm ls current | strip_colors | command grep -o v0.10.2)" [ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got '$NVM_LS_CURRENT'" -NVM_ALIAS_DEFAULT="$(nvm alias default)" +NVM_ALIAS_DEFAULT="$(nvm alias default | strip_colors)" [ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.2 (-> v0.10.2)" ] \ || die "'nvm alias default did not return 'default -> 0.10.2 (-> v0.10.2)', got '$NVM_ALIAS_DEFAULT'" From fc68e615b2c43a6d9f942c8530c38598427531a3 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 27 Apr 2016 22:35:14 -0700 Subject: [PATCH 20/48] `nvm alias`: colorize output to match `nvm ls` --- nvm.sh | 66 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/nvm.sh b/nvm.sh index 81e4ccb..cefa9a3 100755 --- a/nvm.sh +++ b/nvm.sh @@ -389,6 +389,44 @@ nvm_binary_available() { nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "$1")" "$FIRST_VERSION_WITH_BINARY" } +nvm_print_formatted_alias() { + local ALIAS + ALIAS="${1-}" + local DEST + DEST="${2-}" + local VERSION + local VERSION_FORMAT + local ALIAS_FORMAT + local DEST_FORMAT + VERSION="$(nvm_version "$DEST")" + ALIAS_FORMAT='%s' + DEST_FORMAT='%s' + VERSION_FORMAT='%s' + if [ "_$VERSION" = "_${NVM_CURRENT-}" ]; then + ALIAS_FORMAT='\033[0;32m%s\033[0m' + DEST_FORMAT='\033[0;32m%s\033[0m' + VERSION_FORMAT='\033[0;32m%s\033[0m' + elif [ -d "$(nvm_version_path "$VERSION" 2> /dev/null)" ]; then + ALIAS_FORMAT='\033[0;34m%s\033[0m' + DEST_FORMAT='\033[0;34m%s\033[0m' + VERSION_FORMAT='\033[0;34m%s\033[0m' + elif [ "_$VERSION" = '_∞' ] || [ "_$VERSION" = '_N/A' ]; then + ALIAS_FORMAT='\033[1;31m%s\033[0m' + DEST_FORMAT='\033[1;31m%s\033[0m' + VERSION_FORMAT='\033[1;31m%s\033[0m' + fi + local NEWLINE + NEWLINE="\n" + if [ "_$DEFAULT" = '_true' ]; then + NEWLINE=" \033[0;37m(default)\033[0m\n" + fi + if [ "_$DEST" = "_$VERSION" ]; then + command printf "${ALIAS_FORMAT} \033[0;90m->\033[0m ${VERSION_FORMAT}${NEWLINE}" "$ALIAS" "$DEST" + else + command printf "${ALIAS_FORMAT} \033[0;90m->\033[0m ${DEST_FORMAT} (\033[0;90m->\033[0m ${VERSION_FORMAT})${NEWLINE}" "$ALIAS" "$DEST" "$VERSION" + fi +} + nvm_print_alias_path() { local NVM_ALIAS_DIR NVM_ALIAS_DIR="${1-}" @@ -407,29 +445,21 @@ nvm_print_alias_path() { local DEST DEST="$(nvm_alias "$ALIAS" 2> /dev/null)" if [ -n "$DEST" ]; then - local VERSION - VERSION="$(nvm_version "$DEST")" - if [ "_$DEST" = "_$VERSION" ]; then - echo "$ALIAS -> $DEST" - else - echo "$ALIAS -> $DEST (-> $VERSION)" - fi + DEFAULT=false nvm_print_formatted_alias "$ALIAS" "$DEST" fi } nvm_print_default_alias() { local ALIAS ALIAS="${1-}" + if [ -z "$ALIAS" ]; then + >&2 echo 'A default alias is required.' + return 1 + fi local DEST DEST="$(nvm_print_implicit_alias local "$ALIAS")" - if [ "_$DEST" != '_' ]; then - local VERSION - VERSION="$(nvm_version "$DEST")" - if [ "_$DEST" = "_$VERSION" ]; then - echo "$ALIAS -> $DEST (default)" - else - echo "$ALIAS -> $DEST (-> $VERSION) (default)" - fi + if [ -n "$DEST" ]; then + DEFAULT=true nvm_print_formatted_alias "$ALIAS" "$DEST" fi } @@ -2301,15 +2331,17 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' NVM_ALIAS_DIR="$(nvm_alias_path)" command mkdir -p "$NVM_ALIAS_DIR" if [ $# -le 2 ]; then + local NVM_CURRENT + NVM_CURRENT="$(nvm_ls_current)" local ALIAS_PATH for ALIAS_PATH in "$NVM_ALIAS_DIR/${2-}"*; do - nvm_print_alias_path "$NVM_ALIAS_DIR" "$ALIAS_PATH" + NVM_CURRENT="${NVM_CURRENT}" nvm_print_alias_path "$NVM_ALIAS_DIR" "$ALIAS_PATH" done local ALIAS for ALIAS in "$(nvm_node_prefix)" "stable" "unstable" "$(nvm_iojs_prefix)"; do if [ ! -f "$NVM_ALIAS_DIR/$ALIAS" ] && ([ $# -lt 2 ] || [ "~$ALIAS" = "~${2-}" ]); then - nvm_print_default_alias "$ALIAS" + NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "$ALIAS" fi done return From 1f336ffbfe76e3a1dec89661494c75103be29cc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C4=83t=C4=83lin=20Mari=C8=99?= Date: Thu, 28 Apr 2016 12:27:13 +0300 Subject: [PATCH 21/48] Use `language: generic` in `.travis.yml` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since the tests don't rely on / fall into any of the language categories¹ defined by Travis CI, `language: generic`² can be used. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ¹ https://docs.travis-ci.com/user/languages/ ² https://github.com/travis-ci/travis-ci/issues/4895#issuecomment-150703192 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1b17b9f..510a86e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -language: c # defaults to ruby +language: generic addons: apt_packages: - zsh From 09f86b0e6ef61ef4e7af2e58fa9b56a79df80c69 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 27 Apr 2016 17:11:16 -0700 Subject: [PATCH 22/48] [Refactor] Create and use `nvm_is_version_installed` --- nvm.sh | 27 +++++++++---------- ...h incorrect file permissions fails nicely" | 2 +- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/nvm.sh b/nvm.sh index cefa9a3..0caddb3 100755 --- a/nvm.sh +++ b/nvm.sh @@ -60,6 +60,10 @@ nvm_has_system_iojs() { [ "$(nvm deactivate >/dev/null 2>&1 && command -v iojs)" != '' ] } +nvm_is_version_installed() { + [ -n "${1-}" ] && [ -d "$(nvm_version_path "${1-}" 2> /dev/null)" ] +} + nvm_print_npm_version() { if nvm_has "npm"; then echo " (npm v$(npm --version 2>/dev/null))" @@ -206,10 +210,7 @@ nvm_ensure_version_installed() { LOCAL_VERSION="$(nvm_version "$PROVIDED_VERSION")" EXIT_CODE="$?" local NVM_VERSION_DIR - if [ "_$EXIT_CODE" = "_0" ]; then - NVM_VERSION_DIR="$(nvm_version_path "$LOCAL_VERSION")" - fi - if [ "_$EXIT_CODE" != "_0" ] || [ ! -d "$NVM_VERSION_DIR" ]; then + if [ "_$EXIT_CODE" != "_0" ] || ! nvm_is_version_installed "$LOCAL_VERSION"; then VERSION="$(nvm_resolve_alias "$PROVIDED_VERSION")" if [ $? -eq 0 ]; then echo "N/A: version \"$PROVIDED_VERSION -> $VERSION\" is not yet installed" >&2 @@ -406,7 +407,7 @@ nvm_print_formatted_alias() { ALIAS_FORMAT='\033[0;32m%s\033[0m' DEST_FORMAT='\033[0;32m%s\033[0m' VERSION_FORMAT='\033[0;32m%s\033[0m' - elif [ -d "$(nvm_version_path "$VERSION" 2> /dev/null)" ]; then + elif nvm_is_version_installed "$VERSION"; then ALIAS_FORMAT='\033[0;34m%s\033[0m' DEST_FORMAT='\033[0;34m%s\033[0m' VERSION_FORMAT='\033[0;34m%s\033[0m' @@ -648,9 +649,9 @@ nvm_ls() { *) NVM_PATTERN_STARTS_WITH_V=false ;; esac if [ $NVM_PATTERN_STARTS_WITH_V = true ] && [ "_$(nvm_num_version_groups "$PATTERN")" = "_3" ]; then - if [ -d "$(nvm_version_path "$PATTERN")" ]; then + if nvm_is_version_installed "$PATTERN"; then VERSIONS="$PATTERN" - elif [ -d "$(nvm_version_path "$(nvm_add_iojs_prefix "$PATTERN")")" ]; then + elif nvm_is_version_installed "$(nvm_add_iojs_prefix "$PATTERN")"; then VERSIONS="$(nvm_add_iojs_prefix "$PATTERN")" fi else @@ -889,7 +890,7 @@ nvm_print_versions() { FORMAT='\033[0;32m-> %12s\033[0m' elif [ "$VERSION" = "system" ]; then FORMAT='\033[0;33m%15s\033[0m' - elif [ -d "$(nvm_version_path "$VERSION" 2> /dev/null)" ]; then + elif nvm_is_version_installed "$VERSION"; then FORMAT='\033[0;34m%15s\033[0m' else FORMAT='%15s' @@ -1810,9 +1811,7 @@ nvm() { NVM_NODE_MERGED=true fi - local VERSION_PATH - VERSION_PATH="$(nvm_version_path "$VERSION")" - if [ -d "$VERSION_PATH" ]; then + if nvm_is_version_installed "$VERSION"; then echo "$VERSION is already installed." >&2 if nvm use "$VERSION" && [ ! -z "$REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then nvm reinstall-packages "$REINSTALL_PACKAGES_FROM" @@ -1897,9 +1896,7 @@ nvm() { return 1 fi - local VERSION_PATH - VERSION_PATH="$(nvm_version_path "$VERSION")" - if [ ! -d "$VERSION_PATH" ]; then + if ! nvm_is_version_installed "$VERSION"; then echo "$VERSION version is not installed..." >&2 return; fi @@ -1916,6 +1913,8 @@ nvm() { NVM_SUCCESS_MSG="Uninstalled node $VERSION" fi + local VERSION_PATH + VERSION_PATH="$(nvm_version_path "$VERSION")" if ! nvm_check_file_permissions "$VERSION_PATH"; then >&2 echo 'Cannot uninstall, incorrect permissions on installation folder.' >&2 echo 'This is usually caused by running `npm install -g` as root. Run the following command as root to fix the permissions and then try again.' diff --git "a/test/slow/nvm uninstall/Running \"nvm uninstall\" with incorrect file permissions fails nicely" "b/test/slow/nvm uninstall/Running \"nvm uninstall\" with incorrect file permissions fails nicely" index eff2bc4..0939d95 100755 --- "a/test/slow/nvm uninstall/Running \"nvm uninstall\" with incorrect file permissions fails nicely" +++ "b/test/slow/nvm uninstall/Running \"nvm uninstall\" with incorrect file permissions fails nicely" @@ -19,7 +19,7 @@ nvm ls | grep "$NVM_TEST_VERSION" || die "Failed to install node" # Install global module as root npm_path=$(which npm) -sudo "$npm_path" install jspm -g +sudo -n "$npm_path" install jspm -g || die 'either sudo failed, or `npm install jspm -g` failed`' # Switch to another version so we can uninstall nvm use 0.12.7 From d705ec7ebf9a886d88892f827bb8908952b43e99 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sat, 30 Apr 2016 00:33:28 -0700 Subject: [PATCH 23/48] [refactor] run through shellcheck --- nvm.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/nvm.sh b/nvm.sh index 0caddb3..a42334e 100755 --- a/nvm.sh +++ b/nvm.sh @@ -342,7 +342,7 @@ nvm_format_version() { VERSION="$(nvm_ensure_version_prefix "$1")" local NUM_GROUPS NUM_GROUPS="$(nvm_num_version_groups "$VERSION")" - if [ $NUM_GROUPS -lt 3 ]; then + if [ "$NUM_GROUPS" -lt 3 ]; then nvm_format_version "${VERSION%.}.0" else echo "$VERSION" | cut -f1-3 -d. @@ -1354,7 +1354,7 @@ nvm_get_make_jobs() { NVM_MAKE_JOBS=1 else echo "Detected that you have $NVM_CPU_THREADS CPU thread(s)" - if [ $NVM_CPU_THREADS -gt 2 ]; then + if [ "$NVM_CPU_THREADS" -gt 2 ]; then NVM_MAKE_JOBS=$(($NVM_CPU_THREADS - 1)) echo "Set the number of jobs to $NVM_CPU_THREADS - 1 = $NVM_MAKE_JOBS jobs to speed up the build" else @@ -1419,9 +1419,9 @@ nvm_install_node_source() { command tar -xzf "$tmptarball" -C "$tmpdir" && \ cd "$tmpdir/node-$VERSION" && \ ./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \ - $make -j $NVM_MAKE_JOBS ${MAKE_CXX-} && \ + $make -j "$NVM_MAKE_JOBS" ${MAKE_CXX-} && \ command rm -f "$VERSION_PATH" 2>/dev/null && \ - $make -j $NVM_MAKE_JOBS ${MAKE_CXX-} install + $make -j "$NVM_MAKE_JOBS" ${MAKE_CXX-} install ) then if ! nvm_has "npm" ; then @@ -1605,7 +1605,7 @@ nvm_is_natural_num() { 0) return 1 ;; -*) return 3 ;; # some BSDs return false positives for double-negated args *) - [ $1 -eq $1 2> /dev/null ] # returns 2 if it doesn't match + [ "$1" -eq "$1" ] 2> /dev/null # returns 2 if it doesn't match ;; esac } @@ -1735,7 +1735,6 @@ nvm() { local nobinary nobinary=0 - local make_jobs while [ $# -ne 0 ] do case "$1" in @@ -2380,7 +2379,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' local NVM_ALIAS_ORIGINAL NVM_ALIAS_ORIGINAL="$(nvm_alias "$2")" command rm -f "$NVM_ALIAS_DIR/$2" - echo "Deleted alias $2 - restore it with \`nvm alias $2 "$NVM_ALIAS_ORIGINAL"\`" + echo "Deleted alias $2 - restore it with \`nvm alias \"$2\" \"$NVM_ALIAS_ORIGINAL\"\`" ;; "reinstall-packages" | "copy-packages" ) if [ $# -ne 2 ]; then From 2d50606a78e15ba3c527f636ba8aa79792311ec6 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sat, 30 Apr 2016 00:38:49 -0700 Subject: [PATCH 24/48] [Tests] flesh out `nvm_print_default_alias` tests --- test/fast/Unit tests/nvm_print_default_alias | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/fast/Unit tests/nvm_print_default_alias b/test/fast/Unit tests/nvm_print_default_alias index a2e0e55..1785756 100755 --- a/test/fast/Unit tests/nvm_print_default_alias +++ b/test/fast/Unit tests/nvm_print_default_alias @@ -13,6 +13,10 @@ nvm_print_implicit_alias() { echo '' } +OUTPUT="$(nvm_print_default_alias 2>&1)" +EXPECTED_OUTPUT='A default alias is required.' +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_default_alias' produced wrong output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'" + OUTPUT="$(nvm_print_default_alias foo | strip_colors)" EXPECTED_OUTPUT='' [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_print_default_alias foo' should produce no output when nvm_print_implicit_alias does not; got '$OUTPUT'" From 1c3f8da6c38bdfecf3dbf01c6753a6fd27032b9d Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 27 Apr 2016 14:23:34 -0700 Subject: [PATCH 25/48] `nvm alias`: factor out alias creation to `nvm_make_alias` --- nvm.sh | 24 ++++++++++++++++++++---- test/fast/Unit tests/nvm_make_alias | 19 +++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) create mode 100755 test/fast/Unit tests/nvm_make_alias diff --git a/nvm.sh b/nvm.sh index a42334e..6135a1f 100755 --- a/nvm.sh +++ b/nvm.sh @@ -464,6 +464,22 @@ nvm_print_default_alias() { fi } +nvm_make_alias() { + local ALIAS + ALIAS="${1-}" + if [ -z "$ALIAS" ]; then + >&2 echo "an alias name is required" + return 1 + fi + local VERSION + VERSION="${2-}" + if [ -z "$VERSION" ]; then + >&2 echo "an alias target version is required" + return 2 + fi + echo "$VERSION" | tee "$(nvm_alias_path)/${ALIAS}" >/dev/null +} + nvm_alias() { local ALIAS ALIAS="${1-}" @@ -2356,11 +2372,11 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' if [ $? -ne 0 ]; then echo "! WARNING: Version '${3-}' does not exist." >&2 fi - echo "$3" | tee "$NVM_ALIAS_DIR/${2-}" >/dev/null - if [ ! "_$3" = "_$VERSION" ]; then - echo "${2-} -> ${3-} (-> $VERSION)" - else + nvm_make_alias "${2-}" "${3-}" + if [ "_$3" = "_$VERSION" ]; then echo "${2-} -> ${3-}" + else + echo "${2-} -> ${3-} (-> $VERSION)" fi ;; "unalias" ) diff --git a/test/fast/Unit tests/nvm_make_alias b/test/fast/Unit tests/nvm_make_alias new file mode 100755 index 0000000..c57906d --- /dev/null +++ b/test/fast/Unit tests/nvm_make_alias @@ -0,0 +1,19 @@ +#!/bin/sh + +die () { echo $@ ; exit 1; } + +. ../../../nvm.sh + +OUTPUT="$(nvm_make_alias 2>&1)" +EXIT_CODE="$(nvm_make_alias >/dev/null 2>&1 ; echo $?)" +EXPECTED_OUTPUT='an alias name is required' + +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "\`nvm_make_alias\` did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'" +[ "$EXIT_CODE" -eq 1 ] || die "\`nvm_make_alias\` did not exit with 1, got '$EXIT_CODE'" + +OUTPUT="$(nvm_make_alias foo 2>&1)" +EXIT_CODE="$(nvm_make_alias foo >/dev/null 2>&1 ; echo $?)" +EXPECTED_OUTPUT='an alias target version is required' + +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "\`nvm_make_alias foo\` did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'" +[ "$EXIT_CODE" -eq 2 ] || die "\`nvm_make_alias foo\` did not exit with 2, got '$EXIT_CODE'" From 0dd28462156f124ceec13c876e7b5408a9cfd94b Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 4 May 2016 01:03:14 -0700 Subject: [PATCH 26/48] =?UTF-8?q?[fix]=20`set=20-e`:=20ensure=20`nvm=5Fver?= =?UTF-8?q?sion`=20returning=203,=20and=20`nvm=5Falias`=20returning=202,?= =?UTF-8?q?=20doesn=E2=80=99t=20terminate=20the=20process.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nvm.sh | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/nvm.sh b/nvm.sh index 6135a1f..c6ee43c 100755 --- a/nvm.sh +++ b/nvm.sh @@ -399,7 +399,7 @@ nvm_print_formatted_alias() { local VERSION_FORMAT local ALIAS_FORMAT local DEST_FORMAT - VERSION="$(nvm_version "$DEST")" + VERSION="$(nvm_version "$DEST" || return 0)" ALIAS_FORMAT='%s' DEST_FORMAT='%s' VERSION_FORMAT='%s' @@ -444,7 +444,7 @@ nvm_print_alias_path() { local ALIAS ALIAS="${ALIAS_PATH##$NVM_ALIAS_DIR\/}" local DEST - DEST="$(nvm_alias "$ALIAS" 2> /dev/null)" + DEST="$(nvm_alias "$ALIAS" 2> /dev/null || return 0)" if [ -n "$DEST" ]; then DEFAULT=false nvm_print_formatted_alias "$ALIAS" "$DEST" fi @@ -1797,11 +1797,11 @@ nvm() { case "$1" in --reinstall-packages-from=*) PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 27-)" - REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM")" + REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM" || return 0)" ;; --copy-packages-from=*) PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 22-)" - REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM")" + REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM" || return 0)" ;; *) ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS $1" @@ -2121,7 +2121,7 @@ nvm() { nvm_rc_version && has_checked_nvmrc=1 fi if [ -n "$NVM_RC_VERSION" ]; then - VERSION="$(nvm_version "$NVM_RC_VERSION")" + VERSION="$(nvm_version "$NVM_RC_VERSION" || return 0)" else VERSION='N/A' fi @@ -2133,7 +2133,7 @@ nvm() { provided_version="$1" if [ -n "$provided_version" ]; then - VERSION="$(nvm_version "$provided_version")" + VERSION="$(nvm_version "$provided_version" || return 0)" if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then provided_version='' if [ $has_checked_nvmrc -ne 1 ]; then @@ -2143,7 +2143,7 @@ nvm() { nvm_rc_version && has_checked_nvmrc=1 fi fi - VERSION="$(nvm_version "$NVM_RC_VERSION")" + VERSION="$(nvm_version "$NVM_RC_VERSION" || return 0)" else shift fi @@ -2205,7 +2205,7 @@ nvm() { local provided_version provided_version="$1" if [ -n "$provided_version" ]; then - VERSION="$(nvm_version "$provided_version")" + VERSION="$(nvm_version "$provided_version" || return 0)" if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then if [ "$NVM_SILENT" -eq 1 ]; then nvm_rc_version >/dev/null 2>&1 @@ -2213,7 +2213,7 @@ nvm() { nvm_rc_version fi provided_version="$NVM_RC_VERSION" - VERSION="$(nvm_version "$provided_version")" + VERSION="$(nvm_version "$provided_version" || return 0)" else shift fi @@ -2300,10 +2300,10 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' nvm_rc_version if [ -n "$NVM_RC_VERSION" ]; then provided_version="$NVM_RC_VERSION" - VERSION=$(nvm_version "$NVM_RC_VERSION") + VERSION=$(nvm_version "$NVM_RC_VERSION" || return 0) fi elif [ "_$2" != '_system' ]; then - VERSION="$(nvm_version "$provided_version")" + VERSION="$(nvm_version "$provided_version" || return 0)" else VERSION="$2" fi @@ -2368,8 +2368,8 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' >&2 echo "Aliases in subdirectories are not supported." return 1 fi - VERSION="$(nvm_version "${3-}")" - if [ $? -ne 0 ]; then + VERSION="$(nvm_version "${3-}" || return 0)" + if [ "$VERSION" = 'N/A' ]; then echo "! WARNING: Version '${3-}' does not exist." >&2 fi nvm_make_alias "${2-}" "${3-}" @@ -2406,7 +2406,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' local PROVIDED_VERSION PROVIDED_VERSION="$2" - if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ] || [ "$(nvm_version "$PROVIDED_VERSION")" = "$(nvm_ls_current)" ]; then + if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ] || [ "$(nvm_version "$PROVIDED_VERSION" || return 0)" = "$(nvm_ls_current)" ]; then echo 'Can not reinstall packages from the current version of node.' >&2 return 2 fi @@ -2419,7 +2419,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' fi VERSION="system" else - VERSION="$(nvm_version "$PROVIDED_VERSION")" + VERSION="$(nvm_version "$PROVIDED_VERSION" || return 0)" fi local NPMLIST From 6fb94e0dab013b8964f7ad6ecc8c49f93117e28c Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 4 May 2016 00:33:56 -0700 Subject: [PATCH 27/48] =?UTF-8?q?[fix]=20`nvm=20exec`:=20show=20=E2=80=9Ci?= =?UTF-8?q?o.js=E2=80=9D=20for=20io.js=20versions.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nvm.sh | 8 ++++- ...eamble works and respects \"silent\" flag" | 31 +++++++++++++++++++ .../Running \"nvm exec 0.x\" should work" | 2 +- ..."nvm exec\" should pick up .nvmrc version" | 2 +- test/slow/nvm exec/setup_dir | 2 +- test/slow/nvm exec/teardown_dir | 2 +- 6 files changed, 42 insertions(+), 5 deletions(-) create mode 100755 "test/slow/nvm exec/Preamble works and respects \"silent\" flag" diff --git a/nvm.sh b/nvm.sh index c6ee43c..9796582 100755 --- a/nvm.sh +++ b/nvm.sh @@ -2225,7 +2225,13 @@ nvm() { return $EXIT_CODE fi - [ $NVM_SILENT -eq 1 ] || echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)" + if [ "${NVM_SILENT:-0}" != '1' ]; then + if nvm_is_iojs_version "$VERSION"; then + echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)" + else + echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)" + fi + fi NODE_VERSION="$VERSION" "$NVM_DIR/nvm-exec" "$@" ;; "ls" | "list" ) diff --git "a/test/slow/nvm exec/Preamble works and respects \"silent\" flag" "b/test/slow/nvm exec/Preamble works and respects \"silent\" flag" new file mode 100755 index 0000000..a4153ab --- /dev/null +++ "b/test/slow/nvm exec/Preamble works and respects \"silent\" flag" @@ -0,0 +1,31 @@ +#!/bin/sh + +die () { echo $@ ; exit 1; } + +. ../../../nvm.sh + +nvm use 0.10 +NPM_VERSION_TEN="$(npm --version)" +NODE_VERSION_TEN="$(node --version)" + +nvm use 1.0.0 && [ "$(node --version)" = "v1.0.0" ] || die "\`nvm use\` failed!" +NPM_VERSION_ONE="$(npm --version)" + +OUTPUT="$(nvm exec 0.10 npm --version)" +EXPECTED_OUTPUT="Running node ${NODE_VERSION_TEN} (npm v${NPM_VERSION_TEN}) +${NPM_VERSION_TEN}" +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "\`nvm exec\` failed to report node preamble; expected '$EXPECTED_OUTPUT', got '$OUTPUT'" + +OUTPUT="$(nvm exec --silent 0.10 npm --version | head -1)" +EXPECTED_OUTPUT="${NPM_VERSION_TEN}" +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "\`nvm exec --silent\` failed to node suppress preamble; expected '$EXPECTED_OUTPUT', got '$OUTPUT'" + +OUTPUT="$(nvm exec 1 npm --version)" +EXPECTED_OUTPUT="Running io.js v1.0.0 (npm v${NPM_VERSION_ONE}) +${NPM_VERSION_ONE}" +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "\`nvm exec\` failed to report io.js preamble; expected '$EXPECTED_OUTPUT', got '$OUTPUT'" + +OUTPUT="$(nvm exec --silent 1 npm --version | head -1)" +EXPECTED_OUTPUT="${NPM_VERSION_ONE}" +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "\`nvm exec --silent\` failed to suppress io.js preamble; expected '$EXPECTED_OUTPUT', got '$OUTPUT'" + diff --git "a/test/slow/nvm exec/Running \"nvm exec 0.x\" should work" "b/test/slow/nvm exec/Running \"nvm exec 0.x\" should work" index bf036cf..537fafe 100755 --- "a/test/slow/nvm exec/Running \"nvm exec 0.x\" should work" +++ "b/test/slow/nvm exec/Running \"nvm exec 0.x\" should work" @@ -8,7 +8,7 @@ nvm use 0.10 NPM_VERSION_TEN="$(npm --version)" TEST_STRING="foo bar" -nvm use 0.11.7 && [ "$(node --version)" = "v0.11.7" ] || die "\`nvm use\` failed!" +nvm use 1.0.0 && [ "$(node --version)" = "v1.0.0" ] || die "\`nvm use\` failed!" [ "$(nvm exec 0.10 npm --version | tail -1)" = "$NPM_VERSION_TEN" ] || die "`nvm exec` failed to run with the correct version" diff --git "a/test/slow/nvm exec/Running \"nvm exec\" should pick up .nvmrc version" "b/test/slow/nvm exec/Running \"nvm exec\" should pick up .nvmrc version" index 203cd9a..3cc0cb8 100755 --- "a/test/slow/nvm exec/Running \"nvm exec\" should pick up .nvmrc version" +++ "b/test/slow/nvm exec/Running \"nvm exec\" should pick up .nvmrc version" @@ -7,7 +7,7 @@ die () { echo $@ ; exit 1; } nvm use 0.10.7 NPM_VERSION_TEN="$(npm --version)" -nvm use 0.11.7 && [ "$(node --version)" = "v0.11.7" ] || die "\`nvm use\` failed!" +nvm use 1.0.0 && [ "$(node --version)" = "v1.0.0" ] || die "\`nvm use\` failed!" echo "0.10.7" > .nvmrc diff --git a/test/slow/nvm exec/setup_dir b/test/slow/nvm exec/setup_dir index a5fc4bc..d858b23 100755 --- a/test/slow/nvm exec/setup_dir +++ b/test/slow/nvm exec/setup_dir @@ -2,7 +2,7 @@ . ../../../nvm.sh nvm install 0.10.7 -nvm install 0.11.7 +nvm install 1.0.0 if [ -f ".nvmrc" ]; then mv .nvmrc .nvmrc.bak diff --git a/test/slow/nvm exec/teardown_dir b/test/slow/nvm exec/teardown_dir index 789456c..d9e0dc6 100755 --- a/test/slow/nvm exec/teardown_dir +++ b/test/slow/nvm exec/teardown_dir @@ -3,7 +3,7 @@ . ../../../nvm.sh nvm deactivate nvm uninstall v0.10.7 -nvm uninstall v0.11.7 +nvm uninstall v1.0.0 rm .nvmrc From 0d62626ac666fce56ce371864630087d07d9bebd Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 4 May 2016 00:34:07 -0700 Subject: [PATCH 28/48] [refactor] `nvm exec`: refactor argument parsing. --- nvm.sh | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/nvm.sh b/nvm.sh index 9796582..37434e4 100755 --- a/nvm.sh +++ b/nvm.sh @@ -2196,18 +2196,31 @@ nvm() { shift local NVM_SILENT - NVM_SILENT=0 - if [ "_$1" = "_--silent" ]; then - NVM_SILENT=1 - shift - fi + while [ $# -gt 0 ] + do + case "$1" in + --silent) NVM_SILENT='--silent' ; shift ;; + --) break ;; + --*) + >&2 echo "Unsupported option "$1"." + return 55 + ;; + *) + if [ -n "$1" ]; then + break + else + shift + fi + ;; # stop processing arguments + esac + done local provided_version provided_version="$1" if [ -n "$provided_version" ]; then VERSION="$(nvm_version "$provided_version" || return 0)" if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then - if [ "$NVM_SILENT" -eq 1 ]; then + if [ -n "${NVM_SILENT-}" ]; then nvm_rc_version >/dev/null 2>&1 else nvm_rc_version @@ -2225,7 +2238,7 @@ nvm() { return $EXIT_CODE fi - if [ "${NVM_SILENT:-0}" != '1' ]; then + if [ -z "${NVM_SILENT-}" ]; then if nvm_is_iojs_version "$VERSION"; then echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)" else From e8355e31899b020e20c859eff0345eb6633b6e40 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 4 May 2016 00:35:43 -0700 Subject: [PATCH 29/48] [refactor] `nvm run`: refactor argument parsing. --- nvm.sh | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/nvm.sh b/nvm.sh index 37434e4..07adb83 100755 --- a/nvm.sh +++ b/nvm.sh @@ -2108,14 +2108,22 @@ nvm() { shift local NVM_SILENT - NVM_SILENT=0 - if [ "_$1" = "_--silent" ]; then - NVM_SILENT=1 - shift - fi + while [ $# -gt 0 ] + do + case "$1" in + --silent) NVM_SILENT='--silent' ; shift ;; + *) + if [ -n "$1" ]; then + break + else + shift + fi + ;; # stop processing arguments + esac + done if [ $# -lt 1 ]; then - if [ "$NVM_SILENT" -eq 1 ]; then + if [ -n "${NVM_SILENT-}" ]; then nvm_rc_version >/dev/null 2>&1 && has_checked_nvmrc=1 else nvm_rc_version && has_checked_nvmrc=1 @@ -2137,7 +2145,7 @@ nvm() { if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then provided_version='' if [ $has_checked_nvmrc -ne 1 ]; then - if [ "$NVM_SILENT" -eq 1 ]; then + if [ -n "${NVM_SILENT-}" ]; then nvm_rc_version >/dev/null 2>&1 && has_checked_nvmrc=1 else nvm_rc_version && has_checked_nvmrc=1 @@ -2176,11 +2184,11 @@ nvm() { fi EXIT_CODE="$?" elif [ "$NVM_IOJS" = true ]; then - [ $NVM_SILENT -eq 1 ] || echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)" + [ -n "${NVM_SILENT-}" ] || echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)" OUTPUT="$(nvm use "$VERSION" >/dev/null && iojs $ARGS)" EXIT_CODE="$?" else - [ $NVM_SILENT -eq 1 ] || echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)" + [ -n "${NVM_SILENT-}" ] || echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)" OUTPUT="$(nvm use "$VERSION" >/dev/null && node $ARGS)" EXIT_CODE="$?" fi From a69f9a8898166c97db787b1e8f06fc021157b9e5 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 4 May 2016 00:58:08 -0700 Subject: [PATCH 30/48] [fix] `nvm run`: pass through `--silent` on bare `nvm run` --- nvm.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nvm.sh b/nvm.sh index 07adb83..29390a3 100755 --- a/nvm.sh +++ b/nvm.sh @@ -2178,9 +2178,9 @@ nvm() { EXIT_CODE=$? elif [ -z "$ARGS" ]; then if [ "$NVM_IOJS" = true ]; then - nvm exec "$VERSION" iojs + nvm exec "${NVM_SILENT-}" "$VERSION" iojs else - nvm exec "$VERSION" node + nvm exec "${NVM_SILENT-}" "$VERSION" node fi EXIT_CODE="$?" elif [ "$NVM_IOJS" = true ]; then From ab49a5b0c3bd7971d5d2e64f3b6ded4ecdb6d08c Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 4 May 2016 00:58:12 -0700 Subject: [PATCH 31/48] [refactor] `nvm run`: call through to `nvm exec` to remove redundant code --- nvm.sh | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/nvm.sh b/nvm.sh index 29390a3..80a71de 100755 --- a/nvm.sh +++ b/nvm.sh @@ -2164,7 +2164,6 @@ nvm() { local ARGS ARGS="$@" - local OUTPUT local EXIT_CODE local ZHS_HAS_SHWORDSPLIT_UNSET @@ -2175,29 +2174,15 @@ nvm() { fi if [ "_$VERSION" = "_N/A" ]; then nvm_ensure_version_installed "$provided_version" - EXIT_CODE=$? - elif [ -z "$ARGS" ]; then - if [ "$NVM_IOJS" = true ]; then - nvm exec "${NVM_SILENT-}" "$VERSION" iojs - else - nvm exec "${NVM_SILENT-}" "$VERSION" node - fi - EXIT_CODE="$?" elif [ "$NVM_IOJS" = true ]; then - [ -n "${NVM_SILENT-}" ] || echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)" - OUTPUT="$(nvm use "$VERSION" >/dev/null && iojs $ARGS)" - EXIT_CODE="$?" + nvm exec "${NVM_SILENT-}" "$VERSION" iojs $ARGS else - [ -n "${NVM_SILENT-}" ] || echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)" - OUTPUT="$(nvm use "$VERSION" >/dev/null && node $ARGS)" - EXIT_CODE="$?" + nvm exec "${NVM_SILENT-}" "$VERSION" node $ARGS fi + EXIT_CODE="$?" if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then unsetopt shwordsplit fi - if [ -n "$OUTPUT" ]; then - echo "$OUTPUT" - fi return $EXIT_CODE ;; "exec" ) From 62cca4e6d85305ead1a151f5a124c87cd28e6fe9 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 5 May 2016 00:14:12 -0700 Subject: [PATCH 32/48] Prefer `nvm --help` over `nvm help` --- nvm.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/nvm.sh b/nvm.sh index 80a71de..de6c621 100755 --- a/nvm.sh +++ b/nvm.sh @@ -1642,7 +1642,7 @@ nvm_check_file_permissions() { nvm() { if [ $# -lt 1 ]; then - nvm help + nvm --help return fi @@ -1654,7 +1654,7 @@ nvm() { local ADDITIONAL_PARAMETERS case $1 in - "help" ) + 'help' | '--help' ) local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local NVM_NODE_PREFIX @@ -1742,7 +1742,7 @@ nvm() { version_not_provided=1 nvm_rc_version if [ -z "$NVM_RC_VERSION" ]; then - >&2 nvm help + >&2 nvm --help return 127 fi fi @@ -1887,7 +1887,7 @@ nvm() { ;; "uninstall" ) if [ $# -ne 2 ]; then - >&2 nvm help + >&2 nvm --help return 127 fi @@ -2015,7 +2015,7 @@ nvm() { fi if [ -z "$VERSION" ]; then - >&2 nvm help + >&2 nvm --help return 127 fi @@ -2134,7 +2134,7 @@ nvm() { VERSION='N/A' fi if [ $VERSION = "N/A" ]; then - >&2 nvm help + >&2 nvm --help return 127 fi fi @@ -2320,7 +2320,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' VERSION="$2" fi if [ -z "$VERSION" ]; then - >&2 nvm help + >&2 nvm --help return 127 fi @@ -2396,7 +2396,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' NVM_ALIAS_DIR="$(nvm_alias_path)" command mkdir -p "$NVM_ALIAS_DIR" if [ $# -ne 2 ]; then - >&2 nvm help + >&2 nvm --help return 127 fi if [ "${2#*\/}" != "${2-}" ]; then @@ -2411,7 +2411,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' ;; "reinstall-packages" | "copy-packages" ) if [ $# -ne 2 ]; then - >&2 nvm help + >&2 nvm --help return 127 fi @@ -2496,7 +2496,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1 ;; * ) - >&2 nvm help + >&2 nvm --help return 127 ;; esac From 4842641e78cfb9b9af0fff1d96c49a5016c6a8d1 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 5 May 2016 00:17:35 -0700 Subject: [PATCH 33/48] [Refactor] create `nvm_echo` and `nvm_err` --- nvm.sh | 489 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 251 insertions(+), 238 deletions(-) diff --git a/nvm.sh b/nvm.sh index de6c621..5c41c3a 100755 --- a/nvm.sh +++ b/nvm.sh @@ -10,6 +10,19 @@ NVM_SCRIPT_SOURCE="$_" +nvm_echo() { + command printf %s\\n "$*" 2>/dev/null || { + nvm_echo() { + \printf %s\\n "$*" # on zsh, `command printf` sometimes fails + } + nvm_echo "$*" + } +} + +nvm_err() { + >&2 nvm_echo "$*" +} + nvm_has() { type "$1" > /dev/null 2>&1 } @@ -26,14 +39,14 @@ nvm_get_latest() { elif nvm_has "wget"; then NVM_LATEST_URL="$(wget http://latest.nvm.sh --server-response -O /dev/null 2>&1 | command awk '/^ Location: /{DEST=$2} END{ print DEST }')" else - >&2 echo 'nvm needs curl or wget to proceed.' + nvm_err 'nvm needs curl or wget to proceed.' return 1 fi if [ "_$NVM_LATEST_URL" = "_" ]; then - >&2 echo "http://latest.nvm.sh did not redirect to the latest release on Github" + nvm_err "http://latest.nvm.sh did not redirect to the latest release on Github" return 2 else - echo "$NVM_LATEST_URL" | command awk -F '/' '{print $NF}' + nvm_echo "$NVM_LATEST_URL" | command awk -F '/' '{print $NF}' fi } @@ -42,7 +55,7 @@ nvm_download() { curl -q $* elif nvm_has "wget"; then # Emulate curl with wget - ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \ + ARGS=$(nvm_echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \ -e 's/-L //' \ -e 's/-I /--server-response /' \ -e 's/-s /-q /' \ @@ -66,7 +79,7 @@ nvm_is_version_installed() { nvm_print_npm_version() { if nvm_has "npm"; then - echo " (npm v$(npm --version 2>/dev/null))" + command printf " (npm v$(npm --version 2>/dev/null))" fi } @@ -107,7 +120,7 @@ nvm_tree_contains_path() { node_path="$2" if [ "@$tree@" = "@@" ] || [ "@$node_path@" = "@@" ]; then - >&2 echo "both the tree and the node path are required" + nvm_err "both the tree and the node path are required" return 2 fi @@ -122,11 +135,11 @@ nvm_tree_contains_path() { # Traverse up in directory tree to find containing folder nvm_find_up() { local path - path=$PWD + path="$PWD" while [ "$path" != "" ] && [ ! -f "$path/$1" ]; do path=${path%/*} done - echo "$path" + nvm_echo "$path" } @@ -134,7 +147,7 @@ nvm_find_nvmrc() { local dir dir="$(nvm_find_up '.nvmrc')" if [ -e "$dir/.nvmrc" ]; then - echo "$dir/.nvmrc" + nvm_echo "$dir/.nvmrc" fi } @@ -145,9 +158,9 @@ nvm_rc_version() { NVMRC_PATH="$(nvm_find_nvmrc)" if [ -e "$NVMRC_PATH" ]; then read -r NVM_RC_VERSION < "$NVMRC_PATH" || printf '' - echo "Found '$NVMRC_PATH' with version <$NVM_RC_VERSION>" + nvm_echo "Found '$NVMRC_PATH' with version <$NVM_RC_VERSION>" else - >&2 echo "No .nvmrc file found" + nvm_err "No .nvmrc file found" return 1 fi } @@ -172,33 +185,33 @@ nvm_version_dir() { local NVM_WHICH_DIR NVM_WHICH_DIR="$1" if [ -z "$NVM_WHICH_DIR" ] || [ "_$NVM_WHICH_DIR" = "_new" ]; then - echo "$NVM_DIR/versions/node" + nvm_echo "$NVM_DIR/versions/node" elif [ "_$NVM_WHICH_DIR" = "_iojs" ]; then - echo "$NVM_DIR/versions/io.js" + nvm_echo "$NVM_DIR/versions/io.js" elif [ "_$NVM_WHICH_DIR" = "_old" ]; then - echo "$NVM_DIR" + nvm_echo "$NVM_DIR" else - echo "unknown version dir" >&2 + nvm_err 'unknown version dir' return 3 fi } nvm_alias_path() { - echo "$(nvm_version_dir old)/alias" + nvm_echo "$(nvm_version_dir old)/alias" } nvm_version_path() { local VERSION VERSION="$1" if [ -z "$VERSION" ]; then - echo "version is required" >&2 + nvm_err 'version is required' return 3 elif nvm_is_iojs_version "$VERSION"; then - echo "$(nvm_version_dir iojs)/$(nvm_strip_iojs_prefix "$VERSION")" + nvm_echo "$(nvm_version_dir iojs)/$(nvm_strip_iojs_prefix "$VERSION")" elif nvm_version_greater 0.12.0 "$VERSION"; then - echo "$(nvm_version_dir old)/$VERSION" + nvm_echo "$(nvm_version_dir old)/$VERSION" else - echo "$(nvm_version_dir new)/$VERSION" + nvm_echo "$(nvm_version_dir new)/$VERSION" fi } @@ -213,11 +226,11 @@ nvm_ensure_version_installed() { if [ "_$EXIT_CODE" != "_0" ] || ! nvm_is_version_installed "$LOCAL_VERSION"; then VERSION="$(nvm_resolve_alias "$PROVIDED_VERSION")" if [ $? -eq 0 ]; then - echo "N/A: version \"$PROVIDED_VERSION -> $VERSION\" is not yet installed" >&2 + nvm_err "N/A: version \"$PROVIDED_VERSION -> $VERSION\" is not yet installed" else local PREFIXED_VERSION PREFIXED_VERSION="$(nvm_ensure_version_prefix "$PROVIDED_VERSION")" - echo "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed" >&2 + nvm_err "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed" fi return 1 fi @@ -247,10 +260,10 @@ nvm_version() { esac VERSION="$(nvm_ls "$PATTERN" | command tail -n1)" if [ -z "$VERSION" ] || [ "_$VERSION" = "_N/A" ]; then - echo "N/A" + nvm_echo "N/A" return 3; else - echo "$VERSION" + nvm_echo "$VERSION" fi } @@ -270,7 +283,7 @@ nvm_remote_version() { else VERSION="$(nvm_remote_versions "$PATTERN" | command tail -n1)" fi - echo "$VERSION" + nvm_echo "$VERSION" if [ "_$VERSION" = '_N/A' ]; then return 3 fi @@ -290,19 +303,19 @@ nvm_remote_versions() { ;; *) if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then - echo >&2 "Implicit aliases are not supported in nvm_remote_versions." + nvm_err 'Implicit aliases are not supported in nvm_remote_versions.' return 1 fi - VERSIONS="$(echo "$(nvm_ls_remote "$PATTERN") + VERSIONS="$(nvm_echo "$(nvm_ls_remote "$PATTERN") $(nvm_ls_remote_iojs "$PATTERN")" | command grep -v "N/A" | command sed '/^$/d')" ;; esac if [ -z "$VERSIONS" ]; then - echo "N/A" + nvm_echo 'N/A' return 3 else - echo "$VERSIONS" + nvm_echo "$VERSIONS" fi } @@ -324,7 +337,7 @@ nvm_is_valid_version() { } nvm_normalize_version() { - echo "${1#v}" | command awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }' + nvm_echo "${1#v}" | command awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }' } nvm_ensure_version_prefix() { @@ -333,7 +346,7 @@ nvm_ensure_version_prefix() { if nvm_is_iojs_version "$1"; then nvm_add_iojs_prefix "$NVM_VERSION" else - echo "$NVM_VERSION" + nvm_echo "$NVM_VERSION" fi } @@ -345,7 +358,7 @@ nvm_format_version() { if [ "$NUM_GROUPS" -lt 3 ]; then nvm_format_version "${VERSION%.}.0" else - echo "$VERSION" | cut -f1-3 -d. + nvm_echo "$VERSION" | cut -f1-3 -d. fi } @@ -355,18 +368,18 @@ nvm_num_version_groups() { VERSION="${VERSION#v}" VERSION="${VERSION%.}" if [ -z "$VERSION" ]; then - echo "0" + nvm_echo "0" return fi local NVM_NUM_DOTS - NVM_NUM_DOTS=$(echo "$VERSION" | command sed -e 's/[^\.]//g') + NVM_NUM_DOTS=$(nvm_echo "$VERSION" | command sed -e 's/[^\.]//g') local NVM_NUM_GROUPS NVM_NUM_GROUPS=".$NVM_NUM_DOTS" # add extra dot, since it's (n - 1) dots at this point - echo "${#NVM_NUM_GROUPS}" + nvm_echo "${#NVM_NUM_GROUPS}" } nvm_strip_path() { - echo "$1" | command sed \ + nvm_echo "$1" | command sed \ -e "s#$NVM_DIR/[^/]*$2[^:]*:##g" \ -e "s#:$NVM_DIR/[^/]*$2[^:]*##g" \ -e "s#$NVM_DIR/[^/]*$2[^:]*##g" \ @@ -377,9 +390,9 @@ nvm_strip_path() { nvm_prepend_path() { if [ -z "$1" ]; then - echo "$2" + nvm_echo "$2" else - echo "$2:$1" + nvm_echo "$2:$1" fi } @@ -432,13 +445,13 @@ nvm_print_alias_path() { local NVM_ALIAS_DIR NVM_ALIAS_DIR="${1-}" if [ -z "$NVM_ALIAS_DIR" ]; then - >&2 echo 'An alias dir is required.' + nvm_err 'An alias dir is required.' return 1 fi local ALIAS_PATH ALIAS_PATH="${2-}" if [ -z "$ALIAS_PATH" ]; then - >&2 echo 'An alias path is required.' + nvm_err 'An alias path is required.' return 2 fi local ALIAS @@ -454,7 +467,7 @@ nvm_print_default_alias() { local ALIAS ALIAS="${1-}" if [ -z "$ALIAS" ]; then - >&2 echo 'A default alias is required.' + nvm_err 'A default alias is required.' return 1 fi local DEST @@ -468,30 +481,30 @@ nvm_make_alias() { local ALIAS ALIAS="${1-}" if [ -z "$ALIAS" ]; then - >&2 echo "an alias name is required" + nvm_err "an alias name is required" return 1 fi local VERSION VERSION="${2-}" if [ -z "$VERSION" ]; then - >&2 echo "an alias target version is required" + nvm_err "an alias target version is required" return 2 fi - echo "$VERSION" | tee "$(nvm_alias_path)/${ALIAS}" >/dev/null + nvm_echo "$VERSION" | tee "$(nvm_alias_path)/${ALIAS}" >/dev/null } nvm_alias() { local ALIAS ALIAS="${1-}" if [ -z "$ALIAS" ]; then - echo >&2 'An alias is required.' + nvm_err 'An alias is required.' return 1 fi local NVM_ALIAS_PATH NVM_ALIAS_PATH="$(nvm_alias_path)/$ALIAS" if [ ! -f "$NVM_ALIAS_PATH" ]; then - echo >&2 'Alias does not exist.' + nvm_err 'Alias does not exist.' return 2 fi @@ -502,19 +515,19 @@ nvm_ls_current() { local NVM_LS_CURRENT_NODE_PATH NVM_LS_CURRENT_NODE_PATH="$(command which node 2> /dev/null)" if [ $? -ne 0 ]; then - echo 'none' + nvm_echo 'none' elif nvm_tree_contains_path "$(nvm_version_dir iojs)" "$NVM_LS_CURRENT_NODE_PATH"; then nvm_add_iojs_prefix "$(iojs --version 2>/dev/null)" elif nvm_tree_contains_path "$NVM_DIR" "$NVM_LS_CURRENT_NODE_PATH"; then local VERSION VERSION="$(node --version 2>/dev/null)" if [ "$VERSION" = "v0.6.21-pre" ]; then - echo "v0.6.21" + nvm_echo 'v0.6.21' else - echo "$VERSION" + nvm_echo "$VERSION" fi else - echo 'system' + nvm_echo 'system' fi } @@ -558,7 +571,7 @@ nvm_resolve_alias() { "_∞" | \ "_$NVM_IOJS_PREFIX" | "_$NVM_IOJS_PREFIX-" | \ "_$NVM_NODE_PREFIX" ) - echo "$ALIAS" + nvm_echo "$ALIAS" ;; *) nvm_ensure_version_prefix "$ALIAS" @@ -593,15 +606,15 @@ nvm_resolve_local_alias() { if [ "_$VERSION" != "_∞" ]; then nvm_version "$VERSION" else - echo "$VERSION" + nvm_echo "$VERSION" fi } nvm_iojs_prefix() { - echo "iojs" + nvm_echo 'iojs' } nvm_node_prefix() { - echo "node" + nvm_echo 'node' } nvm_is_iojs_version() { @@ -610,16 +623,16 @@ nvm_is_iojs_version() { } nvm_add_iojs_prefix() { - command echo "$(nvm_iojs_prefix)-$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "$1")")" + nvm_echo "$(nvm_iojs_prefix)-$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "$1")")" } nvm_strip_iojs_prefix() { local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" if [ "_$1" = "_$NVM_IOJS_PREFIX" ]; then - echo + nvm_echo else - echo "${1#"$NVM_IOJS_PREFIX"-}" + nvm_echo "${1#"$NVM_IOJS_PREFIX"-}" fi } @@ -685,7 +698,7 @@ nvm_ls() { local ZHS_HAS_SHWORDSPLIT_UNSET ZHS_HAS_SHWORDSPLIT_UNSET=1 if nvm_has "setopt"; then - ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?) + ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; nvm_echo $?) setopt shwordsplit fi @@ -764,11 +777,11 @@ nvm_ls() { fi if [ -z "$VERSIONS" ]; then - echo "N/A" + nvm_echo 'N/A' return 3 fi - echo "$VERSIONS" + nvm_echo "$VERSIONS" } nvm_ls_remote() { @@ -790,7 +803,7 @@ nvm_ls_remote_iojs() { nvm_ls_remote_index_tab() { if [ "$#" -lt 4 ]; then - echo "not enough arguments" >&2 + nvm_err 'not enough arguments' return 5 fi local TYPE @@ -801,11 +814,11 @@ nvm_ls_remote_index_tab() { iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;; node-std) PREFIX='' ;; iojs-*) - echo "unknown type of io.js release" >&2 + nvm_err 'unknown type of io.js release' return 4 ;; node-*) - echo "unknown type of node.js release" >&2 + nvm_err 'unknown type of node.js release' return 4 ;; esac @@ -830,7 +843,7 @@ nvm_ls_remote_index_tab() { fi ZHS_HAS_SHWORDSPLIT_UNSET=1 if nvm_has "setopt"; then - ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?) + ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; nvm_echo $?) setopt shwordsplit fi VERSIONS="$(nvm_download -L -s "$MIRROR/index.tab" -o - \ @@ -844,10 +857,10 @@ nvm_ls_remote_index_tab() { unsetopt shwordsplit fi if [ -z "$VERSIONS" ]; then - echo "N/A" + nvm_echo 'N/A' return 3 fi - echo "$VERSIONS" + nvm_echo "$VERSIONS" } nvm_checksum() { @@ -860,7 +873,7 @@ nvm_checksum() { elif nvm_has "shasum" && ! nvm_is_alias "shasum"; then NVM_CHECKSUM="$(shasum "$1" | command awk '{print $1}')" else - echo "Unaliased sha1sum, sha1, or shasum not found." >&2 + nvm_err 'Unaliased sha1sum, sha1, or shasum not found.' return 2 fi else @@ -879,8 +892,8 @@ nvm_checksum() { elif nvm_has "bssl" && ! nvm_is_alias "bssl"; then NVM_CHECKSUM="$(bssl sha256sum "$1" | awk '{print $1}')" else - echo "Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, libressl, or bssl not found." >&2 - echo "WARNING: Continuing *without checksum verification*" >&2 + nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, libressl, or bssl not found.' + nvm_err 'WARNING: Continuing *without checksum verification*' return fi fi @@ -888,10 +901,10 @@ nvm_checksum() { if [ "_$NVM_CHECKSUM" = "_$2" ]; then return elif [ -z "$2" ]; then - echo 'Checksums empty' #missing in raspberry pi binary + nvm_echo 'Checksums empty' #missing in raspberry pi binary return else - echo 'Checksums do not match.' >&2 + nvm_err 'Checksums do not match.' return 1 fi } @@ -901,7 +914,7 @@ nvm_print_versions() { local FORMAT local NVM_CURRENT NVM_CURRENT=$(nvm_ls_current) - echo "$1" | while read -r VERSION; do + nvm_echo "$1" | while read -r VERSION; do if [ "_$VERSION" = "_$NVM_CURRENT" ]; then FORMAT='\033[0;32m-> %12s\033[0m' elif [ "$VERSION" = "system" ]; then @@ -926,7 +939,7 @@ nvm_validate_implicit_alias() { return ;; *) - echo "Only implicit aliases 'stable', 'unstable', '$NVM_IOJS_PREFIX', and '$NVM_NODE_PREFIX' are supported." >&2 + nvm_err "Only implicit aliases 'stable', 'unstable', '$NVM_IOJS_PREFIX', and '$NVM_NODE_PREFIX' are supported." return 1 ;; esac @@ -934,7 +947,7 @@ nvm_validate_implicit_alias() { nvm_print_implicit_alias() { if [ "_$1" != "_local" ] && [ "_$1" != "_remote" ]; then - echo "nvm_print_implicit_alias must be specified with local or remote as the first argument." >&2 + nvm_err "nvm_print_implicit_alias must be specified with local or remote as the first argument." return 1 fi @@ -963,7 +976,7 @@ nvm_print_implicit_alias() { ZHS_HAS_SHWORDSPLIT_UNSET=1 if nvm_has "setopt"; then - ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?) + ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; nvm_echo $?) setopt shwordsplit fi @@ -972,7 +985,7 @@ nvm_print_implicit_alias() { NVM_IOJS_VERSION="$($NVM_COMMAND)" EXIT_CODE="$?" if [ "_$EXIT_CODE" = "_0" ]; then - NVM_IOJS_VERSION="$(echo "$NVM_IOJS_VERSION" | sed "s/^$NVM_IMPLICIT-//" | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)" + NVM_IOJS_VERSION="$(nvm_echo "$NVM_IOJS_VERSION" | sed "s/^$NVM_IMPLICIT-//" | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)" fi if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then @@ -980,14 +993,14 @@ nvm_print_implicit_alias() { fi if [ "_$NVM_IOJS_VERSION" = "_N/A" ]; then - echo "N/A" + nvm_echo 'N/A' else $NVM_ADD_PREFIX_COMMAND "$NVM_IOJS_VERSION" fi return $EXIT_CODE ;; "$NVM_NODE_PREFIX") - echo "stable" + nvm_echo 'stable' return ;; *) @@ -998,7 +1011,7 @@ nvm_print_implicit_alias() { ZHS_HAS_SHWORDSPLIT_UNSET=1 if nvm_has "setopt"; then - ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?) + ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; nvm_echo $?) setopt shwordsplit fi @@ -1017,7 +1030,7 @@ nvm_print_implicit_alias() { ZHS_HAS_SHWORDSPLIT_UNSET=1 if nvm_has "setopt"; then - ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?) + ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; nvm_echo $?) setopt shwordsplit fi for MINOR in $LAST_TWO; do @@ -1038,9 +1051,9 @@ nvm_print_implicit_alias() { fi if [ "_$2" = '_stable' ]; then - echo "${STABLE}" + nvm_echo "${STABLE}" elif [ "_$2" = '_unstable' ]; then - echo "${UNSTABLE}" + nvm_echo "${UNSTABLE}" fi } @@ -1054,7 +1067,7 @@ nvm_get_os() { SunOS\ *) NVM_OS=sunos ;; FreeBSD\ *) NVM_OS=freebsd ;; esac - echo "$NVM_OS" + nvm_echo "${NVM_OS-}" } nvm_get_arch() { @@ -1083,7 +1096,7 @@ nvm_get_arch() { i*86) NVM_ARCH="x86" ;; *) NVM_ARCH="$HOST_ARCH" ;; esac - echo "$NVM_ARCH" + nvm_echo "${NVM_ARCH}" } nvm_get_minor_version() { @@ -1091,13 +1104,13 @@ nvm_get_minor_version() { VERSION="$1" if [ -z "$VERSION" ]; then - echo 'a version is required' >&2 + nvm_err 'a version is required' return 1 fi case "$VERSION" in v | .* | *..* | v*[!.0123456789]* | [!v]*[!.0123456789]* | [!v0123456789]* | v[!0123456789]*) - echo 'invalid version number' >&2 + nvm_err 'invalid version number' return 2 ;; esac @@ -1106,19 +1119,19 @@ nvm_get_minor_version() { PREFIXED_VERSION="$(nvm_format_version "$VERSION")" local MINOR - MINOR="$(echo "$PREFIXED_VERSION" | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2)" + MINOR="$(nvm_echo "$PREFIXED_VERSION" | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2)" if [ -z "$MINOR" ]; then - echo 'invalid version number! (please report this)' >&2 + nvm_err 'invalid version number! (please report this)' return 3 fi - echo "$MINOR" + nvm_echo "${MINOR}" } nvm_ensure_default_set() { local VERSION VERSION="$1" if [ -z "$VERSION" ]; then - echo 'nvm_ensure_default_set: a version is required' >&2 + nvm_err 'nvm_ensure_default_set: a version is required' return 1 fi if nvm_alias default >/dev/null 2>&1; then @@ -1129,7 +1142,7 @@ nvm_ensure_default_set() { OUTPUT="$(nvm alias default "$VERSION")" local EXIT_CODE EXIT_CODE="$?" - echo "Creating default alias: $OUTPUT" + nvm_echo "Creating default alias: $OUTPUT" return $EXIT_CODE } @@ -1144,7 +1157,7 @@ nvm_install_merged_node_binary() { if [ "_$NVM_NODE_TYPE" = "_std" ]; then MIRROR="$NVM_NODEJS_ORG_MIRROR" else - echo "unknown type of node.js release" >&2 + nvm_err 'unknown type of node.js release' return 4 fi local VERSION @@ -1153,7 +1166,7 @@ nvm_install_merged_node_binary() { REINSTALL_PACKAGES_FROM="$3" if ! nvm_is_merged_node_version "$VERSION" || nvm_is_iojs_version "$VERSION"; then - echo 'nvm_install_merged_node_binary requires a node version v4.0 or greater.' >&2 + nvm_err 'nvm_install_merged_node_binary requires a node version v4.0 or greater.' return 10 fi @@ -1185,12 +1198,12 @@ nvm_install_merged_node_binary() { tmptarball="$tmpdir/node-${t}.tar.${compression}" local NVM_INSTALL_ERRORED command mkdir -p "$tmpdir" && \ - echo "Downloading $url..." && \ + nvm_echo "Downloading $url..." && \ nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \ NVM_INSTALL_ERRORED=true if grep '404 Not Found' "$tmptarball" >/dev/null; then NVM_INSTALL_ERRORED=true - echo >&2 "HTTP 404 at URL $url"; + nvm_err "HTTP 404 at URL $url"; fi if ( [ "$NVM_INSTALL_ERRORED" != true ] && \ @@ -1202,7 +1215,7 @@ nvm_install_merged_node_binary() { ); then return 0 else - echo >&2 "Binary download failed, trying source." >&2 + nvm_err 'Binary download failed, trying source.' command rm -rf "$tmptarball" "$tmpdir" return 1 fi @@ -1217,7 +1230,7 @@ nvm_install_iojs_binary() { if [ "_$NVM_IOJS_TYPE" = "_std" ]; then MIRROR="$NVM_IOJS_ORG_MIRROR" else - echo "unknown type of io.js release" >&2 + nvm_err 'unknown type of io.js release' return 4 fi local PREFIXED_VERSION @@ -1226,7 +1239,7 @@ nvm_install_iojs_binary() { REINSTALL_PACKAGES_FROM="$3" if ! nvm_is_iojs_version "$PREFIXED_VERSION"; then - echo 'nvm_install_iojs_binary requires an iojs-prefixed version.' >&2 + nvm_err 'nvm_install_iojs_binary requires an iojs-prefixed version.' return 10 fi @@ -1259,12 +1272,12 @@ nvm_install_iojs_binary() { tmptarball="$tmpdir/iojs-${t}.tar.${compression}" local NVM_INSTALL_ERRORED command mkdir -p "$tmpdir" && \ - echo "Downloading $url..." && \ + nvm_echo "Downloading $url..." && \ nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \ NVM_INSTALL_ERRORED=true if grep '404 Not Found' "$tmptarball" >/dev/null; then NVM_INSTALL_ERRORED=true - echo >&2 "HTTP 404 at URL $url"; + nvm_err "HTTP 404 at URL $url"; fi if ( [ "$NVM_INSTALL_ERRORED" != true ] && \ @@ -1276,7 +1289,7 @@ nvm_install_iojs_binary() { ); then return 0 else - echo >&2 "Binary download failed, trying source." >&2 + nvm_err 'Binary download failed, trying source.' command rm -rf "$tmptarball" "$tmpdir" return 1 fi @@ -1292,7 +1305,7 @@ nvm_install_node_binary() { REINSTALL_PACKAGES_FROM="$2" if nvm_is_iojs_version "$VERSION"; then - echo 'nvm_install_node_binary does not allow an iojs-prefixed version.' >&2 + nvm_err 'nvm_install_node_binary does not allow an iojs-prefixed version.' return 10 fi @@ -1324,7 +1337,7 @@ nvm_install_node_binary() { NVM_INSTALL_ERRORED=true if grep '404 Not Found' "$tmptarball" >/dev/null; then NVM_INSTALL_ERRORED=true - echo >&2 "HTTP 404 at URL $url"; + nvm_err "HTTP 404 at URL $url"; fi if ( [ "$NVM_INSTALL_ERRORED" != true ] && \ @@ -1336,7 +1349,7 @@ nvm_install_node_binary() { ); then return 0 else - echo >&2 "Binary download failed, trying source." + nvm_err 'Binary download failed, trying source.' command rm -rf "$tmptarball" "$tmpdir" return 1 fi @@ -1348,11 +1361,11 @@ nvm_install_node_binary() { nvm_get_make_jobs() { if nvm_is_natural_num "${1-}"; then NVM_MAKE_JOBS="$1" - echo "number of \`make\` jobs: $NVM_MAKE_JOBS" + nvm_echo "number of \`make\` jobs: $NVM_MAKE_JOBS" return elif [ -n "${1-}" ]; then unset NVM_MAKE_JOBS - echo >&2 "$1 is invalid for number of \`make\` jobs, must be a natural number" + nvm_err "$1 is invalid for number of \`make\` jobs, must be a natural number" fi local NVM_OS NVM_OS="$(nvm_get_os)" @@ -1365,17 +1378,17 @@ nvm_get_make_jobs() { NVM_CPU_THREADS="$(psrinfo | wc -l)" fi if ! nvm_is_natural_num "$NVM_CPU_THREADS" ; then - echo "Can not determine how many thread(s) we can use, set to only 1 now." >&2 - echo "Please report an issue on GitHub to help us make it better and run it faster on your computer!" >&2 + nvm_err 'Can not determine how many thread(s) we can use, set to only 1 now.' + nvm_err 'Please report an issue on GitHub to help us make it better and run it faster on your computer!' NVM_MAKE_JOBS=1 else - echo "Detected that you have $NVM_CPU_THREADS CPU thread(s)" + nvm_echo "Detected that you have $NVM_CPU_THREADS CPU thread(s)" if [ "$NVM_CPU_THREADS" -gt 2 ]; then NVM_MAKE_JOBS=$(($NVM_CPU_THREADS - 1)) - echo "Set the number of jobs to $NVM_CPU_THREADS - 1 = $NVM_MAKE_JOBS jobs to speed up the build" + nvm_echo "Set the number of jobs to $NVM_CPU_THREADS - 1 = $NVM_MAKE_JOBS jobs to speed up the build" else NVM_MAKE_JOBS=1 - echo "Number of CPU thread(s) less or equal to 2 will have only one job a time for 'make'" + nvm_echo 'Number of CPU thread(s) less or equal to 2 will have only one job a time for `make`' fi fi } @@ -1395,7 +1408,7 @@ nvm_install_node_source() { fi if [ -n "$ADDITIONAL_PARAMETERS" ]; then - echo "Additional options while compiling: $ADDITIONAL_PARAMETERS" + nvm_echo "Additional options while compiling: $ADDITIONAL_PARAMETERS" fi local VERSION_PATH @@ -1429,7 +1442,7 @@ nvm_install_node_source() { if ( [ -n "$tarball" ] && \ command mkdir -p "$tmpdir" && \ - echo "Downloading $tarball..." && \ + nvm_echo "Downloading $tarball..." && \ nvm_download -L --progress-bar "$tarball" -o "$tmptarball" && \ nvm_checksum "$tmptarball" "$sum" && \ command tar -xzf "$tmptarball" -C "$tmpdir" && \ @@ -1441,12 +1454,12 @@ nvm_install_node_source() { ) then if ! nvm_has "npm" ; then - echo "Installing npm..." + nvm_echo 'Installing npm...' if nvm_version_greater 0.2.0 "$VERSION"; then - echo "npm requires node v0.2.3 or higher" >&2 + nvm_err 'npm requires node v0.2.3 or higher' elif nvm_version_greater_than_or_equal_to "$VERSION" 0.2.0; then if nvm_version_greater 0.2.3 "$VERSION"; then - echo "npm requires node v0.2.3 or higher" >&2 + nvm_err 'npm requires node v0.2.3 or higher' else nvm_download -L https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh fi @@ -1455,7 +1468,7 @@ nvm_install_node_source() { fi fi else - echo "nvm: install $VERSION failed!" >&2 + nvm_err "nvm: install $VERSION failed!" return 1 fi @@ -1468,11 +1481,11 @@ nvm_match_version() { local PROVIDED_VERSION PROVIDED_VERSION="$1" case "_$PROVIDED_VERSION" in - "_$NVM_IOJS_PREFIX" | "_io.js") + "_$NVM_IOJS_PREFIX" | '_io.js') nvm_version "$NVM_IOJS_PREFIX" ;; - "_system") - echo "system" + '_system') + nvm_echo 'system' ;; *) nvm_version "$PROVIDED_VERSION" @@ -1491,12 +1504,12 @@ nvm_npm_global_modules() { fi local INSTALLS - INSTALLS=$(echo "$NPMLIST" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs) + INSTALLS=$(nvm_echo "$NPMLIST" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs) local LINKS - LINKS="$(echo "$NPMLIST" | command sed -n 's/.* -> \(.*\)/\1/ p')" + LINKS="$(nvm_echo "$NPMLIST" | command sed -n 's/.* -> \(.*\)/\1/ p')" - echo "$INSTALLS //// $LINKS" + nvm_echo "$INSTALLS //// $LINKS" } nvm_die_on_prefix() { @@ -1505,28 +1518,28 @@ nvm_die_on_prefix() { case "$NVM_DELETE_PREFIX" in 0|1) ;; *) - echo >&2 'First argument "delete the prefix" must be zero or one' + nvm_err 'First argument "delete the prefix" must be zero or one' return 1 ;; esac local NVM_COMMAND NVM_COMMAND="$2" if [ -z "$NVM_COMMAND" ]; then - echo >&2 'Second argument "nvm command" must be nonempty' + nvm_err 'Second argument "nvm command" must be nonempty' return 2 fi if [ -n "${PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then nvm deactivate >/dev/null 2>&1 - echo >&2 "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\"" - echo >&2 "Run \`unset PREFIX\` to unset it." + nvm_err "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\"" + nvm_err 'Run `unset PREFIX` to unset it.' return 3 fi if [ -n "${NPM_CONFIG_PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then nvm deactivate >/dev/null 2>&1 - echo >&2 "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\"" - echo >&2 "Run \`unset NPM_CONFIG_PREFIX\` to unset it." + nvm_err "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\"" + nvm_err 'Run `unset NPM_CONFIG_PREFIX` to unset it.' return 4 fi @@ -1541,11 +1554,11 @@ nvm_die_on_prefix() { NPM_CONFIG_LOGLEVEL=warn npm config delete prefix else nvm deactivate >/dev/null 2>&1 - echo >&2 "nvm is not compatible with the npm config \"prefix\" option: currently set to \"$NVM_NPM_PREFIX\"" + nvm_err "nvm is not compatible with the npm config \"prefix\" option: currently set to \"$NVM_NPM_PREFIX\"" if nvm_has 'npm'; then - echo >&2 "Run \`npm config delete prefix\` or \`$NVM_COMMAND\` to unset it." + nvm_err "Run \`npm config delete prefix\` or \`$NVM_COMMAND\` to unset it." else - echo >&2 "Run \`$NVM_COMMAND\` to unset it." + nvm_err "Run \`$NVM_COMMAND\` to unset it." fi return 10 fi @@ -1608,9 +1621,9 @@ nvm_sanitize_path() { local SANITIZED_PATH SANITIZED_PATH="$1" if [ "_$1" != "_$NVM_DIR" ]; then - SANITIZED_PATH="$(echo "$SANITIZED_PATH" | command sed "s#$NVM_DIR#\$NVM_DIR#g")" + SANITIZED_PATH="$(nvm_echo "$SANITIZED_PATH" | command sed "s#$NVM_DIR#\$NVM_DIR#g")" fi - echo "$SANITIZED_PATH" | command sed "s#$HOME#\$HOME#g" + nvm_echo "$SANITIZED_PATH" | command sed "s#$HOME#\$HOME#g" } nvm_is_natural_num() { @@ -1659,67 +1672,67 @@ nvm() { NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local NVM_NODE_PREFIX NVM_NODE_PREFIX="$(nvm_node_prefix)" - echo - echo "Node Version Manager" - echo - echo 'Note: refers to any version-like string nvm understands. This includes:' - echo ' - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)' - echo " - default (built-in) aliases: $NVM_NODE_PREFIX, stable, unstable, $NVM_IOJS_PREFIX, system" - echo ' - custom aliases you define with `nvm alias foo`' - echo - echo 'Usage:' - echo ' nvm help Show this message' - echo ' nvm --version Print out the latest released version of nvm' - echo ' nvm install [-s] Download and install a , [-s] from source. Uses .nvmrc if available' - echo ' --reinstall-packages-from= When installing, reinstall packages installed in ' - echo ' nvm uninstall Uninstall a version' - echo ' nvm use [--silent] Modify PATH to use . Uses .nvmrc if available' - echo ' nvm exec [--silent] [] Run on . Uses .nvmrc if available' - echo ' nvm run [--silent] [] Run `node` on with as arguments. Uses .nvmrc if available' - echo ' nvm current Display currently activated version' - echo ' nvm ls List installed versions' - echo ' nvm ls List versions matching a given description' - echo ' nvm ls-remote List remote versions available for install' - echo ' nvm version Resolve the given description to a single local version' - echo ' nvm version-remote Resolve the given description to a single remote version' - echo ' nvm deactivate Undo effects of `nvm` on current shell' - echo ' nvm alias [] Show all aliases beginning with ' - echo ' nvm alias Set an alias named pointing to ' - echo ' nvm unalias Deletes the alias named ' - echo ' nvm reinstall-packages Reinstall global `npm` packages contained in to current version' - echo ' nvm unload Unload `nvm` from shell' - echo ' nvm which [] Display path to installed node version. Uses .nvmrc if available' - echo - echo 'Example:' - echo ' nvm install v0.10.32 Install a specific version number' - echo ' nvm use 0.10 Use the latest available 0.10.x release' - echo ' nvm run 0.10.32 app.js Run app.js using node v0.10.32' - echo ' nvm exec 0.10.32 node app.js Run `node app.js` with the PATH pointing to node v0.10.32' - echo ' nvm alias default 0.10.32 Set default node version on a shell' - echo - echo 'Note:' - echo ' to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)' - echo + nvm_echo + nvm_echo "Node Version Manager" + nvm_echo + nvm_echo 'Note: refers to any version-like string nvm understands. This includes:' + nvm_echo ' - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)' + nvm_echo " - default (built-in) aliases: $NVM_NODE_PREFIX, stable, unstable, $NVM_IOJS_PREFIX, system" + nvm_echo ' - custom aliases you define with `nvm alias foo`' + nvm_echo + nvm_echo 'Usage:' + nvm_echo ' nvm --help Show this message' + 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 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' + 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-remote List remote versions available for install' + 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' + nvm_echo ' nvm alias [] Show all aliases beginning with ' + nvm_echo ' nvm alias Set an alias named pointing to ' + nvm_echo ' nvm unalias Deletes the alias named ' + nvm_echo ' nvm reinstall-packages Reinstall global `npm` packages contained in to current version' + nvm_echo ' nvm unload Unload `nvm` from shell' + nvm_echo ' nvm which [] Display path to installed node version. Uses .nvmrc if available' + nvm_echo + nvm_echo 'Example:' + nvm_echo ' nvm install v0.10.32 Install a specific version number' + nvm_echo ' nvm use 0.10 Use the latest available 0.10.x release' + nvm_echo ' nvm run 0.10.32 app.js Run app.js using node v0.10.32' + nvm_echo ' nvm exec 0.10.32 node app.js Run `node app.js` with the PATH pointing to node v0.10.32' + nvm_echo ' nvm alias default 0.10.32 Set default node version on a shell' + nvm_echo + nvm_echo 'Note:' + nvm_echo ' to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)' + nvm_echo ;; "debug" ) local ZHS_HAS_SHWORDSPLIT_UNSET ZHS_HAS_SHWORDSPLIT_UNSET=1 if nvm_has "setopt"; then - ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?) + ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; nvm_echo $?) setopt shwordsplit fi - echo >&2 "nvm --version: v$(nvm --version)" - echo >&2 "\$SHELL: $SHELL" - echo >&2 "\$HOME: $HOME" - echo >&2 "\$NVM_DIR: '$(nvm_sanitize_path "$NVM_DIR")'" - echo >&2 "\$PREFIX: '$(nvm_sanitize_path "$PREFIX")'" - echo >&2 "\$NPM_CONFIG_PREFIX: '$(nvm_sanitize_path "$NPM_CONFIG_PREFIX")'" + nvm_err "nvm --version: v$(nvm --version)" + nvm_err "\$SHELL: $SHELL" + nvm_err "\$HOME: $HOME" + nvm_err "\$NVM_DIR: '$(nvm_sanitize_path "$NVM_DIR")'" + nvm_err "\$PREFIX: '$(nvm_sanitize_path "$PREFIX")'" + nvm_err "\$NPM_CONFIG_PREFIX: '$(nvm_sanitize_path "$NPM_CONFIG_PREFIX")'" local NVM_DEBUG_OUTPUT for NVM_DEBUG_COMMAND in 'nvm current' 'which node' 'which iojs' 'which npm' 'npm config get prefix' 'npm root -g' do NVM_DEBUG_OUTPUT="$($NVM_DEBUG_COMMAND 2>&1)" - echo >&2 "$NVM_DEBUG_COMMAND: $(nvm_sanitize_path "$NVM_DEBUG_OUTPUT")" + nvm_err "$NVM_DEBUG_COMMAND: $(nvm_sanitize_path "$NVM_DEBUG_OUTPUT")" done if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then unsetopt shwordsplit @@ -1734,7 +1747,7 @@ nvm() { NVM_OS="$(nvm_get_os)" if ! nvm_has "curl" && ! nvm_has "wget"; then - echo 'nvm needs curl or wget to proceed.' >&2; + nvm_err 'nvm needs curl or wget to proceed.' return 1 fi @@ -1784,7 +1797,7 @@ nvm() { VERSION="$(nvm_remote_version "$provided_version")" if [ "_$VERSION" = "_N/A" ]; then - echo "Version '$provided_version' not found - try \`nvm ls-remote\` to browse available versions." >&2 + nvm_err "Version '$provided_version' not found - try \`nvm ls-remote\` to browse available versions." return 3 fi @@ -1796,11 +1809,11 @@ nvm() { do case "$1" in --reinstall-packages-from=*) - PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 27-)" + PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 27-)" REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM" || return 0)" ;; --copy-packages-from=*) - PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 22-)" + PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 22-)" REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM" || return 0)" ;; *) @@ -1811,10 +1824,10 @@ nvm() { done if [ "_$(nvm_ensure_version_prefix "$PROVIDED_REINSTALL_PACKAGES_FROM")" = "_$VERSION" ]; then - echo "You can't reinstall global packages from the same version of node you're installing." >&2 + nvm_err "You can't reinstall global packages from the same version of node you're installing." return 4 elif [ ! -z "$PROVIDED_REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" = "_N/A" ]; then - echo "If --reinstall-packages-from is provided, it must point to an installed version of node." >&2 + nvm_err "If --reinstall-packages-from is provided, it must point to an installed version of node." return 5 fi @@ -1827,7 +1840,7 @@ nvm() { fi if nvm_is_version_installed "$VERSION"; then - echo "$VERSION is already installed." >&2 + nvm_err "$VERSION is already installed." if nvm use "$VERSION" && [ ! -z "$REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then nvm reinstall-packages "$REINSTALL_PACKAGES_FROM" fi @@ -1838,12 +1851,12 @@ nvm() { if [ "_$NVM_OS" = "_freebsd" ]; then # node.js and io.js do not have a FreeBSD binary nobinary=1 - echo "Currently, there is no binary for $NVM_OS" >&2 + nvm_err "Currently, there is no binary for $NVM_OS" elif [ "_$NVM_OS" = "_sunos" ]; then # Not all node/io.js versions have a Solaris binary if ! nvm_has_solaris_binary "$VERSION"; then nobinary=1 - echo "Currently, there is no binary of version $VERSION for $NVM_OS" >&2 + nvm_err "Currently, there is no binary of version $VERSION for $NVM_OS" fi fi local NVM_INSTALL_SUCCESS @@ -1867,11 +1880,11 @@ nvm() { fi elif [ "$NVM_IOJS" = true ]; then # nvm_install_iojs_source "$VERSION" "$NVM_MAKE_JOBS" "$ADDITIONAL_PARAMETERS" - echo "Installing iojs from source is not currently supported" >&2 + nvm_err 'Installing iojs from source is not currently supported' return 105 elif [ "$NVM_NODE_MERGED" = true ]; then # nvm_install_merged_node_source "$VERSION" "$NVM_MAKE_JOBS" "$ADDITIONAL_PARAMETERS" - echo "Installing node v1.0 and greater from source is not currently supported" >&2 + nvm_err 'Installing node v1.0 and greater from source is not currently supported' return 106 fi fi @@ -1904,15 +1917,15 @@ nvm() { esac if [ "_$VERSION" = "_$(nvm_ls_current)" ]; then if nvm_is_iojs_version "$VERSION"; then - echo "nvm: Cannot uninstall currently-active io.js version, $VERSION (inferred from $PATTERN)." >&2 + nvm_err "nvm: Cannot uninstall currently-active io.js version, $VERSION (inferred from $PATTERN)." else - echo "nvm: Cannot uninstall currently-active node version, $VERSION (inferred from $PATTERN)." >&2 + nvm_err "nvm: Cannot uninstall currently-active node version, $VERSION (inferred from $PATTERN)." fi return 1 fi if ! nvm_is_version_installed "$VERSION"; then - echo "$VERSION version is not installed..." >&2 + nvm_err "$VERSION version is not installed..." return; fi @@ -1931,10 +1944,10 @@ nvm() { local VERSION_PATH VERSION_PATH="$(nvm_version_path "$VERSION")" if ! nvm_check_file_permissions "$VERSION_PATH"; then - >&2 echo 'Cannot uninstall, incorrect permissions on installation folder.' - >&2 echo 'This is usually caused by running `npm install -g` as root. Run the following command as root to fix the permissions and then try again.' - >&2 echo - >&2 echo " chown -R $(whoami) \"$VERSION_PATH\"" + nvm_err 'Cannot uninstall, incorrect permissions on installation folder.' + nvm_err 'This is usually caused by running `npm install -g` as root. Run the following command as root to fix the permissions and then try again.' + nvm_err + nvm_err " chown -R $(whoami) \"$VERSION_PATH\"" return 1 fi @@ -1944,7 +1957,7 @@ nvm() { "$NVM_DIR/bin/$NVM_PREFIX-${t}" \ "$NVM_DIR/bin/$NVM_PREFIX-${t}.tar.*" \ "$VERSION_PATH" 2>/dev/null - echo "$NVM_SUCCESS_MSG" + nvm_echo "$NVM_SUCCESS_MSG" # rm any aliases that point to uninstalled version. for ALIAS in $(command grep -l "$VERSION" "$(nvm_alias_path)/*" 2>/dev/null) @@ -1956,20 +1969,20 @@ nvm() { local NEWPATH NEWPATH="$(nvm_strip_path "$PATH" "/bin")" if [ "_$PATH" = "_$NEWPATH" ]; then - echo "Could not find $NVM_DIR/*/bin in \$PATH" >&2 + nvm_err "Could not find $NVM_DIR/*/bin in \$PATH" else export PATH="$NEWPATH" hash -r - echo "$NVM_DIR/*/bin removed from \$PATH" + nvm_echo "$NVM_DIR/*/bin removed from \$PATH" fi if [ -n "${MANPATH-}" ]; then NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")" if [ "_$MANPATH" = "_$NEWPATH" ]; then - echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2 + nvm_err "Could not find $NVM_DIR/*/share/man in \$MANPATH" else export MANPATH="$NEWPATH" - echo "$NVM_DIR/*/share/man removed from \$MANPATH" + nvm_echo "$NVM_DIR/*/share/man removed from \$MANPATH" fi fi @@ -1977,7 +1990,7 @@ nvm() { NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")" if [ "_$NODE_PATH" != "_$NEWPATH" ]; then export NODE_PATH="$NEWPATH" - echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH" + nvm_echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH" fi fi unset NVM_BIN NVM_PATH @@ -2022,23 +2035,23 @@ nvm() { if [ "_$VERSION" = '_system' ]; then if nvm_has_system_node && nvm deactivate >/dev/null 2>&1; then if [ $NVM_USE_SILENT -ne 1 ]; then - echo "Now using system version of node: $(node -v 2>/dev/null)$(nvm_print_npm_version)" + nvm_echo "Now using system version of node: $(node -v 2>/dev/null)$(nvm_print_npm_version)" fi return elif nvm_has_system_iojs && nvm deactivate >/dev/null 2>&1; then if [ $NVM_USE_SILENT -ne 1 ]; then - echo "Now using system version of io.js: $(iojs --version 2>/dev/null)$(nvm_print_npm_version)" + nvm_echo "Now using system version of io.js: $(iojs --version 2>/dev/null)$(nvm_print_npm_version)" fi return else if [ $NVM_USE_SILENT -ne 1 ]; then - echo "System version of node not found." >&2 + nvm_err 'System version of node not found.' fi return 127 fi elif [ "_$VERSION" = "_∞" ]; then if [ $NVM_USE_SILENT -ne 1 ]; then - echo "The alias \"$PROVIDED_VERSION\" leads to an infinite loop. Aborting." >&2 + nvm_err "The alias \"$PROVIDED_VERSION\" leads to an infinite loop. Aborting." fi return 8 fi @@ -2097,7 +2110,7 @@ nvm() { fi fi if [ -n "$NVM_USE_OUTPUT" ]; then - echo "$NVM_USE_OUTPUT" + nvm_echo "$NVM_USE_OUTPUT" fi ;; "run" ) @@ -2169,7 +2182,7 @@ nvm() { local ZHS_HAS_SHWORDSPLIT_UNSET ZHS_HAS_SHWORDSPLIT_UNSET=1 if nvm_has "setopt"; then - ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?) + ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; nvm_echo $?) setopt shwordsplit fi if [ "_$VERSION" = "_N/A" ]; then @@ -2195,7 +2208,7 @@ nvm() { --silent) NVM_SILENT='--silent' ; shift ;; --) break ;; --*) - >&2 echo "Unsupported option "$1"." + nvm_err "Unsupported option \"$1\"." return 55 ;; *) @@ -2233,9 +2246,9 @@ nvm() { if [ -z "${NVM_SILENT-}" ]; then if nvm_is_iojs_version "$VERSION"; then - echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)" + nvm_echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)" else - echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)" + nvm_echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)" fi fi NODE_VERSION="$VERSION" "$NVM_DIR/nvm-exec" "$@" @@ -2291,7 +2304,7 @@ nvm() { fi local NVM_OUTPUT - NVM_OUTPUT="$(echo "$NVM_LS_REMOTE_PRE_MERGED_OUTPUT + NVM_OUTPUT="$(nvm_echo "$NVM_LS_REMOTE_PRE_MERGED_OUTPUT $NVM_LS_REMOTE_IOJS_OUTPUT $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d')" if [ -n "$NVM_OUTPUT" ]; then @@ -2329,17 +2342,17 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' local NVM_BIN NVM_BIN="$(nvm use system >/dev/null 2>&1 && command which node)" if [ -n "$NVM_BIN" ]; then - echo "$NVM_BIN" + nvm_echo "$NVM_BIN" return else return 1 fi else - echo "System version of node not found." >&2 + nvm_err 'System version of node not found.' return 127 fi elif [ "_$VERSION" = "_∞" ]; then - echo "The alias \"$2\" leads to an infinite loop. Aborting." >&2 + nvm_err "The alias \"$2\" leads to an infinite loop. Aborting." return 8 fi @@ -2350,7 +2363,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' fi local NVM_VERSION_DIR NVM_VERSION_DIR="$(nvm_version_path "$VERSION")" - echo "$NVM_VERSION_DIR/bin/node" + nvm_echo "$NVM_VERSION_DIR/bin/node" ;; "alias" ) local NVM_ALIAS_DIR @@ -2377,18 +2390,18 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' return $? fi if [ "${2#*\/}" != "${2-}" ]; then - >&2 echo "Aliases in subdirectories are not supported." + nvm_err 'Aliases in subdirectories are not supported.' return 1 fi VERSION="$(nvm_version "${3-}" || return 0)" if [ "$VERSION" = 'N/A' ]; then - echo "! WARNING: Version '${3-}' does not exist." >&2 + nvm_err "! WARNING: Version '${3-}' does not exist." fi nvm_make_alias "${2-}" "${3-}" if [ "_$3" = "_$VERSION" ]; then - echo "${2-} -> ${3-}" + nvm_echo "${2-} -> ${3-}" else - echo "${2-} -> ${3-} (-> $VERSION)" + nvm_echo "${2-} -> ${3-} (-> $VERSION)" fi ;; "unalias" ) @@ -2400,14 +2413,14 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' return 127 fi if [ "${2#*\/}" != "${2-}" ]; then - >&2 echo "Aliases in subdirectories are not supported." + nvm_err 'Aliases in subdirectories are not supported.' return 1 fi - [ ! -f "$NVM_ALIAS_DIR/$2" ] && echo "Alias $2 doesn't exist!" >&2 && return + [ ! -f "$NVM_ALIAS_DIR/$2" ] && nvm_err "Alias $2 doesn't exist!" && return local NVM_ALIAS_ORIGINAL NVM_ALIAS_ORIGINAL="$(nvm_alias "$2")" command rm -f "$NVM_ALIAS_DIR/$2" - echo "Deleted alias $2 - restore it with \`nvm alias \"$2\" \"$NVM_ALIAS_ORIGINAL\"\`" + nvm_echo "Deleted alias $2 - restore it with \`nvm alias \"$2\" \"$NVM_ALIAS_ORIGINAL\"\`" ;; "reinstall-packages" | "copy-packages" ) if [ $# -ne 2 ]; then @@ -2419,14 +2432,14 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' PROVIDED_VERSION="$2" if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ] || [ "$(nvm_version "$PROVIDED_VERSION" || return 0)" = "$(nvm_ls_current)" ]; then - echo 'Can not reinstall packages from the current version of node.' >&2 + nvm_err 'Can not reinstall packages from the current version of node.' return 2 fi local VERSION if [ "_$PROVIDED_VERSION" = "_system" ]; then if ! nvm_has_system_node && ! nvm_has_system_iojs; then - echo 'No system version of node or io.js detected.' >&2 + nvm_err 'No system version of node or io.js detected.' return 3 fi VERSION="system" @@ -2441,10 +2454,10 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' INSTALLS="${NPMLIST%% //// *}" LINKS="${NPMLIST##* //// }" - echo "Reinstalling global packages from $VERSION..." - echo "$INSTALLS" | command xargs npm install -g --quiet + nvm_echo "Reinstalling global packages from $VERSION..." + nvm_echo "$INSTALLS" | command xargs npm install -g --quiet - echo "Linking global packages from $VERSION..." + nvm_echo "Linking global packages from $VERSION..." set -f; IFS=' ' # necessary to turn off variable expansion except for newlines for LINK in $LINKS; do @@ -2457,7 +2470,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' ;; "clear-cache" ) command rm -f "$NVM_DIR/v*" "$(nvm_version_dir)" 2>/dev/null - echo "Cache cleared." + nvm_echo 'Cache cleared.' ;; "version" ) nvm_version "$2" @@ -2466,7 +2479,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' nvm_remote_version "$2" ;; "--version" ) - echo "0.31.0" + nvm_echo '0.31.0' ;; "unload" ) unset -f nvm nvm_print_versions nvm_checksum \ @@ -2515,21 +2528,21 @@ nvm_auto() { NVM_MODE="${1-}" local VERSION if [ "_$NVM_MODE" = '_install' ]; then - VERSION="$(nvm_alias default 2>/dev/null || echo)" + VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)" if [ -n "$VERSION" ]; then nvm install "$VERSION" >/dev/null elif nvm_rc_version >/dev/null 2>&1; then nvm install >/dev/null fi elif [ "_$NVM_MODE" = '_use' ]; then - VERSION="$(nvm_alias default 2>/dev/null || echo)" + VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)" if [ -n "$VERSION" ]; then nvm use --silent "$VERSION" >/dev/null elif nvm_rc_version >/dev/null 2>&1; then nvm use --silent >/dev/null fi elif [ "_$NVM_MODE" != '_none' ]; then - echo >&2 'Invalid auto mode supplied.' + nvm_err 'Invalid auto mode supplied.' return 1 fi } From 8a138d98ed40403f4fde70c80c677dc6bb04cac2 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 5 May 2016 01:27:17 -0700 Subject: [PATCH 34/48] [Refactor] Use `awk` to improve version comparison performance --- nvm.sh | 39 +++++++++++++++++---------- test/fast/Unit tests/nvm_version_path | 5 +++- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/nvm.sh b/nvm.sh index 5c41c3a..a802dc7 100755 --- a/nvm.sh +++ b/nvm.sh @@ -166,19 +166,32 @@ nvm_rc_version() { } nvm_version_greater() { - local LHS - LHS="$(nvm_normalize_version "$1")" - local RHS - RHS="$(nvm_normalize_version "$2")" - [ "$LHS" -gt "$RHS" ]; + command awk 'BEGIN { + if (ARGV[1] == "" || ARGV[2] == "") exit(1) + split(ARGV[1], a, /\./); + split(ARGV[2], b, /\./); + for (i=1; i<=3; i++) { + if (a[i] && a[i] !~ /^[0-9]+$/) exit(2); + if (b[i] && b[i] !~ /^[0-9]+$/) { exit(0); } + if (a[i] < b[i]) exit(3); + else if (a[i] > b[i]) exit(0); + } + exit(4) + }' "${1#v}" "${2#v}"; } nvm_version_greater_than_or_equal_to() { - local LHS - LHS="$(nvm_normalize_version "$1")" - local RHS - RHS="$(nvm_normalize_version "$2")" - [ "$LHS" -ge "$RHS" ]; + command awk 'BEGIN { + if (ARGV[1] == "" || ARGV[2] == "") exit(1) + split(ARGV[1], a, /\./); + split(ARGV[2], b, /\./); + for (i=1; i<=3; i++) { + if (a[i] && a[i] !~ /^[0-9]+$/) exit(2); + if (a[i] < b[i]) exit(3); + else if (a[i] > b[i]) exit(0); + } + exit(0) + }' "${1#v}" "${2#v}"; } nvm_version_dir() { @@ -331,7 +344,7 @@ nvm_is_valid_version() { *) local VERSION VERSION="$(nvm_strip_iojs_prefix "$1")" - nvm_version_greater "$VERSION" + nvm_version_greater_than_or_equal_to "$VERSION" 0 ;; esac } @@ -398,9 +411,7 @@ nvm_prepend_path() { nvm_binary_available() { # binaries started with node 0.8.6 - local FIRST_VERSION_WITH_BINARY - FIRST_VERSION_WITH_BINARY="0.8.6" - nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "$1")" "$FIRST_VERSION_WITH_BINARY" + nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "${1-}")" v0.8.6 } nvm_print_formatted_alias() { diff --git a/test/fast/Unit tests/nvm_version_path b/test/fast/Unit tests/nvm_version_path index 547ceb8..b8ae685 100755 --- a/test/fast/Unit tests/nvm_version_path +++ b/test/fast/Unit tests/nvm_version_path @@ -4,7 +4,10 @@ die () { echo $@ ; exit 1; } . ../../../nvm.sh -[ "$(nvm_version_path foo)" = "$NVM_DIR/foo" ] || die '"nvm_version_path foo" did not return correct location' +OUTPUT="$(nvm_version_path foo)" +EXPECTED_OUTPUT="$NVM_DIR/foo" +[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_version_path foo' did not return correct location; expected '$EXPECTED_OUTPUT', got '$OUTPUT'" + [ "$(nvm_version_path 2>&1)" = "version is required" ] || die '"nvm_version_path" did not error out' [ "$(nvm_version_path v0.11.0)" = "$NVM_DIR/v0.11.0" ] || die 'old version has the wrong path' [ "$(nvm_version_path v0.12.0)" = "$NVM_DIR/versions/node/v0.12.0" ] || die 'new version has the wrong path' From 06c1cfcd85e75c23b5ff06a132c1a277a2f97e02 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 5 May 2016 01:30:38 -0700 Subject: [PATCH 35/48] [Refactor] avoid some pipes to `awk` --- nvm.sh | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) mode change 100755 => 100644 nvm.sh diff --git a/nvm.sh b/nvm.sh old mode 100755 new mode 100644 index a802dc7..a92df60 --- a/nvm.sh +++ b/nvm.sh @@ -42,12 +42,11 @@ nvm_get_latest() { nvm_err 'nvm needs curl or wget to proceed.' return 1 fi - if [ "_$NVM_LATEST_URL" = "_" ]; then + if [ -z "$NVM_LATEST_URL" ]; then nvm_err "http://latest.nvm.sh did not redirect to the latest release on Github" return 2 - else - nvm_echo "$NVM_LATEST_URL" | command awk -F '/' '{print $NF}' fi + nvm_echo "${NVM_LATEST_URL##*/}" } nvm_download() { @@ -350,7 +349,11 @@ nvm_is_valid_version() { } nvm_normalize_version() { - nvm_echo "${1#v}" | command awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }' + command awk 'BEGIN { + split(ARGV[1], a, /\./); + printf "%d%06d%06d\n", a[1], a[2], a[3]; + exit; + }' "${1#v}" } nvm_ensure_version_prefix() { @@ -889,19 +892,19 @@ nvm_checksum() { fi else if nvm_has "sha256sum" && ! nvm_is_alias "sha256sum"; then - NVM_CHECKSUM="$(sha256sum "$1" | awk '{print $1}')" + NVM_CHECKSUM="$(sha256sum "$1" | command awk '{print $1}')" elif nvm_has "shasum" && ! nvm_is_alias "shasum"; then - NVM_CHECKSUM="$(shasum -a 256 "$1" | awk '{print $1}')" + NVM_CHECKSUM="$(shasum -a 256 "$1" | command awk '{print $1}')" elif nvm_has "sha256" && ! nvm_is_alias "sha256"; then - NVM_CHECKSUM="$(sha256 -q "$1" | awk '{print $1}')" + NVM_CHECKSUM="$(sha256 -q "$1" | command awk '{print $1}')" elif nvm_has "gsha256sum" && ! nvm_is_alias "gsha256sum"; then - NVM_CHECKSUM="$(gsha256sum "$1" | awk '{print $1}')" + NVM_CHECKSUM="$(gsha256sum "$1" | command awk '{print $1}')" elif nvm_has "openssl" && ! nvm_is_alias "openssl"; then - NVM_CHECKSUM="$(openssl dgst -sha256 "$1" | rev | awk '{print $1}' | rev)" + NVM_CHECKSUM="$(openssl dgst -sha256 "$1" | rev | command awk '{print $1}' | rev)" elif nvm_has "libressl" && ! nvm_is_alias "libressl"; then - NVM_CHECKSUM="$(libressl dgst -sha256 "$1" | rev | awk '{print $1}' | rev)" + NVM_CHECKSUM="$(libressl dgst -sha256 "$1" | rev | command awk '{print $1}' | rev)" elif nvm_has "bssl" && ! nvm_is_alias "bssl"; then - NVM_CHECKSUM="$(bssl sha256sum "$1" | awk '{print $1}')" + NVM_CHECKSUM="$(bssl sha256sum "$1" | command awk '{print $1}')" else nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, libressl, or bssl not found.' nvm_err 'WARNING: Continuing *without checksum verification*' From d1962c67422a24568586a9fa4e360275e23d2905 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 5 May 2016 23:52:26 -0700 Subject: [PATCH 36/48] [Refactor] clean up `nvm_sanitize_path` --- nvm.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/nvm.sh b/nvm.sh index a92df60..d741f1c 100644 --- a/nvm.sh +++ b/nvm.sh @@ -1633,11 +1633,14 @@ nvm_has_solaris_binary() { nvm_sanitize_path() { local SANITIZED_PATH - SANITIZED_PATH="$1" - if [ "_$1" != "_$NVM_DIR" ]; then - SANITIZED_PATH="$(nvm_echo "$SANITIZED_PATH" | command sed "s#$NVM_DIR#\$NVM_DIR#g")" + SANITIZED_PATH="${1-}" + if [ "_$SANITIZED_PATH" != "_$NVM_DIR" ]; then + SANITIZED_PATH="${SANITIZED_PATH/#$NVM_DIR/\$NVM_DIR}" fi - nvm_echo "$SANITIZED_PATH" | command sed "s#$HOME#\$HOME#g" + if [ "_$SANITIZED_PATH" != "_$HOME" ]; then + SANITIZED_PATH="${SANITIZED_PATH/#$HOME/\$HOME}" + fi + nvm_echo "$SANITIZED_PATH" } nvm_is_natural_num() { From f49eb61f8e2ff9c6f12ab4d027b06eba36929bfe Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 5 May 2016 23:52:51 -0700 Subject: [PATCH 37/48] [Improvement] Use `nvm_sanitize_path` in `nvm_check_file_permissions`. --- nvm.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nvm.sh b/nvm.sh index d741f1c..517356f 100644 --- a/nvm.sh +++ b/nvm.sh @@ -1964,7 +1964,7 @@ nvm() { nvm_err 'Cannot uninstall, incorrect permissions on installation folder.' nvm_err 'This is usually caused by running `npm install -g` as root. Run the following command as root to fix the permissions and then try again.' nvm_err - nvm_err " chown -R $(whoami) \"$VERSION_PATH\"" + nvm_err " chown -R $(whoami) \"$(nvm_sanitize_path "$VERSION_PATH")\"" return 1 fi From 1ca2aa648fe867e68d50cfc664f0de27c7fbbbab Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 5 May 2016 23:53:13 -0700 Subject: [PATCH 38/48] [minor] Echo nonwritable file path to stderr. --- nvm.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/nvm.sh b/nvm.sh index 517356f..48fa1bf 100644 --- a/nvm.sh +++ b/nvm.sh @@ -1664,6 +1664,7 @@ nvm_check_file_permissions() { return 2 fi elif [ -e "$FILE" ] && [ ! -w "$FILE" ]; then + nvm_err "file is not writable: $(nvm_sanitize_path "$FILE")" return 1 fi done From eb329ae7a9540355ef5aea0a6de11ae9c8c55783 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 5 May 2016 23:58:27 -0700 Subject: [PATCH 39/48] [minor] display `chmod` command as well to fix file permissions. --- nvm.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nvm.sh b/nvm.sh index 48fa1bf..41bf416 100644 --- a/nvm.sh +++ b/nvm.sh @@ -1963,9 +1963,10 @@ nvm() { VERSION_PATH="$(nvm_version_path "$VERSION")" if ! nvm_check_file_permissions "$VERSION_PATH"; then nvm_err 'Cannot uninstall, incorrect permissions on installation folder.' - nvm_err 'This is usually caused by running `npm install -g` as root. Run the following command as root to fix the permissions and then try again.' + nvm_err 'This is usually caused by running `npm install -g` as root. Run the following commands as root to fix the permissions and then try again.' nvm_err nvm_err " chown -R $(whoami) \"$(nvm_sanitize_path "$VERSION_PATH")\"" + nvm_err " chmod -R u+w \"$(nvm_sanitize_path "$VERSION_PATH")\"" return 1 fi From a94ade8ec2ae0b2422063208d172b3d903a66fb5 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Fri, 6 May 2016 01:00:56 -0700 Subject: [PATCH 40/48] =?UTF-8?q?[Fix]=20don=E2=80=99t=20use=20bash=20`=3D?= =?UTF-8?q?=3D`=20in=20conditionals?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nvm.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nvm.sh b/nvm.sh index 41bf416..17b504f 100644 --- a/nvm.sh +++ b/nvm.sh @@ -879,7 +879,7 @@ nvm_ls_remote_index_tab() { nvm_checksum() { local NVM_CHECKSUM - if [ -z "$3" ] || [ "$3" == "sha1" ]; then + if [ -z "$3" ] || [ "$3" = "sha1" ]; then if nvm_has "sha1sum" && ! nvm_is_alias "sha1sum"; then NVM_CHECKSUM="$(command sha1sum "$1" | command awk '{print $1}')" elif nvm_has "sha1" && ! nvm_is_alias "sha1"; then From 05a2d986a439c77122d4d4def70d5b539bc1cb18 Mon Sep 17 00:00:00 2001 From: "Edward J. Jinotti" Date: Thu, 28 Apr 2016 10:49:13 -0400 Subject: [PATCH 41/48] Improve zsh script to revert to default node version when exiting a .nvmrc directory. --- README.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.markdown b/README.markdown index 4999302..007ecfc 100644 --- a/README.markdown +++ b/README.markdown @@ -199,6 +199,9 @@ autoload -U add-zsh-hook load-nvmrc() { if [[ -f .nvmrc && -r .nvmrc ]]; then nvm use + elif [[ $(nvm version) != $(nvm version default) ]]; then + echo "Reverting to nvm default version" + nvm use default fi } add-zsh-hook chpwd load-nvmrc From d4d879e6223a6473cecb5f47fb34d49e053d8e1c Mon Sep 17 00:00:00 2001 From: "Edward J. Jinotti" Date: Thu, 28 Apr 2016 11:14:23 -0400 Subject: [PATCH 42/48] zsh script: Check version / .nvmrc on new shell also. --- README.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.markdown b/README.markdown index 007ecfc..27a143c 100644 --- a/README.markdown +++ b/README.markdown @@ -195,6 +195,7 @@ Put this into your `$HOME/.zshrc` to call `nvm use` automatically whenever you e `.nvmrc` file with a string telling nvm which node to `use`: ```zsh +# place this after nvm initialization! autoload -U add-zsh-hook load-nvmrc() { if [[ -f .nvmrc && -r .nvmrc ]]; then @@ -205,6 +206,7 @@ load-nvmrc() { fi } add-zsh-hook chpwd load-nvmrc +load-nvmrc ``` ## License From fc82742a8b5ccce3aefac966cb2af30e129432d2 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Fri, 6 May 2016 12:29:01 -0700 Subject: [PATCH 43/48] [Robustness] add a missing `command` to a `sed` call --- nvm.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nvm.sh b/nvm.sh index 17b504f..7696a09 100644 --- a/nvm.sh +++ b/nvm.sh @@ -999,7 +999,7 @@ nvm_print_implicit_alias() { NVM_IOJS_VERSION="$($NVM_COMMAND)" EXIT_CODE="$?" if [ "_$EXIT_CODE" = "_0" ]; then - NVM_IOJS_VERSION="$(nvm_echo "$NVM_IOJS_VERSION" | sed "s/^$NVM_IMPLICIT-//" | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)" + NVM_IOJS_VERSION="$(nvm_echo "$NVM_IOJS_VERSION" | command sed "s/^$NVM_IMPLICIT-//" | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)" fi if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then From bc3d028152e1b8a4e6b2c992aef789d78159ccb7 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sat, 7 May 2016 18:14:11 -0700 Subject: [PATCH 44/48] `nvm alias`: colorize output when creating aliases. --- nvm.sh | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/nvm.sh b/nvm.sh index 7696a09..6376c22 100644 --- a/nvm.sh +++ b/nvm.sh @@ -423,10 +423,13 @@ nvm_print_formatted_alias() { local DEST DEST="${2-}" local VERSION + VERSION="${3-}" + if [ -z "$VERSION" ]; then + VERSION="$(nvm_version "$DEST" || return 0)" + fi local VERSION_FORMAT local ALIAS_FORMAT local DEST_FORMAT - VERSION="$(nvm_version "$DEST" || return 0)" ALIAS_FORMAT='%s' DEST_FORMAT='%s' VERSION_FORMAT='%s' @@ -2388,9 +2391,9 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' local NVM_ALIAS_DIR NVM_ALIAS_DIR="$(nvm_alias_path)" command mkdir -p "$NVM_ALIAS_DIR" + local NVM_CURRENT + NVM_CURRENT="$(nvm_ls_current)" if [ $# -le 2 ]; then - local NVM_CURRENT - NVM_CURRENT="$(nvm_ls_current)" local ALIAS_PATH for ALIAS_PATH in "$NVM_ALIAS_DIR/${2-}"*; do NVM_CURRENT="${NVM_CURRENT}" nvm_print_alias_path "$NVM_ALIAS_DIR" "$ALIAS_PATH" @@ -2417,11 +2420,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' nvm_err "! WARNING: Version '${3-}' does not exist." fi nvm_make_alias "${2-}" "${3-}" - if [ "_$3" = "_$VERSION" ]; then - nvm_echo "${2-} -> ${3-}" - else - nvm_echo "${2-} -> ${3-} (-> $VERSION)" - fi + NVM_CURRENT="${NVM_CURRENT-}" DEFAULT=false nvm_print_formatted_alias "${2-}" "${3-}" "$VERSION" ;; "unalias" ) local NVM_ALIAS_DIR From 6311a0e9c465ba19bd487952c58a5b4484642e49 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sat, 7 May 2016 18:51:21 -0700 Subject: [PATCH 45/48] `nvm ls`/`nvm alias`/`nvm ls-remote`: only colorize when colors are supported. --- nvm.sh | 75 ++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 52 insertions(+), 23 deletions(-) diff --git a/nvm.sh b/nvm.sh index 6376c22..075f884 100644 --- a/nvm.sh +++ b/nvm.sh @@ -32,6 +32,14 @@ nvm_is_alias() { \alias "$1" > /dev/null 2>&1 } +nvm_has_colors() { + local NVM_COLORS + if test -t 1; then + NVM_COLORS="$(tput -T "${TERM:-vt100}" colors)" + fi + [ "${NVM_COLORS:--1}" -ge 8 ] +} + nvm_get_latest() { local NVM_LATEST_URL if nvm_has "curl"; then @@ -433,28 +441,36 @@ nvm_print_formatted_alias() { ALIAS_FORMAT='%s' DEST_FORMAT='%s' VERSION_FORMAT='%s' - if [ "_$VERSION" = "_${NVM_CURRENT-}" ]; then - ALIAS_FORMAT='\033[0;32m%s\033[0m' - DEST_FORMAT='\033[0;32m%s\033[0m' - VERSION_FORMAT='\033[0;32m%s\033[0m' - elif nvm_is_version_installed "$VERSION"; then - ALIAS_FORMAT='\033[0;34m%s\033[0m' - DEST_FORMAT='\033[0;34m%s\033[0m' - VERSION_FORMAT='\033[0;34m%s\033[0m' - elif [ "_$VERSION" = '_∞' ] || [ "_$VERSION" = '_N/A' ]; then - ALIAS_FORMAT='\033[1;31m%s\033[0m' - DEST_FORMAT='\033[1;31m%s\033[0m' - VERSION_FORMAT='\033[1;31m%s\033[0m' - fi local NEWLINE NEWLINE="\n" if [ "_$DEFAULT" = '_true' ]; then - NEWLINE=" \033[0;37m(default)\033[0m\n" + NEWLINE=" (default)\n" + fi + local ARROW + ARROW='->' + if nvm_has_colors; then + ARROW='\033[0;90m->\033[0m' + if [ "_$DEFAULT" = '_true' ]; then + NEWLINE=" \033[0;37m(default)\033[0m\n" + fi + if [ "_$VERSION" = "_${NVM_CURRENT-}" ]; then + ALIAS_FORMAT='\033[0;32m%s\033[0m' + DEST_FORMAT='\033[0;32m%s\033[0m' + VERSION_FORMAT='\033[0;32m%s\033[0m' + elif nvm_is_version_installed "$VERSION"; then + ALIAS_FORMAT='\033[0;34m%s\033[0m' + DEST_FORMAT='\033[0;34m%s\033[0m' + VERSION_FORMAT='\033[0;34m%s\033[0m' + elif [ "_$VERSION" = '_∞' ] || [ "_$VERSION" = '_N/A' ]; then + ALIAS_FORMAT='\033[1;31m%s\033[0m' + DEST_FORMAT='\033[1;31m%s\033[0m' + VERSION_FORMAT='\033[1;31m%s\033[0m' + fi fi if [ "_$DEST" = "_$VERSION" ]; then - command printf "${ALIAS_FORMAT} \033[0;90m->\033[0m ${VERSION_FORMAT}${NEWLINE}" "$ALIAS" "$DEST" + command printf "${ALIAS_FORMAT} ${ARROW} ${VERSION_FORMAT}${NEWLINE}" "$ALIAS" "$DEST" else - command printf "${ALIAS_FORMAT} \033[0;90m->\033[0m ${DEST_FORMAT} (\033[0;90m->\033[0m ${VERSION_FORMAT})${NEWLINE}" "$ALIAS" "$DEST" "$VERSION" + command printf "${ALIAS_FORMAT} ${ARROW} ${DEST_FORMAT} (${ARROW} ${VERSION_FORMAT})${NEWLINE}" "$ALIAS" "$DEST" "$VERSION" fi } @@ -931,17 +947,30 @@ nvm_print_versions() { local FORMAT local NVM_CURRENT NVM_CURRENT=$(nvm_ls_current) + local NVM_HAS_COLORS + if nvm_has_colors; then + NVM_HAS_COLORS=1 + fi nvm_echo "$1" | while read -r VERSION; do + FORMAT='%15s' if [ "_$VERSION" = "_$NVM_CURRENT" ]; then - FORMAT='\033[0;32m-> %12s\033[0m' + if [ "${NVM_HAS_COLORS-}" = '1' ]; then + FORMAT='\033[0;32m-> %12s\033[0m' + else + FORMAT='-> %12s *' + fi elif [ "$VERSION" = "system" ]; then - FORMAT='\033[0;33m%15s\033[0m' + if [ "${NVM_HAS_COLORS-}" = '1' ]; then + FORMAT='\033[0;33m%15s\033[0m' + fi elif nvm_is_version_installed "$VERSION"; then - FORMAT='\033[0;34m%15s\033[0m' - else - FORMAT='%15s' + if [ "${NVM_HAS_COLORS-}" = '1' ]; then + FORMAT='\033[0;34m%15s\033[0m' + else + FORMAT='%15s *' + fi fi - command printf "$FORMAT\n" "$VERSION" + command printf -- "$FORMAT\n" "$VERSION" done } @@ -2523,7 +2552,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' nvm_has_system_node nvm_has_system_iojs \ nvm_download nvm_get_latest nvm_has nvm_get_latest \ nvm_supports_source_options nvm_auto nvm_supports_xz \ - nvm_process_parameters > /dev/null 2>&1 + nvm_has_colors nvm_process_parameters > /dev/null 2>&1 unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1 ;; * ) From 08805399729e3e17a96c4ff1ae53c243d81272c5 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sun, 8 May 2016 20:05:59 -0700 Subject: [PATCH 46/48] `nvm_strip_path`: Error out when `$NVM_DIR` is not set. Per https://github.com/creationix/nvm/issues/1083#issuecomment-217752185 --- nvm.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nvm.sh b/nvm.sh index 075f884..010801e 100644 --- a/nvm.sh +++ b/nvm.sh @@ -403,6 +403,10 @@ nvm_num_version_groups() { } nvm_strip_path() { + if [ -z "${NVM_DIR-}" ]; then + nvm_err '$NVM_DIR not set!' + return 1 + fi nvm_echo "$1" | command sed \ -e "s#$NVM_DIR/[^/]*$2[^:]*:##g" \ -e "s#:$NVM_DIR/[^/]*$2[^:]*##g" \ From eeaddf9ab0c42e9135d7968cc429a26e92e6380d Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sun, 8 May 2016 17:10:02 -0700 Subject: [PATCH 47/48] =?UTF-8?q?Don=E2=80=99t=20restrict=20colors=20to=20?= =?UTF-8?q?TTYs.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This restriction prevents subcommands from producing colors and passing them up the tree to the actual TTY. --- nvm.sh | 4 +--- test/fast/Aliases/nvm_ensure_default_set | 4 +++- test/fast/Unit tests/nvm_ensure_default_set | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/nvm.sh b/nvm.sh index 010801e..2ba9d9b 100644 --- a/nvm.sh +++ b/nvm.sh @@ -34,9 +34,7 @@ nvm_is_alias() { nvm_has_colors() { local NVM_COLORS - if test -t 1; then - NVM_COLORS="$(tput -T "${TERM:-vt100}" colors)" - fi + NVM_COLORS="$(tput -T "${TERM:-vt100}" colors)" [ "${NVM_COLORS:--1}" -ge 8 ] } diff --git a/test/fast/Aliases/nvm_ensure_default_set b/test/fast/Aliases/nvm_ensure_default_set index c719e4b..602ceba 100755 --- a/test/fast/Aliases/nvm_ensure_default_set +++ b/test/fast/Aliases/nvm_ensure_default_set @@ -1,5 +1,7 @@ #!/bin/sh +. ../../common.sh + die () { echo $@ ; exit 1; } . ../../../nvm.sh @@ -14,5 +16,5 @@ OUTPUT="$(nvm_ensure_default_set 0.2)" EXPECTED_OUTPUT="Creating default alias: default -> 0.2 (-> iojs-v0.2.10)" EXIT_CODE="$?" -[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set 0.2' did not output '$EXPECTED_OUTPUT', got '$OUTPUT'" +[ "_$(echo "$OUTPUT" | strip_colors)" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set 0.2' did not output '$EXPECTED_OUTPUT', got '$OUTPUT'" [ "_$EXIT_CODE" = "_0" ] || die "'nvm_ensure_default_set 0.2' did not exit with 0, got $EXIT_CODE" diff --git a/test/fast/Unit tests/nvm_ensure_default_set b/test/fast/Unit tests/nvm_ensure_default_set index edd926c..fb0461b 100755 --- a/test/fast/Unit tests/nvm_ensure_default_set +++ b/test/fast/Unit tests/nvm_ensure_default_set @@ -1,5 +1,7 @@ #!/bin/sh +. ../../common.sh + die () { echo $@ ; exit 1; } . ../../../nvm.sh @@ -7,7 +9,7 @@ die () { echo $@ ; exit 1; } EXPECTED_OUTPUT="nvm_ensure_default_set: a version is required" OUTPUT="$(nvm_ensure_default_set 2>&1 >/dev/null)" EXIT_CODE="$?" -[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set' did not output "$EXPECTED_OUTPUT", got "$OUTPUT"" +[ "_$(echo "$OUTPUT" | strip_colors)" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set' did not output "$EXPECTED_OUTPUT", got "$OUTPUT"" [ "_$EXIT_CODE" = "_1" ] || die "'nvm_ensure_default_set' did not exit with 1, got "$EXIT_CODE"" # see test/fast/Aliases for remaining nvm_ensure_default_set tests From ec2f450b6e9e64e469cc9e7aeaaa418ab82ca607 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Mon, 9 May 2016 22:06:43 -0700 Subject: [PATCH 48/48] v0.31.1 --- README.markdown | 6 +++--- install.sh | 2 +- nvm.sh | 2 +- package.json | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.markdown b/README.markdown index 27a143c..3d65739 100644 --- a/README.markdown +++ b/README.markdown @@ -29,11 +29,11 @@ Homebrew installation is not supported. To install or update nvm, you can use the [install script][2] using cURL: - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash + curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash or Wget: - wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash + wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`). @@ -318,7 +318,7 @@ After the v0.8.6 release of node, nvm tries to install from binary packages. But If setting the `default` alias does not establish the node version in new shells (i.e. `nvm current` yields `system`), ensure that the system's node PATH is set before the `nvm.sh` source line in your shell profile (see [#658](https://github.com/creationix/nvm/issues/658)) [1]: https://github.com/creationix/nvm.git -[2]: https://github.com/creationix/nvm/blob/v0.31.0/install.sh +[2]: https://github.com/creationix/nvm/blob/v0.31.1/install.sh [3]: https://travis-ci.org/creationix/nvm [Urchin]: https://github.com/scraperwiki/urchin [Fish]: http://fishshell.com diff --git a/install.sh b/install.sh index cfb6c29..a1aaa1c 100755 --- a/install.sh +++ b/install.sh @@ -11,7 +11,7 @@ if [ -z "$NVM_DIR" ]; then fi nvm_latest_version() { - echo "v0.31.0" + echo "v0.31.1" } # diff --git a/nvm.sh b/nvm.sh index 2ba9d9b..ce5c6b5 100644 --- a/nvm.sh +++ b/nvm.sh @@ -2528,7 +2528,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d' nvm_remote_version "$2" ;; "--version" ) - nvm_echo '0.31.0' + nvm_echo '0.31.1' ;; "unload" ) unset -f nvm nvm_print_versions nvm_checksum \ diff --git a/package.json b/package.json index 16c16ad..4a6052b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nvm", - "version": "0.31.0", + "version": "0.31.1", "description": "Node Version Manager - Simple bash script to manage multiple active node.js versions", "directories": { "test": "test"