Compare commits

...

59 Commits

Author SHA1 Message Date
Jordan Harband
96c96ec714 v0.25.2 2015-05-19 14:05:43 -07:00
Jordan Harband
475b8bd6b4 Update semver 2015-05-17 21:12:03 -07:00
Jordan Harband
5e805905ca Add undocumented nvm debug to print out helpful debugging info. 2015-05-14 14:56:26 -07:00
Jordan Harband
2dec01da9c nvm reinstall-packages: On systems where npm ls -g --depth=0 does not include npm for some reason, make sure to filter out (empty). 2015-05-08 14:24:51 -07:00
Jordan Harband
63672641a5 Add wrapping curly braces to ensure that the entire scripts are downloaded.
If the closing curly brace isn't present, the script will error out.
2015-05-11 01:46:18 -07:00
Jordan Harband
94bba31de3 Make sure that nvm reinstall-packages system has the right std output. 2015-05-08 14:15:42 -07:00
Jordan Harband
f70530ef18 Fix installation instructions. 2015-05-07 10:43:47 -07:00
Jordan Harband
ec33e8b720 v0.25.1 2015-05-03 15:31:54 -07:00
Jordan Harband
a4f89c6223 Make sure to ignore ~/.curlrc if it exists. 2015-05-01 02:00:49 -07:00
Jordan Harband
517817f1a3 Actually try to install from source when the error message says "binary failed, trying source". 2015-04-27 14:02:45 -07:00
Jordan Harband
a6f5eff0f3 Use uname -m instead of uname -a.
Fixes #744.
2015-04-28 22:56:43 -07:00
Jordan Harband
0aac462b15 Improve the error message when the binary tarball URL 404s.
Fixes #743
2015-04-27 13:48:22 -07:00
Jordan Harband
bb2fe618cb The install script only runs in bash. 2015-04-27 16:55:21 -07:00
Jordan Harband
eb5cecc970 v0.25.0 2015-04-26 12:58:05 -07:00
Jordan Harband
36f933984d Remove trailing whitespace. 2015-04-25 11:21:33 -07:00
Jordan Harband
54d2d70048 Merge pull request #742 from sjasperse/bugfix/rasp-pi-2-arch-detect
adding architecture detection for Raspberry Pi 2
2015-04-26 00:04:00 -07:00
Scott Jasperse
e1009149c9 adding architecture detection for Raspberry Pi 2 2015-04-25 19:10:02 -04:00
Jordan Harband
153ee6887e Merge pull request #741 from phillipsj/master
Adding .gitattributes to force unix line endings.

Fixes #728
2015-04-25 10:58:52 -07:00
Jamie Phillips
295f2b7db4 Adding .gitattributes to force unix line endings.
Hopefully this helps with issue #728
2015-04-25 10:35:22 -04:00
Jordan Harband
356ac7a697 install.sh: Ensure that the --quiet option is available before trying to use it.
Fixes #738, #657.
2015-04-22 00:40:27 -07:00
Jordan Harband
64c88ce62e Merge pull request #735 from madarche/fix-doc
Remove source bashism
2015-04-19 10:32:48 -07:00
Marc-Aurèle DARCHE
4612d8d827 Remove source bashism
Using `.` and not `source`, since it's more portable

cf. #704 and https://wiki.ubuntu.com/DashAsBinSh#source
2015-04-19 16:25:34 +02:00
Jordan Harband
6644f33a77 Update semver, use ^ instead of ~ 2015-04-17 00:24:44 -07:00
Jordan Harband
cbf0f12aac Create nvm_print_npm_version and use that when printing the npm version. 2015-04-12 10:59:17 -07:00
Jordan Harband
de93dc46d0 Merge pull request #726 from SeeThruHead/master
README: Add note about `~/.npmrc` compatibility issues.

Relates to #606.
2015-04-13 13:58:53 -07:00
Shane Keulen
7ea15a7618 Added compatibility issues section
Sections includes warnings for cretain nonstandard path settings and environment variables that conflict with nvm.
2015-04-13 16:54:20 -04:00
Jordan Harband
6a114eddcc Merge pull request #722 from ajcrites/list-npm-version
Include npm version when displaying results of switch.
2015-04-12 10:53:37 -07:00
Andrew Crites
e4149c380b Only print npm version if it exists 2015-04-09 02:31:57 -04:00
Andrew Crites
caa69bc500 npm version: shell compatibility, test update
* Update test string that checks printed node version to pass with additional npm version display
* Remove echo -n for compatibility with shells that do not support it
2015-04-09 02:12:35 -04:00
Andrew Crites
e01bcb740b Include npm version when displaying results of switch.
When running nvm use, successful changing of versions lists the new node version.  The npm version may also be switched, but this is not listed.

This commit updates nvm to display the npm version that was switched to alongside the node version
2015-04-09 01:20:51 -04:00
Jordan Harband
276d55c912 Merge pull request #718 from joliss/performance
Consolidate and avoid sed/cut calls, clean up pattern matches
2015-04-06 21:06:46 -07:00
Jo Liss
0dc177bf9c Consolidate and avoid sed/cut calls, clean up pattern matches
Some patterns contained a no-op `*`; the `*` would match the empty string
because # or % replacement (unlike ## or %%) tries to find the shortest match.
2015-04-06 20:30:38 +00:00
Jordan Harband
c34502ebc2 nvm_num_version_groups should report 0 when given just a v or a . 2015-04-06 11:10:43 -07:00
Jordan Harband
3d764e6833 Add nvm_ensure_default_set 2015-04-05 16:49:29 -07:00
Jordan Harband
a26ef4f1be Consolidate reinstall-packages-from logic to one place nvm install 2015-04-05 16:09:47 -07:00
Jordan Harband
d68f667464 When no arguments are passed to nvm run X, use nvm exec to open a REPL.
Fixes #625. Tests will be in #717.
2015-04-05 15:13:35 -07:00
Jordan Harband
c966204cd6 v0.24.1 2015-04-05 12:55:17 -07:00
Jordan Harband
d72b35b7b8 Remove external calls to sed using parameter filtering.
POSIX-compliant per http://stackoverflow.com/a/25536935/632724

Relates to #709
2015-04-05 02:35:05 -07:00
Jordan Harband
d50a0f46e9 Avoid some external calls by using case statements.
Relates to #709.
2015-04-04 23:59:12 -07:00
Jordan Harband
82393f5b36 Making sure this test passes whether a system node is installed or not. 2015-04-04 23:49:43 -07:00
Jordan Harband
a1a8e5a51b Clean up logic a bit. 2015-04-04 14:53:38 -07:00
Jordan Harband
108f630732 Cache the nvm_node_prefix call. 2015-04-04 14:31:56 -07:00
Jordan Harband
96e73825bd Consolidate faster default alias lookup, and use that explicit version to avoid a second default alias lookup in nvm use default.
Related to #709.
2015-04-04 15:45:40 -07:00
Jordan Harband
9fc20bb14b Merge pull request #710 from joliss/sed
Combine sed and grep commands
2015-04-02 17:00:20 -07:00
Jordan Harband
3401d15a18 Merge pull request #705 from joliss/performance
Improve startup performance. Closes #703
2015-04-02 16:59:38 -07:00
Jo Liss
394e8505d9 Combine sed and grep commands 2015-04-02 16:58:31 +00:00
Jo Liss
fc86834e29 Add comment re nvm_ensure_version_installed performance 2015-04-02 15:30:33 +00:00
Jo Liss
609d9ee4ea Improve startup performance. Closes #703 2015-04-02 15:30:33 +00:00
Jordan Harband
70370a857f No more need for sudo to install ksh and zsh. 2015-03-19 11:05:31 -07:00
Jordan Harband
65a986c633 Merge pull request #693 from hax/reinstall-links
support npm link for reinstall-packages
2015-03-18 22:22:23 -07:00
Jordan Harband
3cc5d6af67 Merge pull request #694 from pfac/pfac-fix-source-nvm-sh-error-message
Fix error message when sourcing nvm.sh
2015-03-18 10:05:22 -07:00
Pedro Costa
999c4111c1 Supresses error message on checking source options 2015-03-18 10:21:11 +00:00
HE Shi-Jun
3d69cf7437 update testcase 2015-03-17 15:54:50 +08:00
HE Shi-Jun
207521d54b support npm link 2015-03-17 14:19:32 +08:00
Jordan Harband
7750253bca Merge pull request #690 from hax/patch-1
Only filter the package `npm`, not any package name that contains 'npm'
2015-03-16 03:10:50 -07:00
HE Shi-Jun
14b23bfa95 fix reinstall-packages test 2015-03-15 06:21:35 +08:00
HE Shi-Jun
bf7bd3e793 Only filter the package npm, not any package name contains 'npm' 2015-03-15 06:21:35 +08:00
Jordan Harband
2b63f37f8d Make nvm_resolve_local_alias not return N/A - that should be done as shallowly as possible. 2015-03-14 10:55:31 -07:00
Jordan Harband
230b479648 Making help error output actually output to stderr consistently. 2015-03-14 10:34:52 -07:00
20 changed files with 324 additions and 125 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
*.sh eol=lf

View File

@@ -1,17 +1,16 @@
language: c # defaults to ruby language: c # defaults to ruby
addons:
apt_packages:
- zsh
- ksh
install: install:
- sudo apt-get install zsh -y # ksh
- (mkdir /tmp/urchin && cd /tmp/urchin && curl -s "$(curl -s https://registry.npmjs.com/urchin | grep -Eo '"tarball":\s*"[^"]+"' | tail -n 1 | awk -F\" '{ print $4 }')" -O && tar -x -f urchin*) - (mkdir /tmp/urchin && cd /tmp/urchin && curl -s "$(curl -s https://registry.npmjs.com/urchin | grep -Eo '"tarball":\s*"[^"]+"' | tail -n 1 | awk -F\" '{ print $4 }')" -O && tar -x -f urchin*)
- chmod +x /tmp/urchin/package/urchin - chmod +x /tmp/urchin/package/urchin
- '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y' - '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y'
script: script:
- NVM_DIR=$TRAVIS_BUILD_DIR make TEST_SUITE=$TEST_SUITE URCHIN=/tmp/urchin/package/urchin test-$SHELL - NVM_DIR=$TRAVIS_BUILD_DIR make TEST_SUITE=$TEST_SUITE URCHIN=/tmp/urchin/package/urchin test-$SHELL
env: env:
- SHELL=sh TEST_SUITE=install_script
- SHELL=dash TEST_SUITE=install_script
- SHELL=bash TEST_SUITE=install_script - SHELL=bash TEST_SUITE=install_script
- SHELL=zsh TEST_SUITE=install_script
# - SHELL=ksh TEST_SUITE=install_script
- SHELL=sh TEST_SUITE=fast - SHELL=sh TEST_SUITE=fast
- SHELL=dash TEST_SUITE=fast - SHELL=dash TEST_SUITE=fast
- SHELL=bash TEST_SUITE=fast - SHELL=bash TEST_SUITE=fast

View File

@@ -16,11 +16,11 @@ Note: `nvm` does not support [Fish] either (see [#303](https://github.com/creati
To install you could use the [install script][2] using cURL: To install you could use the [install script][2] using cURL:
curl https://raw.githubusercontent.com/creationix/nvm/v0.24.0/install.sh | bash curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.2/install.sh | bash
or Wget: or Wget:
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.24.0/install.sh | bash wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.25.2/install.sh | bash
<sub>The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile`, `~/.zshrc` or `~/.profile`).</sub> <sub>The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile`, `~/.zshrc` or `~/.profile`).</sub>
@@ -39,7 +39,7 @@ Or if you have `git` installed, then just clone it, and check out the latest ver
To activate nvm, you need to source it from your shell: To activate nvm, you need to source it from your shell:
source ~/.nvm/nvm.sh . ~/.nvm/nvm.sh
I always add this line to my `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login. I always add this line to my `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login.
Often I also put in a line to use a specific version of node. Often I also put in a line to use a specific version of node.
@@ -187,6 +187,20 @@ nvm uninstall
$ nvm uninstall [tab][tab] $ nvm uninstall [tab][tab]
my_alias default v0.6.21 v0.8.26 v0.10.28 my_alias default v0.6.21 v0.8.26 v0.10.28
## Compatibility Issues
`nvm` will encounter some issues if you have some non-default settings set. (see [#606](/../../issues/606))
The following are known to cause issues:
Inside `~/.npmrc`
```
prefix='some/path'
```
Environment Variables:
```
$NPM_CONFIG_PREFIX
$PREFIX
```
## Problems ## Problems
If you try to install a node version and the installation fails, be sure to delete the node downloads from src (~/.nvm/src/) or you might get an error when trying to reinstall them again or you might get an error like the following: If you try to install a node version and the installation fails, be sure to delete the node downloads from src (~/.nvm/src/) or you might get an error when trying to reinstall them again or you might get an error like the following:
@@ -206,7 +220,7 @@ After the v0.8.6 release of node, nvm tries to install from binary packages. But
nvm install -s 0.8.6 nvm install -s 0.8.6
[1]: https://github.com/creationix/nvm.git [1]: https://github.com/creationix/nvm.git
[2]: https://github.com/creationix/nvm/blob/v0.24.0/install.sh [2]: https://github.com/creationix/nvm/blob/v0.25.2/install.sh
[3]: https://travis-ci.org/creationix/nvm [3]: https://travis-ci.org/creationix/nvm
[Urchin]: https://github.com/scraperwiki/urchin [Urchin]: https://github.com/scraperwiki/urchin
[Fish]: http://fishshell.com [Fish]: http://fishshell.com

View File

@@ -2,6 +2,8 @@
set -e set -e
{ # this ensures the entire script is downloaded #
nvm_has() { nvm_has() {
type "$1" > /dev/null 2>&1 type "$1" > /dev/null 2>&1
} }
@@ -11,7 +13,7 @@ if [ -z "$NVM_DIR" ]; then
fi fi
nvm_latest_version() { nvm_latest_version() {
echo "v0.24.0" echo "v0.25.2"
} }
# #
@@ -42,7 +44,7 @@ nvm_source() {
nvm_download() { nvm_download() {
if nvm_has "curl"; then if nvm_has "curl"; then
curl $* curl -q $*
elif nvm_has "wget"; then elif nvm_has "wget"; then
# Emulate curl with wget # Emulate curl with wget
ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \ ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \
@@ -71,7 +73,12 @@ install_nvm_from_git() {
fi fi
cd "$NVM_DIR" && command git checkout --quiet $(nvm_latest_version) cd "$NVM_DIR" && command git checkout --quiet $(nvm_latest_version)
if [ ! -z "$(cd "$NVM_DIR" && git show-ref refs/heads/master)" ]; then if [ ! -z "$(cd "$NVM_DIR" && git show-ref refs/heads/master)" ]; then
if git branch --quiet 2>/dev/null; then
cd "$NVM_DIR" && command git branch --quiet -D master >/dev/null 2>&1 cd "$NVM_DIR" && command git branch --quiet -D master >/dev/null 2>&1
else
echo >&2 "Your version of git is out of date. Please update it!"
cd "$NVM_DIR" && command git branch -D master >/dev/null 2>&1
fi
fi fi
return return
} }
@@ -236,3 +243,5 @@ nvm_reset() {
} }
[ "_$NVM_ENV" = "_testing" ] || nvm_do_install [ "_$NVM_ENV" = "_testing" ] || nvm_do_install
} # this ensures the entire script is downloaded #

View File

@@ -11,4 +11,3 @@ else
fi fi
exec $@ exec $@

268
nvm.sh
View File

@@ -6,6 +6,8 @@
# Implemented by Tim Caswell <tim@creationix.com> # Implemented by Tim Caswell <tim@creationix.com>
# with much bash help from Matthew Ranney # with much bash help from Matthew Ranney
{ # this ensures the entire script is downloaded #
NVM_SCRIPT_SOURCE="$_" NVM_SCRIPT_SOURCE="$_"
nvm_has() { nvm_has() {
@@ -20,7 +22,7 @@ nvm_is_alias() {
nvm_get_latest() { nvm_get_latest() {
local NVM_LATEST_URL local NVM_LATEST_URL
if nvm_has "curl"; then if nvm_has "curl"; then
NVM_LATEST_URL="$(curl -w "%{url_effective}\n" -L -s -S http://latest.nvm.sh -o /dev/null)" NVM_LATEST_URL="$(curl -q -w "%{url_effective}\n" -L -s -S http://latest.nvm.sh -o /dev/null)"
elif nvm_has "wget"; then elif nvm_has "wget"; then
NVM_LATEST_URL="$(wget http://latest.nvm.sh --server-response -O /dev/null 2>&1 | awk '/^ Location: /{DEST=$2} END{ print DEST }')" NVM_LATEST_URL="$(wget http://latest.nvm.sh --server-response -O /dev/null 2>&1 | awk '/^ Location: /{DEST=$2} END{ print DEST }')"
else else
@@ -37,7 +39,7 @@ nvm_get_latest() {
nvm_download() { nvm_download() {
if nvm_has "curl"; then if nvm_has "curl"; then
curl $* curl -q $*
elif nvm_has "wget"; then elif nvm_has "wget"; then
# Emulate curl with wget # Emulate curl with wget
ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \ ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \
@@ -58,6 +60,12 @@ nvm_has_system_iojs() {
[ "$(nvm deactivate >/dev/null 2>&1 && command -v iojs)" != '' ] [ "$(nvm deactivate >/dev/null 2>&1 && command -v iojs)" != '' ]
} }
nvm_print_npm_version() {
if nvm_has "npm"; then
npm --version 2>/dev/null | command xargs printf " (npm v%s)"
fi
}
# Make zsh glob matching behave same as bash # Make zsh glob matching behave same as bash
# This fixes the "zsh: no matches found" errors # This fixes the "zsh: no matches found" errors
if nvm_has "unsetopt"; then if nvm_has "unsetopt"; then
@@ -222,8 +230,10 @@ nvm_version() {
return $? return $?
fi fi
local NVM_NODE_PREFIX
NVM_NODE_PREFIX="$(nvm_node_prefix)"
case "_$PATTERN" in case "_$PATTERN" in
"_$(nvm_node_prefix)" | "_$(nvm_node_prefix)-") "_$NVM_NODE_PREFIX" | "_$NVM_NODE_PREFIX-")
PATTERN="stable" PATTERN="stable"
;; ;;
esac esac
@@ -259,14 +269,12 @@ nvm_remote_version() {
} }
nvm_remote_versions() { nvm_remote_versions() {
local NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local NVM_IOJS_PREFIX
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
local PATTERN local PATTERN
PATTERN="$1" PATTERN="$1"
if [ "_$PATTERN" = "_io.js" ]; then
PATTERN="$NVM_IOJS_PREFIX"
fi
case "_$PATTERN" in case "_$PATTERN" in
"_$NVM_IOJS_PREFIX") "_$NVM_IOJS_PREFIX" | "_io.js")
VERSIONS="$(nvm_ls_remote_iojs)" VERSIONS="$(nvm_ls_remote_iojs)"
;; ;;
"_$(nvm_node_prefix)") "_$(nvm_node_prefix)")
@@ -307,7 +315,7 @@ nvm_is_valid_version() {
} }
nvm_normalize_version() { nvm_normalize_version() {
echo "$1" | command sed -e 's/^v//' | command awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }' echo "${1#v}" | command awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }'
} }
nvm_ensure_version_prefix() { nvm_ensure_version_prefix() {
@@ -324,8 +332,7 @@ nvm_format_version() {
local VERSION local VERSION
VERSION="$(nvm_ensure_version_prefix "$1")" VERSION="$(nvm_ensure_version_prefix "$1")"
if [ "_$(nvm_num_version_groups "$VERSION")" != "_3" ]; then if [ "_$(nvm_num_version_groups "$VERSION")" != "_3" ]; then
VERSION="$(echo "$VERSION" | command sed -e 's/\.*$/.0/')" nvm_format_version "${VERSION%.}.0"
nvm_format_version "$VERSION"
else else
echo "$VERSION" echo "$VERSION"
fi fi
@@ -334,14 +341,16 @@ nvm_format_version() {
nvm_num_version_groups() { nvm_num_version_groups() {
local VERSION local VERSION
VERSION="$1" VERSION="$1"
VERSION="${VERSION#v}"
VERSION="${VERSION%.}"
if [ -z "$VERSION" ]; then if [ -z "$VERSION" ]; then
echo "0" echo "0"
return return
fi fi
local NVM_NUM_DOTS local NVM_NUM_DOTS
NVM_NUM_DOTS=$(echo "$VERSION" | command sed -e 's/^v//' | command sed -e 's/\.$//' | command sed -e 's/[^\.]//g') NVM_NUM_DOTS=$(echo "$VERSION" | command sed -e 's/[^\.]//g')
local NVM_NUM_GROUPS local NVM_NUM_GROUPS
NVM_NUM_GROUPS=".$NVM_NUM_DOTS" NVM_NUM_GROUPS=".$NVM_NUM_DOTS" # add extra dot, since it's (n - 1) dots at this point
echo "${#NVM_NUM_GROUPS}" echo "${#NVM_NUM_GROUPS}"
} }
@@ -478,7 +487,6 @@ nvm_resolve_local_alias() {
VERSION="$(nvm_resolve_alias "$1")" VERSION="$(nvm_resolve_alias "$1")"
EXIT_CODE=$? EXIT_CODE=$?
if [ -z "$VERSION" ]; then if [ -z "$VERSION" ]; then
echo "N/A"
return $EXIT_CODE return $EXIT_CODE
fi fi
if [ "_$VERSION" != "_∞" ]; then if [ "_$VERSION" != "_∞" ]; then
@@ -496,7 +504,8 @@ nvm_node_prefix() {
} }
nvm_is_iojs_version() { nvm_is_iojs_version() {
[ "_$(echo "$1" | cut -c1-5)" = "_iojs-" ] case "$1" in iojs-*) return 0 ;; esac
return 1
} }
nvm_add_iojs_prefix() { nvm_add_iojs_prefix() {
@@ -509,7 +518,7 @@ nvm_strip_iojs_prefix() {
if [ "_$1" = "_$NVM_IOJS_PREFIX" ]; then if [ "_$1" = "_$NVM_IOJS_PREFIX" ]; then
echo echo
else else
echo "$1" | command sed "s/^$NVM_IOJS_PREFIX-//" echo "${1#"$NVM_IOJS_PREFIX"-}"
fi fi
} }
@@ -546,7 +555,12 @@ nvm_ls() {
;; ;;
esac esac
# If it looks like an explicit version, don't do anything funny # If it looks like an explicit version, don't do anything funny
if [ "_$(echo "$PATTERN" | cut -c1-1)" = "_v" ] && [ "_$(nvm_num_version_groups "$PATTERN")" = "_3" ]; then local NVM_PATTERN_STARTS_WITH_V
case $PATTERN in
v*) NVM_PATTERN_STARTS_WITH_V=true ;;
*) 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 [ -d "$(nvm_version_path "$PATTERN")" ]; then
VERSIONS="$PATTERN" VERSIONS="$PATTERN"
elif [ -d "$(nvm_version_path "$(nvm_add_iojs_prefix "$PATTERN")")" ]; then elif [ -d "$(nvm_version_path "$(nvm_add_iojs_prefix "$PATTERN")")" ]; then
@@ -559,7 +573,7 @@ nvm_ls() {
local NUM_VERSION_GROUPS local NUM_VERSION_GROUPS
NUM_VERSION_GROUPS="$(nvm_num_version_groups "$PATTERN")" NUM_VERSION_GROUPS="$(nvm_num_version_groups "$PATTERN")"
if [ "_$NUM_VERSION_GROUPS" = "_2" ] || [ "_$NUM_VERSION_GROUPS" = "_1" ]; then if [ "_$NUM_VERSION_GROUPS" = "_2" ] || [ "_$NUM_VERSION_GROUPS" = "_1" ]; then
PATTERN="$(echo "$PATTERN" | command sed -e 's/\.*$//g')." PATTERN="${PATTERN%.}."
fi fi
;; ;;
esac esac
@@ -604,17 +618,20 @@ nvm_ls() {
fi fi
if [ -n "$NVM_DIRS_TO_SEARCH" ]; then if [ -n "$NVM_DIRS_TO_SEARCH" ]; then
VERSIONS="$(command find $NVM_DIRS_TO_SEARCH -maxdepth 1 -type d -name "$PATTERN*" \ VERSIONS="$(command find $NVM_DIRS_TO_SEARCH -maxdepth 1 -type d -name "$PATTERN*" \
| command sed "s#$NVM_VERSION_DIR_IOJS/#"$NVM_IOJS_PREFIX"-#" \ | command sed "
| command grep -v "$NVM_VERSION_DIR_IOJS" \ s#$NVM_VERSION_DIR_IOJS/#$NVM_IOJS_PREFIX-#;
| command sed "s#^$NVM_DIR/##" \ \#$NVM_VERSION_DIR_IOJS# d;
| command grep -v -e '^versions$' \ s#^$NVM_DIR/##;
| command sed 's#^versions/##' \ \#^versions\$# d;
| sed -e "s/^v/$NVM_NODE_PREFIX-v/" \ s#^versions/##;
| sed -e "s#^\($NVM_IOJS_PREFIX\)[-/]v#\1.v#" | sed -e "s#^\($NVM_NODE_PREFIX\)[-/]v#\1.v#" \ s#^v#$NVM_NODE_PREFIX-v#;
s#^\($NVM_IOJS_PREFIX\)[-/]v#\1.v#;
s#^\($NVM_NODE_PREFIX\)[-/]v#\1.v#" \
| command sort -t. -u -k 2.2,2n -k 3,3n -k 4,4n \ | command sort -t. -u -k 2.2,2n -k 3,3n -k 4,4n \
| command sort -s -t- -k1.1,1.1 \ | command sort -s -t- -k1.1,1.1 \
| command sed "s/^\($NVM_IOJS_PREFIX\)\./\1-/" \ | command sed "
| command sed "s/^$NVM_NODE_PREFIX\.//")" s/^\($NVM_IOJS_PREFIX\)\./\1-/;
s/^$NVM_NODE_PREFIX\.//")"
fi fi
if [ $ZHS_HAS_SHWORDSPLIT_UNSET -eq 1 ] && nvm_has "unsetopt"; then if [ $ZHS_HAS_SHWORDSPLIT_UNSET -eq 1 ] && nvm_has "unsetopt"; then
@@ -672,9 +689,10 @@ nvm_ls_remote_iojs() {
PATTERN=".*" PATTERN=".*"
fi fi
VERSIONS="$(nvm_download -L -s $NVM_IOJS_ORG_VERSION_LISTING -o - \ VERSIONS="$(nvm_download -L -s $NVM_IOJS_ORG_VERSION_LISTING -o - \
| command sed 1d \ | command sed "
| command sed "s/^/$(nvm_iojs_prefix)-/" \ 1d;
| command cut -f1 \ s/^/$(nvm_iojs_prefix)-/;
s/[[:blank:]].*//" \
| command grep -w "$PATTERN" \ | command grep -w "$PATTERN" \
| command sort)" | command sort)"
if [ -z "$VERSIONS" ]; then if [ -z "$VERSIONS" ]; then
@@ -854,16 +872,35 @@ nvm_get_os() {
nvm_get_arch() { nvm_get_arch() {
local NVM_UNAME local NVM_UNAME
NVM_UNAME="$(uname -a)" NVM_UNAME="$(uname -m)"
local NVM_ARCH local NVM_ARCH
case "$NVM_UNAME" in case "$NVM_UNAME" in
*x86_64*) NVM_ARCH=x64 ;; x86_64) NVM_ARCH="x64" ;;
*i*86*) NVM_ARCH=x86 ;; i*86) NVM_ARCH="x86" ;;
*) NVM_ARCH="$(uname -m)" ;; *) NVM_ARCH="$NVM_UNAME" ;;
esac esac
echo "$NVM_ARCH" echo "$NVM_ARCH"
} }
nvm_ensure_default_set() {
local VERSION
VERSION="$1"
if [ -z "$VERSION" ]; then
echo 'nvm_ensure_default_set: a version is required' >&2
return 1
fi
if nvm_alias default >/dev/null 2>&1; then
# default already set
return 0
fi
local OUTPUT
OUTPUT="$(nvm alias default "$VERSION")"
local EXIT_CODE
EXIT_CODE="$?"
echo "Creating default alias: $OUTPUT"
return $EXIT_CODE
}
nvm_install_iojs_binary() { nvm_install_iojs_binary() {
local PREFIXED_VERSION local PREFIXED_VERSION
PREFIXED_VERSION="$1" PREFIXED_VERSION="$1"
@@ -894,9 +931,16 @@ nvm_install_iojs_binary() {
tmpdir="$NVM_DIR/bin/iojs-${t}" tmpdir="$NVM_DIR/bin/iojs-${t}"
local tmptarball local tmptarball
tmptarball="$tmpdir/iojs-${t}.tar.gz" tmptarball="$tmpdir/iojs-${t}.tar.gz"
if ( local NVM_INSTALL_ERRORED
command mkdir -p "$tmpdir" && \ command mkdir -p "$tmpdir" && \
nvm_download -L -C - --progress-bar $url -o "$tmptarball" && \ 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";
fi
if (
[ "$NVM_INSTALL_ERRORED" != true ] && \
echo "WARNING: checksums are currently disabled for io.js" >&2 && \ echo "WARNING: checksums are currently disabled for io.js" >&2 && \
# nvm_checksum "$tmptarball" $sum && \ # nvm_checksum "$tmptarball" $sum && \
command tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \ command tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \
@@ -906,7 +950,7 @@ nvm_install_iojs_binary() {
); then ); then
return 0 return 0
else else
echo "Binary download failed, trying source." >&2 echo >&2 "Binary download failed, trying source." >&2
command rm -rf "$tmptarball" "$tmpdir" command rm -rf "$tmptarball" "$tmpdir"
return 1 return 1
fi fi
@@ -938,7 +982,7 @@ nvm_install_node_binary() {
if nvm_binary_available "$VERSION"; then if nvm_binary_available "$VERSION"; then
local NVM_ARCH local NVM_ARCH
NVM_ARCH="$(nvm_get_arch)" NVM_ARCH="$(nvm_get_arch)"
if [ $NVM_ARCH = "armv6l" ]; then if [ $NVM_ARCH = "armv6l" ] || [ $NVM_ARCH = "armv7l" ]; then
NVM_ARCH="arm-pi" NVM_ARCH="arm-pi"
fi fi
t="$VERSION-$NVM_OS-$NVM_ARCH" t="$VERSION-$NVM_OS-$NVM_ARCH"
@@ -948,9 +992,16 @@ nvm_install_node_binary() {
tmpdir="$NVM_DIR/bin/node-${t}" tmpdir="$NVM_DIR/bin/node-${t}"
local tmptarball local tmptarball
tmptarball="$tmpdir/node-${t}.tar.gz" tmptarball="$tmpdir/node-${t}.tar.gz"
if ( local NVM_INSTALL_ERRORED
command mkdir -p "$tmpdir" && \ command mkdir -p "$tmpdir" && \
nvm_download -L -C - --progress-bar $url -o "$tmptarball" && \ 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";
fi
if (
[ "$NVM_INSTALL_ERRORED" != true ] && \
nvm_checksum "$tmptarball" $sum && \ nvm_checksum "$tmptarball" $sum && \
command tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \ command tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \
command rm -f "$tmptarball" && \ command rm -f "$tmptarball" && \
@@ -959,7 +1010,7 @@ nvm_install_node_binary() {
); then ); then
return 0 return 0
else else
echo "Binary download failed, trying source." >&2 echo >&2 "Binary download failed, trying source."
command rm -rf "$tmptarball" "$tmpdir" command rm -rf "$tmptarball" "$tmpdir"
return 1 return 1
fi fi
@@ -971,10 +1022,8 @@ nvm_install_node_binary() {
nvm_install_node_source() { nvm_install_node_source() {
local VERSION local VERSION
VERSION="$1" VERSION="$1"
local REINSTALL_PACKAGES_FROM
REINSTALL_PACKAGES_FROM="$2"
local ADDITIONAL_PARAMETERS local ADDITIONAL_PARAMETERS
ADDITIONAL_PARAMETERS="$3" ADDITIONAL_PARAMETERS="$2"
if [ -n "$ADDITIONAL_PARAMETERS" ]; then if [ -n "$ADDITIONAL_PARAMETERS" ]; then
echo "Additional options while compiling: $ADDITIONAL_PARAMETERS" echo "Additional options while compiling: $ADDITIONAL_PARAMETERS"
@@ -1020,9 +1069,6 @@ nvm_install_node_source() {
$make $MAKE_CXX install $make $MAKE_CXX install
) )
then then
if nvm use "$VERSION" && [ ! -z "$REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then
nvm reinstall-packages "$REINSTALL_PACKAGES_FROM"
fi
if ! nvm_has "npm" ; then if ! nvm_has "npm" ; then
echo "Installing npm..." echo "Installing npm..."
if nvm_version_greater 0.2.0 "$VERSION"; then if nvm_version_greater 0.2.0 "$VERSION"; then
@@ -1095,6 +1141,17 @@ nvm() {
echo echo
;; ;;
"debug" )
echo >&2 "\$SHELL: $SHELL"
echo >&2 "\$NVM_DIR: $(echo $NVM_DIR | sed "s#$HOME#\$HOME#g")"
for NVM_DEBUG_COMMAND in 'nvm current' 'which node' 'which iojs' 'which npm' 'npm config get prefix' 'npm root -g'
do
local NVM_DEBUG_OUTPUT="$($NVM_DEBUG_COMMAND | sed "s#$NVM_DIR#\$NVM_DIR#g")"
echo >&2 "$NVM_DEBUG_COMMAND: ${NVM_DEBUG_OUTPUT}"
done
return 42
;;
"install" | "i" ) "install" | "i" )
local nobinary local nobinary
local version_not_provided local version_not_provided
@@ -1112,8 +1169,8 @@ nvm() {
version_not_provided=1 version_not_provided=1
nvm_rc_version nvm_rc_version
if [ -z "$NVM_RC_VERSION" ]; then if [ -z "$NVM_RC_VERSION" ]; then
nvm help >&2 nvm help
return return 127
fi fi
fi fi
@@ -1149,15 +1206,19 @@ nvm() {
while [ $# -ne 0 ] while [ $# -ne 0 ]
do do
if [ "_$(echo "$1" | command cut -c 1-26)" = "_--reinstall-packages-from=" ]; then case "$1" in
--reinstall-packages-from=*)
PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 27-)" 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")"
elif [ "_$(echo "$1" | command cut -c 1-21)" = "_--copy-packages-from=" ]; then ;;
--copy-packages-from=*)
PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 22-)" 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")"
else ;;
*)
ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS $1" ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS $1"
fi ;;
esac
shift shift
done done
@@ -1191,34 +1252,38 @@ nvm() {
# io.js does not have a SunOS binary # io.js does not have a SunOS binary
nobinary=1 nobinary=1
fi fi
local NVM_INSTALL_SUCCESS
# skip binary install if "nobinary" option specified. # skip binary install if "nobinary" option specified.
if [ $nobinary -ne 1 ] && nvm_binary_available "$VERSION"; then if [ $nobinary -ne 1 ] && nvm_binary_available "$VERSION"; then
local NVM_INSTALL_SUCCESS
if [ "$NVM_IOJS" = true ] && nvm_install_iojs_binary "$VERSION" "$REINSTALL_PACKAGES_FROM"; then if [ "$NVM_IOJS" = true ] && nvm_install_iojs_binary "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
NVM_INSTALL_SUCCESS=true NVM_INSTALL_SUCCESS=true
elif [ "$NVM_IOJS" != true ] && nvm_install_node_binary "$VERSION" "$REINSTALL_PACKAGES_FROM"; then elif [ "$NVM_IOJS" != true ] && nvm_install_node_binary "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
NVM_INSTALL_SUCCESS=true NVM_INSTALL_SUCCESS=true
fi fi
fi
if [ "$NVM_INSTALL_SUCCESS" != true ]; then
if [ "$NVM_IOJS" = true ]; then
# nvm_install_iojs_source "$VERSION" "$ADDITIONAL_PARAMETERS"
echo "Installing iojs from source is not currently supported" >&2
return 105
elif nvm_install_node_source "$VERSION" "$ADDITIONAL_PARAMETERS"; then
NVM_INSTALL_SUCCESS=true
fi
fi
if [ "$NVM_INSTALL_SUCCESS" = true ] \ if [ "$NVM_INSTALL_SUCCESS" = true ] && nvm use "$VERSION"; then
&& nvm use "$VERSION" \ if [ ! -z "$REINSTALL_PACKAGES_FROM" ] \
&& [ ! -z "$REINSTALL_PACKAGES_FROM" ] \
&& [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then && [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then
nvm reinstall-packages "$REINSTALL_PACKAGES_FROM" nvm reinstall-packages "$REINSTALL_PACKAGES_FROM"
fi fi
fi
return $? return $?
fi
if [ "$NVM_IOJS" = true ]; then
# nvm_install_iojs_source "$VERSION" "$REINSTALL_PACKAGES_FROM" "$ADDITIONAL_PARAMETERS"
echo "Installing iojs from source is not currently supported" >&2
return 105
else
nvm_install_node_source "$VERSION" "$REINSTALL_PACKAGES_FROM" "$ADDITIONAL_PARAMETERS"
fi
;; ;;
"uninstall" ) "uninstall" )
[ $# -ne 2 ] && nvm help && return if [ $# -ne 2 ]; then
>&2 nvm help
return 127
fi
local PATTERN local PATTERN
PATTERN="$2" PATTERN="$2"
@@ -1298,11 +1363,6 @@ nvm() {
fi fi
;; ;;
"use" ) "use" )
if [ $# -eq 0 ]; then
nvm help
return 127
fi
local PROVIDED_VERSION local PROVIDED_VERSION
if [ $# -eq 1 ]; then if [ $# -eq 1 ]; then
nvm_rc_version nvm_rc_version
@@ -1330,16 +1390,16 @@ nvm() {
fi fi
if [ -z "$VERSION" ]; then if [ -z "$VERSION" ]; then
nvm help >&2 nvm help
return 127 return 127
fi fi
if [ "_$VERSION" = '_system' ]; then if [ "_$VERSION" = '_system' ]; then
if nvm_has_system_node && nvm deactivate >/dev/null 2>&1; then if nvm_has_system_node && nvm deactivate >/dev/null 2>&1; then
echo "Now using system version of node: $(node -v 2>/dev/null)." echo "Now using system version of node: $(node -v 2>/dev/null)$(nvm_print_npm_version)"
return return
elif nvm_has_system_iojs && nvm deactivate >/dev/null 2>&1; then elif nvm_has_system_iojs && nvm deactivate >/dev/null 2>&1; then
echo "Now using system version of io.js: $(iojs --version 2>/dev/null)." echo "Now using system version of io.js: $(iojs --version 2>/dev/null)$(nvm_print_npm_version)"
return return
else else
echo "System version of node not found." >&2 echo "System version of node not found." >&2
@@ -1350,6 +1410,8 @@ nvm() {
return 8 return 8
fi fi
# This nvm_ensure_version_installed call can be a performance bottleneck
# on shell startup. Perhaps we can optimize it away or make it faster.
nvm_ensure_version_installed "$PROVIDED_VERSION" nvm_ensure_version_installed "$PROVIDED_VERSION"
EXIT_CODE=$? EXIT_CODE=$?
if [ "$EXIT_CODE" != "0" ]; then if [ "$EXIT_CODE" != "0" ]; then
@@ -1381,9 +1443,9 @@ nvm() {
command rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current" command rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
fi fi
if nvm_is_iojs_version "$VERSION"; then if nvm_is_iojs_version "$VERSION"; then
echo "Now using io.js $(nvm_strip_iojs_prefix "$VERSION")" echo "Now using io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm_print_npm_version)"
else else
echo "Now using node $VERSION" echo "Now using node $VERSION$(nvm_print_npm_version)"
fi fi
;; ;;
"run" ) "run" )
@@ -1400,7 +1462,7 @@ nvm() {
VERSION='N/A' VERSION='N/A'
fi fi
if [ $VERSION = "N/A" ]; then if [ $VERSION = "N/A" ]; then
nvm help >&2 nvm help
return 127 return 127
fi fi
fi fi
@@ -1438,6 +1500,13 @@ nvm() {
if [ "_$VERSION" = "_N/A" ]; then if [ "_$VERSION" = "_N/A" ]; then
echo "$(nvm_ensure_version_prefix "$provided_version") is not installed yet" >&2 echo "$(nvm_ensure_version_prefix "$provided_version") is not installed yet" >&2
EXIT_CODE=1 EXIT_CODE=1
elif [ -z "$ARGS" ]; then
if [ "$NVM_IOJS" = true ]; then
nvm exec "$VERSION" iojs
else
nvm exec "$VERSION" node
fi
EXIT_CODE="$?"
elif [ "$NVM_IOJS" = true ]; then elif [ "$NVM_IOJS" = true ]; then
echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")" echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")"
OUTPUT="$(nvm use "$VERSION" >/dev/null && iojs $ARGS)" OUTPUT="$(nvm use "$VERSION" >/dev/null && iojs $ARGS)"
@@ -1549,7 +1618,7 @@ $NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | sed '/^$/d')"
VERSION="$2" VERSION="$2"
fi fi
if [ -z "$VERSION" ]; then if [ -z "$VERSION" ]; then
nvm help >&2 nvm help
return 127 return 127
fi fi
@@ -1633,14 +1702,17 @@ $NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | sed '/^$/d')"
local NVM_ALIAS_DIR local NVM_ALIAS_DIR
NVM_ALIAS_DIR="$(nvm_alias_path)" NVM_ALIAS_DIR="$(nvm_alias_path)"
command mkdir -p "$NVM_ALIAS_DIR" command mkdir -p "$NVM_ALIAS_DIR"
[ $# -ne 2 ] && nvm help && return 127 if [ $# -ne 2 ]; then
>&2 nvm help
return 127
fi
[ ! -f "$NVM_ALIAS_DIR/$2" ] && echo "Alias $2 doesn't exist!" >&2 && return [ ! -f "$NVM_ALIAS_DIR/$2" ] && echo "Alias $2 doesn't exist!" >&2 && return
command rm -f "$NVM_ALIAS_DIR/$2" command rm -f "$NVM_ALIAS_DIR/$2"
echo "Deleted alias $2" echo "Deleted alias $2"
;; ;;
"reinstall-packages" | "copy-packages" ) "reinstall-packages" | "copy-packages" )
if [ $# -ne 2 ]; then if [ $# -ne 2 ]; then
nvm help >&2 nvm help
return 127 return 127
fi fi
@@ -1652,21 +1724,33 @@ $NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | sed '/^$/d')"
return 2 return 2
fi fi
local INSTALLS local NPMLIST
local VERSION
if [ "_$PROVIDED_VERSION" = "_system" ]; then if [ "_$PROVIDED_VERSION" = "_system" ]; then
if ! nvm_has_system_node && ! nvm_has_system_iojs; then if ! nvm_has_system_node && ! nvm_has_system_iojs; then
echo 'No system version of node or io.js detected.' >&2 echo 'No system version of node or io.js detected.' >&2
return 3 return 3
fi fi
INSTALLS=$(nvm deactivate > /dev/null && npm list -g --depth=0 | command tail -n +2 | command grep -o -e ' [^@]*' | command cut -c 2- | command grep -v npm | command xargs) VERSION="system"
NPMLIST=$(nvm deactivate > /dev/null && npm list -g --depth=0 | command tail -n +2)
else else
local VERSION
VERSION="$(nvm_version "$PROVIDED_VERSION")" VERSION="$(nvm_version "$PROVIDED_VERSION")"
INSTALLS=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 | command tail -n +2 | command grep -o -e ' [^@]*' | command cut -c 2- | command grep -v npm | command xargs) NPMLIST=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 | command tail -n +2)
fi fi
local INSTALLS
INSTALLS=$(echo "$NPMLIST" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*\)@.*/\1/' -e '/^npm$/ d' | command xargs)
echo "Copying global packages from $VERSION..." echo "Copying global packages from $VERSION..."
echo "$INSTALLS" | command xargs npm install -g --quiet echo "$INSTALLS" | command xargs npm install -g --quiet
local LINKS
LINKS=$(echo "$NPMLIST" | command sed -n 's/.* -> \(.*\)/\1/ p')
echo "Linking global packages from $VERSION..."
for LINK in $LINKS; do
(cd "$LINK" && npm link)
done
;; ;;
"clear-cache" ) "clear-cache" )
command rm -f $NVM_DIR/v* "$(nvm_version_dir)" 2>/dev/null command rm -f $NVM_DIR/v* "$(nvm_version_dir)" 2>/dev/null
@@ -1676,7 +1760,7 @@ $NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | sed '/^$/d')"
nvm_version $2 nvm_version $2
;; ;;
"--version" ) "--version" )
echo "0.24.0" echo "0.25.2"
;; ;;
"unload" ) "unload" )
unset -f nvm nvm_print_versions nvm_checksum \ unset -f nvm nvm_print_versions nvm_checksum \
@@ -1690,25 +1774,27 @@ $NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | sed '/^$/d')"
unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1 unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1
;; ;;
* ) * )
nvm help >&2 nvm help
return 127
;; ;;
esac esac
} }
nvm_supports_source_options() { nvm_supports_source_options() {
[ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ] [ "_$(echo 'echo $1' | . /dev/stdin yes 2> /dev/null)" = "_yes" ]
} }
if nvm_supports_source_options && [ "_$1" = "_--install" ]; then
VERSION="$(nvm_alias default 2>/dev/null)" VERSION="$(nvm_alias default 2>/dev/null)"
if nvm_supports_source_options && [ "_$1" = "_--install" ]; then
if [ -n "$VERSION" ]; then if [ -n "$VERSION" ]; then
nvm install "$VERSION" >/dev/null nvm install "$VERSION" >/dev/null
elif nvm_rc_version >/dev/null 2>&1; then elif nvm_rc_version >/dev/null 2>&1; then
nvm install >/dev/null nvm install >/dev/null
fi fi
elif nvm ls default >/dev/null; then elif [ -n "$VERSION" ]; then
nvm use default >/dev/null nvm use "$VERSION" >/dev/null
elif nvm_rc_version >/dev/null 2>&1; then elif nvm_rc_version >/dev/null 2>&1; then
nvm use >/dev/null nvm use >/dev/null
fi fi
} # this ensures the entire script is downloaded #

View File

@@ -1,6 +1,6 @@
{ {
"name": "nvm", "name": "nvm",
"version": "0.24.0", "version": "0.25.2",
"description": "Node Version Manager - Simple bash script to manage multiple active node.js versions", "description": "Node Version Manager - Simple bash script to manage multiple active node.js versions",
"directories": { "directories": {
"test": "test" "test": "test"
@@ -30,8 +30,8 @@
}, },
"homepage": "https://github.com/creationix/nvm", "homepage": "https://github.com/creationix/nvm",
"devDependencies": { "devDependencies": {
"replace": "~0.3.0", "replace": "^0.3.0",
"semver": "~4.2.0", "semver": "^4.3.4",
"urchin": "~0.0.5" "urchin": "^0.0.5"
} }
} }

View File

@@ -0,0 +1,18 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
nvm alias default 0.1 >/dev/null || die "'nvm alias default 0.1' failed"
nvm_ensure_default_set 0.3 || die "'nvm_ensure_default_set' with an existing default alias exits 0"
nvm unalias default || die "'nvm unalias default' failed"
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'"
[ "_$EXIT_CODE" = "_0" ] || die "'nvm_ensure_default_set 0.2' did not exit with 0, got $EXIT_CODE"

View File

@@ -20,7 +20,7 @@ done
OUTPUT="$(nvm_resolve_local_alias nonexistent)" OUTPUT="$(nvm_resolve_local_alias nonexistent)"
EXIT_CODE=$(nvm_resolve_local_alias nonexistent > /dev/null 2>&1 ; echo $?) EXIT_CODE=$(nvm_resolve_local_alias nonexistent > /dev/null 2>&1 ; echo $?)
[ "_$EXIT_CODE" = "_2" ] || die "'nvm_resolve_local_alias nonexistent' did not return 2; got $EXIT_CODE" [ "_$EXIT_CODE" = "_2" ] || die "'nvm_resolve_local_alias nonexistent' did not return 2; got $EXIT_CODE"
[ "_$OUTPUT" = "_N/A" ] || die "'nvm_resolve_local_alias nonexistent' did not output N/A; got $OUTPUT" [ "_$OUTPUT" = "_" ] || die "'nvm_resolve_local_alias nonexistent' did not have empty output; got $OUTPUT"
STABLE="$(nvm_resolve_local_alias stable)" STABLE="$(nvm_resolve_local_alias stable)"
[ "_$STABLE" = "_v0.0.10" ] || die "'nvm_resolve_local_alias stable' was not v0.0.10; got $STABLE" [ "_$STABLE" = "_v0.0.10" ] || die "'nvm_resolve_local_alias stable' was not v0.0.10; got $STABLE"

View File

@@ -14,3 +14,4 @@ rm -f "../../../alias/stable"
rm -f "../../../alias/unstable" rm -f "../../../alias/unstable"
rm -f "../../../alias/node" rm -f "../../../alias/node"
rm -f "../../../alias/iojs" rm -f "../../../alias/iojs"
rm -f "../../../alias/default"

View File

@@ -5,9 +5,13 @@ die () { echo $@ ; exit 1; }
. ../../nvm.sh . ../../nvm.sh
nvm_has_system_node() { return 0; } nvm_has_system_node() { return 0; }
[ "$(nvm use system 2>&1 | tail -n1)" = "Now using system version of node: $(node -v)." ] || die "Could not use system version of node" nvm_print_npm_version() { return ' (npm v1.2.3)'; }
EXPECTED_OUTPUT="Now using system version of node: $(node -v)$(nvm_print_npm_version)"
[ "$(nvm use system 2>&1 | tail -n1)" = "$EXPECTED_OUTPUT" ] || die "Could not use system version of node"
nvm_has_system_node() { return 1; } nvm_has_system_node() { return 1; }
[ "$(nvm use system 2>&1 | tail -n1)" = "System version of node not found." ] || die "Did not report error, system node not found" nvm_print_npm_version() { return ''; }
EXPECTED_OUTPUT="System version of node not found."
[ "$(nvm use system 2>&1 | tail -n1)" = "$EXPECTED_OUTPUT" ] || die "Did not report error, system node not found"
nvm use system 2>&1 > /dev/null || [ $? -eq 127 ] || die "Did not return error code, system node not found" nvm use system 2>&1 > /dev/null || [ $? -eq 127 ] || die "Did not return error code, system node not found"

View File

@@ -0,0 +1,13 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
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""
[ "_$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

View File

@@ -10,7 +10,12 @@ die () { echo $@ ; cleanup ; exit 1; }
return_zero () { return 0; } return_zero () { return 0; }
[ "$(nvm deactivate > /dev/null 2>&1 ; nvm_ls_current)" = "system" ] || die 'when deactivated, did not return "system"' if nvm_has_system_node || nvm_has_system_iojs; then
EXPECTED_SYSTEM_NODE="system"
else
EXPECTED_SYSTEM_NODE="none"
fi
[ "_$(nvm deactivate > /dev/null 2>&1 ; nvm_ls_current)" = "_$EXPECTED_SYSTEM_NODE" ] || die "when deactivated, did not return $EXPECTED_SYSTEM_NODE"
rm -rf "$TEST_DIR" rm -rf "$TEST_DIR"
mkdir "$TEST_DIR" mkdir "$TEST_DIR"

View File

@@ -5,13 +5,17 @@ die () { echo $@ ; exit 1; }
. ../../../nvm.sh . ../../../nvm.sh
[ "~$(nvm_num_version_groups)" = "~0" ] || die "no args should give 0" [ "~$(nvm_num_version_groups)" = "~0" ] || die "no args should give 0"
[ "~$(nvm_num_version_groups v)" = "~0" ] || die "just "v" should give 0"
[ "~$(nvm_num_version_groups .)" = "~0" ] || die "just "." should give 0"
[ "~$(nvm_num_version_groups a)" = "~1" ] || die "one letter should give 1" [ "~$(nvm_num_version_groups a)" = "~1" ] || die "one letter should give 1"
[ "~$(nvm_num_version_groups 1)" = "~1" ] || die "1 should give 1" [ "~$(nvm_num_version_groups 1)" = "~1" ] || die "1 should give 1"
[ "~$(nvm_num_version_groups 1.)" = "~1" ] || die "1. should give 1"
[ "~$(nvm_num_version_groups v1)" = "~1" ] || die "v1 should give 1" [ "~$(nvm_num_version_groups v1)" = "~1" ] || die "v1 should give 1"
[ "~$(nvm_num_version_groups v1.)" = "~1" ] || die "v1. should give 1" [ "~$(nvm_num_version_groups v1.)" = "~1" ] || die "v1. should give 1"
[ "~$(nvm_num_version_groups 1.2)" = "~2" ] || die "1.2 should give 2" [ "~$(nvm_num_version_groups 1.2)" = "~2" ] || die "1.2 should give 2"
[ "~$(nvm_num_version_groups 1.2.)" = "~2" ] || die "1.2. should give 2"
[ "~$(nvm_num_version_groups v1.2)" = "~2" ] || die "v1.2 should give 2" [ "~$(nvm_num_version_groups v1.2)" = "~2" ] || die "v1.2 should give 2"
[ "~$(nvm_num_version_groups v1.2.)" = "~2" ] || die "v1.2. should give 2" [ "~$(nvm_num_version_groups v1.2.)" = "~2" ] || die "v1.2. should give 2"

View File

@@ -0,0 +1,28 @@
#!/bin/sh
cleanup () {
alias nvm_has='\nvm_has'
alias npm='\npm'
unset -f nvm_has npm
}
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
nvm_has() { return 1; }
OUTPUT="$(nvm_print_npm_version)"
[ -z "$OUTPUT" ] || die "nvm_print_npm_version did not return empty when nvm_has returns 1, got '$OUTPUT'"
nvm_has() { return 0; }
npm() {
if [ "_$@" = "_--version" ]; then
echo "1.2.3"
else
echo "error"
fi
}
OUTPUT="$(nvm_print_npm_version)"
EXPECTED_OUTPUT=" (npm v1.2.3)"
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_print_npm_version did not provided '$EXPECTED_OUTPUT', got '$OUTPUT'"
cleanup

View File

@@ -15,7 +15,7 @@ safe_type() {
safe_type nvm_reset || die 'nvm_reset is not available' safe_type nvm_reset || die 'nvm_reset is not available'
# Apply nvm_reset # Apply nvm_reset
nvm_reset nvm_reset || die 'nvm_reset failed'
# The names should be unset # The names should be unset
! safe_type nvm_do_install || die 'nvm_do_install is still available' ! safe_type nvm_do_install || die 'nvm_do_install is still available'

View File

@@ -5,17 +5,23 @@ die () { echo "$@" ; exit 1; }
. ../../../nvm.sh . ../../../nvm.sh
nvm use 0.10.28 nvm use 0.10.28
(cd test-npmlink && npm link)
EXPECTED_PACKAGES="autoprefixer bower david eslint grunt-cli grunth-cli http-server jshint marked node-gyp recursive-blame uglify-js yo" EXPECTED_PACKAGES="autoprefixer bower david eslint grunt-cli grunth-cli http-server jshint marked node-gyp npmlist recursive-blame test-npmlink uglify-js yo"
echo "$EXPECTED_PACKAGES" | xargs npm install -g --quiet echo "$EXPECTED_PACKAGES" | xargs npm install -g --quiet
get_packages() {
npm list -g --depth=0 | \sed -e '1 d' -e 's/^.* \(.*\)@.*/\1/' -e '/^npm$/ d' | xargs
}
nvm use 0.10.29 nvm use 0.10.29
ORIGINAL_PACKAGES=$(npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | sort | uniq | xargs) ORIGINAL_PACKAGES=$(get_packages)
nvm reinstall-packages 0.10.28 nvm reinstall-packages 0.10.28
FINAL_PACKAGES=$(npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | sort | uniq | xargs) FINAL_PACKAGES=$(get_packages)
[ "$FINAL_PACKAGES" = "$EXPECTED_PACKAGES" ] || die "final packages ($FINAL_PACKAGES) did not match expected packages ($EXPECTED_PACKAGES)" [ "$FINAL_PACKAGES" = "$EXPECTED_PACKAGES" ] || die "final packages ($FINAL_PACKAGES) did not match expected packages ($EXPECTED_PACKAGES)"
[ "$ORIGINAL_PACKAGES" != "$FINAL_PACKAGES" ] || die "original packages matched final packages ($ORIGINAL_PACKAGES)" [ "$ORIGINAL_PACKAGES" != "$FINAL_PACKAGES" ] || die "original packages matched final packages ($ORIGINAL_PACKAGES)"
[ $(test-npmlink) = 'ok' ] || die "failed to run test-npmlink"

View File

@@ -0,0 +1,2 @@
#!/usr/bin/env node
console.log('ok')

View File

@@ -0,0 +1,10 @@
{
"name": "test-npmlink",
"version": "0.0.1",
"description": "Stub package for testing npm link",
"bin": {
"test-npmlink": "index.js"
},
"author": "hax",
"license": "ISC"
}

View File

@@ -10,12 +10,12 @@ cleanup() {
EXPECTED_VERSION="v12.3.456" EXPECTED_VERSION="v12.3.456"
URL="https://github.com/creationix/nvm/releases/tag/$EXPECTED_VERSION" URL="https://github.com/creationix/nvm/releases/tag/$EXPECTED_VERSION"
EXPECTED_CURL_ARGS="-w %{url_effective}\n -L -s -S http://latest.nvm.sh -o /dev/null" EXPECTED_CURL_ARGS="-q -w %{url_effective}\n -L -s -S http://latest.nvm.sh -o /dev/null"
EXPECTED_WGET_ARGS="http://latest.nvm.sh --server-response -O /dev/null" EXPECTED_WGET_ARGS="http://latest.nvm.sh --server-response -O /dev/null"
curl() { curl() {
if [ "_$*" != "_$EXPECTED_CURL_ARGS" ]; then if [ "_$*" != "_$EXPECTED_CURL_ARGS" ]; then
echo 2>& "expected args ($EXPECTED_CURL_ARGS), got ($*)" echo >&2 "expected args ($EXPECTED_CURL_ARGS), got ($*)"
return 1 return 1
else else
echo $URL echo $URL
@@ -23,7 +23,7 @@ curl() {
} }
wget() { wget() {
if [ "_$*" != "_$EXPECTED_WGET_ARGS" ]; then if [ "_$*" != "_$EXPECTED_WGET_ARGS" ]; then
echo 2>& "expected args ($EXPECTED_WGET_ARGS), got ($*)" echo >&2 "expected args ($EXPECTED_WGET_ARGS), got ($*)"
return 1 return 1
else else
local WGET_CONTENTS local WGET_CONTENTS
@@ -100,7 +100,7 @@ Saving to: /dev/null
" "
"$WGET_CONTENTS" | while read line "$WGET_CONTENTS" | while read line
do do
2>& echo "$line" >&2 echo "$line"
done done
fi fi
} }