Compare commits

..

141 Commits

Author SHA1 Message Date
Jordan Harband
f0471acbf5 v0.17.2 2014-09-29 14:32:44 -07:00
Jordan Harband
fda05fb64b Remove trailing whitespace. 2014-09-29 14:26:19 -07:00
Jordan Harband
2737a95645 Create nvm_ensure_version_prefix, and make nvm_format_version actually format the version. 2014-09-29 01:36:02 -07:00
Jordan Harband
5706aef3d0 nvm_format_version: add unit tests. 2014-09-29 01:34:50 -07:00
Jordan Harband
cd4fc8fb2c Adding unit tests for nvm_ls_remote
`nvm_download` is stubbed, to avoid making network calls.
2014-09-28 22:00:20 -07:00
Jordan Harband
050a2ee9d3 nvm_remote_version: add unit tests
`nvm_ls_remote` is stubbed out to avoid making network calls here.
2014-09-28 18:12:25 -07:00
Jordan Harband
ff92ba7f43 Silence more secondary "deactivate" output. 2014-09-28 16:50:50 -07:00
Jordan Harband
804f2759f8 Ensure that nvm use works when .nvmrc contains "system" 2014-09-28 16:50:50 -07:00
Jordan Harband
d5fe657382 Ensure nvm_rc_version always modifies $NVM_RC_VERSION, rather than retaining its value from previous runs. 2014-09-28 16:50:50 -07:00
Jordan Harband
3e4613fd66 Don't output nvm deactivate output when running nvm use system 2014-09-28 16:50:50 -07:00
Jordan Harband
9aec19a692 Update bash completion commands for nvm 2014-09-28 16:50:49 -07:00
Jordan Harband
b707d8b072 nvm_ls: format the version immediately, so that nvm ls 0.0.1 doesn't return nvm ls 0.0.10 2014-09-28 10:14:27 -07:00
Jordan Harband
be605cb12b Adding a failing test: nvm ls 0.0.x includes v0.0.xy 2014-09-28 10:18:00 -07:00
Jordan Harband
3c66c20570 Improving "nvm alias" tests to test for all cases. 2014-09-28 10:07:50 -07:00
Jordan Harband
59bfdb9863 Making sure fast alias tests do their own teardown. 2014-09-28 09:54:35 -07:00
Jordan Harband
25bd2bb018 Make nvm ls-remote return nvm_ls_remote's exit code. 2014-09-28 09:41:02 -07:00
Jordan Harband
4a8a5a1180 Shell-quoting some more things. 2014-09-27 17:30:09 -07:00
Jordan Harband
145da7eef8 v0.17.1 2014-09-26 23:22:56 -07:00
Jordan Harband
4cf56ae186 Remove unnecessary local var declaration. Fixes #535 2014-09-26 23:22:38 -07:00
Jordan Harband
5ad00f13fa Suppress error messages in case there's no master branch.
Fixes #533.
2014-09-25 22:10:48 -07:00
Jordan Harband
53f9841c6c v0.17.0 2014-09-24 14:58:07 -07:00
Jordan Harband
444efdb08b Adding some more quotes and $() 2014-09-23 23:51:02 -07:00
Jordan Harband
6fde379707 Use _ instead of ~ as a sentinel 2014-09-23 23:50:12 -07:00
Jordan Harband
ce69c8413e More shellcheck recommendations 2014-09-23 23:49:51 -07:00
Jordan Harband
51f6109f8d Use $() instead of backticks; add quotes 2014-09-23 23:49:10 -07:00
Jordan Harband
4f081ce4be Collapsing some if/else conditions with elif 2014-09-23 23:48:31 -07:00
Jordan Harband
db0051753a Compare shell variable contents with a sentinel. 2014-09-23 23:47:17 -07:00
Jordan Harband
cf1110ecea Quote $NVM_DIR in commands 2014-09-23 23:46:23 -07:00
Jordan Harband
34b97bf76d Adding shell var quotes in nvm alias 2014-09-23 17:23:37 -07:00
Jordan Harband
b962a590a2 Removing an extra mkdir -p 2014-09-23 17:23:09 -07:00
Jordan Harband
ddb25ed5a3 Merge pull request #530 from creationix/copy_packages_from_on_install
nvm install: Add --copy-packages-from option
2014-09-21 18:57:04 -07:00
Jordan Harband
486d14f5f8 Copy packages when applicable, whenever nvm install would normally nvm use and exit. 2014-09-21 18:25:15 -07:00
Jordan Harband
622fdd2cd0 Error out early if the --copy-packages-from version is invalid. 2014-09-21 18:03:11 -07:00
Jordan Harband
eddbe15ee8 Extract --copy-packages-from argument. 2014-09-21 18:03:11 -07:00
Jordan Harband
2e161fe414 nvm install: Remove this redundant "already installed" check. 2014-09-21 11:22:05 -07:00
Jordan Harband
a42b90d215 Adding some helpful output to nvm copy-packages 2014-09-21 11:02:03 -07:00
Jordan Harband
6bae6c07f2 Merge pull request #528 from creationix/remove_last_expr
Remove last usages of `expr`
2014-09-19 12:37:33 -07:00
Jordan Harband
7fd6d05426 Instead of using expr to check if paths need cleaning, compare cleaned paths to original paths and export appropriately. 2014-09-19 10:10:53 -07:00
Jordan Harband
5ef092b2c8 Using nvm_version_greater and nvm_version_greater_than_or_equal_to instead of expr in nvm install. 2014-09-19 10:10:37 -07:00
Jordan Harband
cb6456fd85 Using nvm_version_greater_than_or_equal_to instead of nvm_version_greater where it increases readability. 2014-09-19 10:10:01 -07:00
Jordan Harband
991fb85047 Adding nvm_version_greater_than_or_equal_to 2014-09-19 10:09:45 -07:00
Jordan Harband
edf36a8ea7 Merge pull request #526 from creationix/add_nvm_num_version_groups
Replace `expr` with `nvm_num_version_groups`
2014-09-16 10:13:57 -07:00
Jordan Harband
35466187f2 Noting the changed behavior of nvm ls vx.y. to return something useful. 2014-09-16 09:03:48 -07:00
Jordan Harband
c992b1766c Use nvm_num_version_groups in nvm_ls 2014-09-16 09:03:47 -07:00
Jordan Harband
4b2bc0be08 Adding nvm_num_version_groups 2014-09-16 09:03:47 -07:00
Jordan Harband
15b3e7b6a8 Removing unnecessary cleanup in "Listing Versions" tests. 2014-09-16 09:03:47 -07:00
Jordan Harband
8d05ab63f1 Silencing error output in the "Listing Versions" teardown script. 2014-09-16 09:03:47 -07:00
Jordan Harband
da693eaea1 Tweaking nvm_ls_current tests. 2014-09-16 09:03:47 -07:00
Jordan Harband
5363ff8916 Merge pull request #525 from creationix/add_unit_tests
Add unit tests
2014-09-15 20:46:31 -07:00
Jordan Harband
e186fa27a7 Use nvm_version_greater in nvm_binary_available 2014-09-15 09:20:47 -07:00
Jordan Harband
f6e0104685 Use nvm_normalize_version in nvm_version_greater 2014-09-15 09:17:41 -07:00
Jordan Harband
97d4e2f88f Unit tests: add nvm_find_up 2014-09-15 09:09:56 -07:00
Jordan Harband
e0a22ccf4a Unit tests: add nvm_has 2014-09-15 09:09:51 -07:00
Jordan Harband
d5d66c34d9 If there's no "default" specified, fall back to an .nvmrc file. 2014-09-15 07:54:30 -07:00
Jordan Harband
152904e3fb Return a nonzero exit code from nvm_rc_version when no .nvmrc found 2014-09-15 07:51:00 -07:00
Jordan Harband
64de890d07 v0.16.1 2014-09-14 22:24:18 -07:00
Jordan Harband
a4da8a48ef Merge pull request #524 from creationix/run_installation_tests_separately
Run installation tests separately
2014-09-14 22:21:02 -07:00
Jordan Harband
354be52672 Correct installation test paths 2014-09-14 18:01:55 -07:00
Jordan Harband
ad604cc068 Only run the "installation" tests both with and without curl. 2014-09-14 17:25:17 -07:00
Jordan Harband
ba08fa31d8 Moving actual installation tests to their own suite. 2014-09-14 17:24:30 -07:00
Jordan Harband
13aadbcf31 Run slow tests in ksh too 2014-09-14 16:42:23 -07:00
Jordan Harband
7bb6e9c915 Merge pull request #523 from creationix/run_slow_nvmrc_tests_too
Actually run all tests; fix some bugs
2014-09-14 16:38:12 -07:00
Jordan Harband
3d3145f2e0 install: don't output "additional options" when there are none. 2014-09-14 16:04:51 -07:00
Jordan Harband
4c948cf422 install: Ensure that if a version is not provided, we don't try to shift a nonexistent argument. 2014-09-14 16:04:37 -07:00
Jordan Harband
f8054d5cae copy-packages: ensure that nvm_version is also applied to compare the provided version to the current one. 2014-09-14 16:04:25 -07:00
Jordan Harband
ad2713b13a &> is a bash-specific extension for redirecting both stdout and stderr. 2014-09-14 16:04:13 -07:00
Jordan Harband
243fc04164 Fixing these test files that have never been run 2014-09-14 16:04:04 -07:00
Jordan Harband
a80f958a1e All 4 of these test files should be executable. 2014-09-14 16:03:55 -07:00
Jordan Harband
f6fef75f36 Use git in manual install instructions to determine the latest release tag, rather than hardcoding it.
Per 199ba53340
2014-09-13 11:37:19 -07:00
Jordan Harband
199ba53340 Fixing manual install instructions to use the version tag. Relates to #520 2014-09-13 00:59:09 -07:00
Jordan Harband
d1b6332bbe v0.16.0 2014-09-11 00:58:09 -07:00
Jordan Harband
159d4c645e Merge pull request #518 from creationix/nvm_copy_packages_system
Make `nvm copy-packages system` work
2014-09-05 09:05:27 -07:00
Jordan Harband
687df82107 Make nvm copy-packages system work. 2014-09-05 00:43:12 -07:00
Jordan Harband
ff1781b95d Make nvm copy-packages refuse to copy packages from the currently activated version. 2014-09-05 00:42:59 -07:00
Jordan Harband
110e571c34 Make nvm ls system work. 2014-09-05 00:29:20 -07:00
Jordan Harband
a7108e98f2 Make .bashrc be checked first on install.
From #511. Closes #320. Closes #268. Closes #334. Fixes #497. Relates to
2014-09-04 00:54:50 -07:00
Jordan Harband
30b044a368 Merge pull request #511 from 16BITBoy/bashrc-support
Fix for nvm not being sourced to bash when using gnome-terminal in Ubuntu 14.04
2014-09-04 00:53:23 -07:00
Adrian Perez Heredia
825cb46969 Updated error message for missing profile file 2014-09-03 15:07:28 +02:00
Adrian Perez Heredia
ab56ec6675 This patch adds support for terminal emulators. Without this it wont work on gnome-terminal on Ubuntu 2014-09-03 15:07:27 +02:00
Jordan Harband
9d96e4a6bf v0.15.0 2014-09-03 00:08:53 -07:00
Jordan Harband
a00a3a7429 Document NVM_SYMLINK_CURRENT env var from #514. 2014-09-03 00:07:45 -07:00
Jordan Harband
1c3585e5a2 Merge pull request #508 from creationix/nvm_copy_packages_not_npm
Don't copy `npm` with `nvm copy-packages`
2014-09-03 00:01:03 -07:00
Jordan Harband
214ce8853b npm ls has a bug in some versions when "--parseable --depth=0" is used together. 2014-09-02 15:47:45 -07:00
Jordan Harband
d24dc662dc Merge pull request #512 from kevinwang/shasum-lowest-priority
Make shasum the lowest priority checksum command.
2014-09-02 00:36:17 -07:00
Kevin Wang
e8056ac460 Run cleanup on die in nvm_checksum unit test. 2014-08-30 21:57:17 -05:00
Kevin Wang
429656bc41 Add unit tests for nvm_checksum. 2014-08-30 21:54:46 -05:00
Jordan Harband
b61445cbf4 Merge pull request #514 from stelcheck/master
Make the creation of a symlink an overridable default behaviour
2014-08-30 09:49:52 -07:00
Jordan Harband
603253b0cb Quote the version. 2014-08-29 00:12:16 -07:00
Jordan Harband
5ee955bb62 Remove unused $ROOT variable. 2014-08-29 00:12:02 -07:00
stelcheck
83a0efb085 * We print stats only on failure
* || true
2014-08-29 15:01:15 +09:00
stelcheck
9306a9b3f0 * Unit tests 2014-08-29 14:57:30 +09:00
stelcheck
59939d09e8 * Make the creation of a symlink an overridable default behaviour 2014-08-28 22:45:07 +09:00
Jordan Harband
f9769e40dd v0.14.0 2014-08-27 00:49:30 -07:00
Jordan Harband
9c44a3e4c7 Merge pull request #513 from creationix/node_0_6_21_pre
Add special handling for node v0.6.21-pre
2014-08-27 00:38:32 -07:00
Jordan Harband
5048a78376 Add special handling for node v0.6.21-pre 2014-08-26 23:53:17 -07:00
Kevin Wang
814319d7c0 Make shasum the lowest priority checksum command.
This fixes false "Checksums do not match" errors on systems where shasum
is a symlink to sha256sum or otherwise.
2014-08-27 00:06:41 -05:00
Jordan Harband
4b3d6f1760 Properly pass a space-separated list of packages to npm install
Fixes #490.
2014-08-22 02:44:04 -07:00
Jordan Harband
56c40cfa3c Don't try to copy npm itself with nvm copy-packages.
Fixes #504.
2014-08-22 02:19:56 -07:00
Jordan Harband
fd9e01b7e6 Merge pull request #507 from creationix/nvm_ls_current_tests
nvm_ls_current tests
2014-08-22 01:59:14 -07:00
Jordan Harband
5c7f08843d Add error checking to nvm_tree_contains_path 2014-08-21 17:15:53 -07:00
Jordan Harband
6e6c5c4e2a Removing an invalid option to touch from this test. 2014-08-21 17:19:43 -07:00
Jordan Harband
1c2c4788a2 Fixing nvm_version_greater tests.
Relates to #505, #506.
2014-08-21 23:42:51 -07:00
Jordan Harband
b59ecb9e11 Make sure the new versions directory is filtered out of nvm_ls output (in zsh). 2014-08-21 23:39:40 -07:00
Jordan Harband
7551746e55 Merge pull request #505 from magicdrive/fix-error_nvm_version_greater
Fixed `nvm_version_greater` has syntax error in zsh-builtin command `[`
2014-08-21 22:42:05 -07:00
Jordan Harband
70ac1e7fa4 Fix tests so that they fail in zsh (for #505) 2014-08-21 22:40:48 -07:00
Hiroshi IKEGAMI
f130d02efc Fixed nvm_version_greater has syntax error in zsh-buildin-command [ 2014-08-22 10:59:11 +09:00
Jordan Harband
150aea21ec Fixes #487. 2014-08-21 16:51:24 -07:00
Jordan Harband
273f9d497a Adding unit tests for nvm_ls_current. Relates to #487. 2014-08-21 01:35:03 -07:00
Jordan Harband
1c85068091 Merge pull request #502 from creationix/nvm_version_path
Store versions 0.12.0 and newer in a `versions` subdirectory
2014-08-20 22:49:17 -07:00
Jordan Harband
42786630a1 Merge pull request #503 from egilkh/master
Should escape grep in copy-packages.
2014-08-20 10:03:57 -07:00
egilkh
938feca6a9 Should escape grep in copy-packages. 2014-08-20 15:09:40 +02:00
Jordan Harband
3747735980 Make sure nvm clear-cache clears the versions directory as well. 2014-08-20 00:50:15 -07:00
Jordan Harband
5dd2d7e5d4 Make nvm ls support listing the "versions" directory when it's present. 2014-08-20 00:42:50 -07:00
Jordan Harband
65c2435418 Making sure that versions are backed up when running tests. 2014-08-20 00:37:38 -07:00
Jordan Harband
0a695c5d2a Modify nvm_version_path to use nvm_version_greater. 2014-08-20 00:18:29 -07:00
Jordan Harband
8fe677a644 Add nvm_version_greater 2014-08-20 00:01:06 -07:00
Jordan Harband
213ff003d0 Use nvm_version_path everywhere possible. 2014-08-19 16:17:18 -07:00
Jordan Harband
986abbf5db Create nvm_version_path 2014-08-19 16:17:00 -07:00
Jordan Harband
a2da9abd6d Use nvm_version_dir in nvm_version_path 2014-08-19 01:56:34 -07:00
Jordan Harband
9068dda110 Adding nvm_version_dir 2014-08-19 01:53:39 -07:00
Jordan Harband
6baa9a0918 Merge pull request #501 from creationix/fix_copy_packages
Fix nvm copy-packages
2014-08-16 02:35:15 -07:00
Jordan Harband
b8fe75e93a Tests for nvm copy-packages 2014-08-16 01:58:39 -07:00
Jordan Harband
78a5e3fadf Attempt to improve nvm copy-packages 2014-08-16 00:14:29 -07:00
Jordan Harband
5e54886cbc Merge pull request #500 from creationix/run_slow_tests_on_all_shells
Run slow tests on all shells
2014-08-15 21:30:29 -07:00
Jordan Harband
d7849054f8 Apparently wget outputs to stderr, so let's make sure we're checking both stderr and stdout. 2014-08-15 20:47:55 -07:00
Jordan Harband
708ac80a55 Properly replace the -I curl option for the --server-response wget option. 2014-08-15 20:47:55 -07:00
Jordan Harband
d341d5e535 Run all slow tests on all shells 2014-08-08 12:16:22 -07:00
Jordan Harband
eef12cc2b3 v0.13.1 2014-08-08 11:48:54 -07:00
Jordan Harband
99c8b59a14 Make sure that $ARGS is evaluated natively rather than as a single string argument.
Fixes #494.
2014-08-08 11:48:38 -07:00
Jordan Harband
abdc3f3c21 Run all fast tests without curl. 2014-08-07 13:53:12 -07:00
Jordan Harband
401ac45568 Merge pull request #477 from koenpunt/without-curl
add test without curl
2014-08-07 13:52:06 -07:00
Jordan Harband
61709c1f97 v0.13.0 2014-08-02 19:24:39 -07:00
Jordan Harband
1a8479ed31 Merge pull request #491 from creationix/nvm_exec
Add `nvm exec` command.
2014-08-02 19:23:05 -07:00
Jordan Harband
a703d3591f Tweaking the readme description 2014-08-02 19:22:53 -07:00
Jordan Harband
1fa2acf5a7 Adding nvm exec tests. 2014-08-02 15:43:04 -07:00
Jordan Harband
d5c0e94166 Adding nvm exec command. 2014-08-01 01:26:33 -07:00
Jordan Harband
6dc602b521 Ensure that nvm ls node doesn't return "node_modules", for example. 2014-08-01 01:24:28 -07:00
Jordan Harband
1d37af162a v0.12.2 2014-07-29 00:35:27 -07:00
Jordan Harband
781373f7ce Make sure awk is referenced unaliased, per https://github.com/creationix/nvm/issues/162#issuecomment-50284503 2014-07-27 23:02:22 -07:00
Koen Punt
d67f2b110d string replacement turns out not POSIX compliant 2014-07-18 16:24:03 +02:00
Koen Punt
423629c38b add test without curl 2014-07-18 14:35:22 +02:00
50 changed files with 1431 additions and 188 deletions

View File

@@ -1,8 +1,11 @@
language: c # defaults to ruby language: c # defaults to ruby
install: install:
- sudo apt-get install ksh zsh -y - sudo apt-get install ksh zsh -y
- '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y'
before_script: before_script:
- curl -o /tmp/urchin https://raw.githubusercontent.com/scraperwiki/urchin/master/urchin && chmod +x /tmp/urchin - '[ -n "$WITHOUT_CURL" ] || curl -o /tmp/urchin https://raw.githubusercontent.com/scraperwiki/urchin/master/urchin'
- '[ -z "$WITHOUT_CURL" ] || wget -O /tmp/urchin https://raw.githubusercontent.com/scraperwiki/urchin/master/urchin'
- chmod +x /tmp/urchin
script: script:
- NVM_DIR=$TRAVIS_BUILD_DIR make TEST_SUITE=$TEST_SUITE URCHIN=/tmp/urchin $SHELL - NVM_DIR=$TRAVIS_BUILD_DIR make TEST_SUITE=$TEST_SUITE URCHIN=/tmp/urchin $SHELL
env: env:
@@ -12,3 +15,17 @@ env:
- SHELL=zsh TEST_SUITE=fast - SHELL=zsh TEST_SUITE=fast
- SHELL=ksh TEST_SUITE=fast - SHELL=ksh TEST_SUITE=fast
- SHELL=sh TEST_SUITE=slow - SHELL=sh TEST_SUITE=slow
- SHELL=dash TEST_SUITE=slow
- SHELL=bash TEST_SUITE=slow
- SHELL=zsh TEST_SUITE=slow
- SHELL=ksh TEST_SUITE=slow
- SHELL=sh TEST_SUITE=installation
- SHELL=sh TEST_SUITE=installation WITHOUT_CURL=1
- SHELL=dash TEST_SUITE=installation
- SHELL=dash TEST_SUITE=installation WITHOUT_CURL=1
- SHELL=bash TEST_SUITE=installation
- SHELL=bash TEST_SUITE=installation WITHOUT_CURL=1
- SHELL=zsh TEST_SUITE=installation
- SHELL=zsh TEST_SUITE=installation WITHOUT_CURL=1
- SHELL=ksh TEST_SUITE=installation
- SHELL=ksh TEST_SUITE=installation WITHOUT_CURL=1

View File

@@ -9,7 +9,7 @@ $(SHELLS):
@$@ $(URCHIN) -f test/$(TEST_SUITE) @$@ $(URCHIN) -f test/$(TEST_SUITE)
test: $(SHELLS) test: $(SHELLS)
@$(URCHIN) -f test/slow @$(URCHIN) -f test/slow
default: test default: test

View File

@@ -8,11 +8,11 @@ First you'll need to make sure your system has a c++ compiler. For OSX, XCode w
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.12.1/install.sh | bash curl https://raw.githubusercontent.com/creationix/nvm/v0.17.2/install.sh | bash
or Wget: or Wget:
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.12.1/install.sh | bash wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.17.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>
@@ -24,9 +24,9 @@ You can customize the install source, directory and profile using the `NVM_SOURC
For manual install create a folder somewhere in your filesystem with the `nvm.sh` file inside it. I put mine in a folder called `nvm`. For manual install create a folder somewhere in your filesystem with the `nvm.sh` file inside it. I put mine in a folder called `nvm`.
Or if you have `git` installed, then just clone it: Or if you have `git` installed, then just clone it, and check out the latest version:
git clone https://github.com/creationix/nvm.git ~/.nvm git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
To activate nvm, you need to source it from your shell: To activate nvm, you need to source it from your shell:
@@ -38,7 +38,7 @@ Often I also put in a line to use a specific version of node.
## Usage ## Usage
You can create an `.nvmrc` file containing version number in the project root directory (or any parent directory). You can create an `.nvmrc` file containing version number in the project root directory (or any parent directory).
`nvm use`, `nvm install`, and `nvm run` will all respect an `.nvmrc` file. `nvm use`, `nvm install`, `nvm exec`, and `nvm run` will all respect an `.nvmrc` file.
To download, compile, and install the latest v0.10.x release of node, do this: To download, compile, and install the latest v0.10.x release of node, do this:
@@ -52,6 +52,10 @@ Or you can just run it:
nvm run 0.10 --version nvm run 0.10 --version
Or, you can run any arbitrary command in a subshell with the desired version of node:
nvm exec 0.10 node --version
If you want to see what versions are installed: If you want to see what versions are installed:
nvm ls nvm ls
@@ -75,6 +79,8 @@ To use a mirror of the node binaries, set `$NVM_NODEJS_ORG_MIRROR`:
NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist nvm install 0.10 NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist nvm install 0.10
`nvm use` will, by defaut, create a "current" symlink. Set `$NVM_SYMLINK_CURRENT` to any value other than "true" to disable this behavior.
## License ## License
nvm is released under the MIT license. nvm is released under the MIT license.
@@ -163,7 +169,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.12.1/install.sh [2]: https://github.com/creationix/nvm/blob/v0.17.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

View File

@@ -18,9 +18,11 @@ __nvm_commands ()
current_word="${COMP_WORDS[COMP_CWORD]}" current_word="${COMP_WORDS[COMP_CWORD]}"
COMMANDS='\ COMMANDS='\
help install uninstall use run\ help install uninstall use run exec\
ls ls-remote list list-remote deactivate\ alias unalias copy-packages
alias unalias copy-packages clear-cache version' current list ls list-remote ls-remote\
clear-cache deactivate unload
version'
if [ ${#COMP_WORDS[@]} == 4 ]; then if [ ${#COMP_WORDS[@]} == 4 ]; then
@@ -79,8 +81,8 @@ __nvm ()
return 0 return 0
} }
# complete is a bash builtin, but recent versions of ZSH come with a function # complete is a bash builtin, but recent versions of ZSH come with a function
# called bashcompinit that will create a complete in ZSH. If the user is in # called bashcompinit that will create a complete in ZSH. If the user is in
# ZSH, load and run bashcompinit before calling the complete function. # ZSH, load and run bashcompinit before calling the complete function.
if [[ -n ${ZSH_VERSION-} ]]; then if [[ -n ${ZSH_VERSION-} ]]; then
autoload -U +X bashcompinit && bashcompinit autoload -U +X bashcompinit && bashcompinit

View File

@@ -18,7 +18,7 @@ nvm_download() {
# Emulate curl with wget # Emulate curl with wget
ARGS=$(echo "$*" | sed -e 's/--progress-bar /--progress=bar /' \ ARGS=$(echo "$*" | sed -e 's/--progress-bar /--progress=bar /' \
-e 's/-L //' \ -e 's/-L //' \
-e 's/-I //' \ -e 's/-I /--server-response /' \
-e 's/-s /-q /' \ -e 's/-s /-q /' \
-e 's/-o /-O /' \ -e 's/-o /-O /' \
-e 's/-C - /-c /') -e 's/-C - /-c /')
@@ -44,12 +44,13 @@ install_nvm_from_git() {
mkdir -p "$NVM_DIR" mkdir -p "$NVM_DIR"
git clone "$NVM_SOURCE" "$NVM_DIR" git clone "$NVM_SOURCE" "$NVM_DIR"
fi fi
cd $NVM_DIR && git checkout v0.12.1 && git branch -D master || true cd "$NVM_DIR" && git checkout v0.17.2 && git branch -D master >/dev/null 2>&1
return
} }
install_nvm_as_script() { install_nvm_as_script() {
if [ -z "$NVM_SOURCE" ]; then if [ -z "$NVM_SOURCE" ]; then
NVM_SOURCE="https://raw.githubusercontent.com/creationix/nvm/v0.12.1/nvm.sh" NVM_SOURCE="https://raw.githubusercontent.com/creationix/nvm/v0.17.2/nvm.sh"
fi fi
# Downloading to $NVM_DIR # Downloading to $NVM_DIR
@@ -75,28 +76,27 @@ if [ -z "$METHOD" ]; then
echo >&2 "You need git, curl, or wget to install nvm" echo >&2 "You need git, curl, or wget to install nvm"
exit 1 exit 1
fi fi
else elif [ "~$METHOD" = "~git" ]; then
if [ "$METHOD" = "git" ]; then if ! nvm_has "git"; then
if ! nvm_has "git"; then echo >&2 "You need git to install nvm"
echo >&2 "You need git to install nvm" exit 1
exit 1
fi
install_nvm_from_git
fi fi
if [ "$METHOD" = "script" ]; then install_nvm_from_git
if ! nvm_has "nvm_download"; then elif [ "~$METHOD" = "~script" ]; then
echo >&2 "You need curl or wget to install nvm" if ! nvm_has "nvm_download"; then
exit 1 echo >&2 "You need curl or wget to install nvm"
fi exit 1
install_nvm_as_script
fi fi
install_nvm_as_script
fi fi
echo echo
# Detect profile file if not specified as environment variable (eg: PROFILE=~/.myprofile). # Detect profile file if not specified as environment variable (eg: PROFILE=~/.myprofile).
if [ -z "$PROFILE" ]; then if [ -z "$PROFILE" ]; then
if [ -f "$HOME/.bash_profile" ]; then if [ -f "$HOME/.bashrc" ]; then
PROFILE="$HOME/.bashrc"
elif [ -f "$HOME/.bash_profile" ]; then
PROFILE="$HOME/.bash_profile" PROFILE="$HOME/.bash_profile"
elif [ -f "$HOME/.zshrc" ]; then elif [ -f "$HOME/.zshrc" ]; then
PROFILE="$HOME/.zshrc" PROFILE="$HOME/.zshrc"
@@ -109,7 +109,7 @@ SOURCE_STR="\nexport NVM_DIR=\"$NVM_DIR\"\n[ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$
if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then
if [ -z "$PROFILE" ]; then if [ -z "$PROFILE" ]; then
echo "=> Profile not found. Tried ~/.bash_profile, ~/.zshrc, and ~/.profile." echo "=> Profile not found. Tried ~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile."
echo "=> Create one of them and run this script again" echo "=> Create one of them and run this script again"
else else
echo "=> Profile $PROFILE not found" echo "=> Profile $PROFILE not found"

412
nvm.sh
View File

@@ -19,16 +19,16 @@ nvm_download() {
# Emulate curl with wget # Emulate curl with wget
ARGS=$(echo "$*" | sed -e 's/--progress-bar /--progress=bar /' \ ARGS=$(echo "$*" | sed -e 's/--progress-bar /--progress=bar /' \
-e 's/-L //' \ -e 's/-L //' \
-e 's/-I //' \ -e 's/-I /--server-response /' \
-e 's/-s /-q /' \ -e 's/-s /-q /' \
-e 's/-o /-O /' \ -e 's/-o /-O /' \
-e 's/-C - /-c /') -e 's/-C - /-c /')
wget $ARGS eval wget $ARGS
fi fi
} }
nvm_has_system_node() { nvm_has_system_node() {
[ "$(nvm deactivate 2> /dev/null && command -v node)" != '' ] [ "$(nvm deactivate >/dev/null 2>&1 && command -v node)" != '' ]
} }
# Make zsh glob matching behave same as bash # Make zsh glob matching behave same as bash
@@ -58,6 +58,12 @@ nvm_tree_contains_path() {
tree="$1" tree="$1"
local node_path local node_path
node_path="$2" node_path="$2"
if [ "@$tree@" = "@@" ] || [ "@$node_path@" = "@@" ]; then
>&2 echo "both the tree and the node path are required"
return 2
fi
local pathdir local pathdir
pathdir=$(dirname "$node_path") pathdir=$(dirname "$node_path")
while [ "$pathdir" != "" ] && [ "$pathdir" != "." ] && [ "$pathdir" != "/" ] && [ "$pathdir" != "$tree" ]; do while [ "$pathdir" != "" ] && [ "$pathdir" != "." ] && [ "$pathdir" != "/" ] && [ "$pathdir" != "$tree" ]; do
@@ -87,11 +93,57 @@ nvm_find_nvmrc() {
# Obtain nvm version from rc file # Obtain nvm version from rc file
nvm_rc_version() { nvm_rc_version() {
export NVM_RC_VERSION=''
local NVMRC_PATH local NVMRC_PATH
NVMRC_PATH="$(nvm_find_nvmrc)" NVMRC_PATH="$(nvm_find_nvmrc)"
if [ -e "$NVMRC_PATH" ]; then if [ -e "$NVMRC_PATH" ]; then
read NVM_RC_VERSION < "$NVMRC_PATH" read NVM_RC_VERSION < "$NVMRC_PATH"
echo "Found '$NVMRC_PATH' with version <$NVM_RC_VERSION>" echo "Found '$NVMRC_PATH' with version <$NVM_RC_VERSION>"
else
>&2 echo "No .nvmrc file found"
return 1
fi
}
nvm_version_greater() {
local LHS
LHS=$(nvm_normalize_version "$1")
local RHS
RHS=$(nvm_normalize_version "$2")
[ $LHS -gt $RHS ];
}
nvm_version_greater_than_or_equal_to() {
local LHS
LHS=$(nvm_normalize_version "$1")
local RHS
RHS=$(nvm_normalize_version "$2")
[ $LHS -ge $RHS ];
}
nvm_version_dir() {
local NVM_USE_NEW_DIR
NVM_USE_NEW_DIR="$1"
if [ -z "$NVM_USE_NEW_DIR" ] || [ "$NVM_USE_NEW_DIR" = "new" ]; then
echo "$NVM_DIR/versions"
elif [ "$NVM_USE_NEW_DIR" = "old" ]; then
echo "$NVM_DIR"
else
echo "unknown version dir" >&2
return 3
fi
}
nvm_version_path() {
local VERSION
VERSION="$1"
if [ -z "$VERSION" ]; then
echo "version is required" >&2
return 3
elif nvm_version_greater 0.12.0 "$VERSION"; then
echo "$(nvm_version_dir old)/$VERSION"
else
echo "$(nvm_version_dir new)/$VERSION"
fi fi
} }
@@ -110,7 +162,7 @@ nvm_version() {
return $? return $?
fi fi
VERSION=`nvm_ls $PATTERN | tail -n1` VERSION="$(nvm_ls "$PATTERN" | tail -n1)"
echo "$VERSION" echo "$VERSION"
if [ "$VERSION" = 'N/A' ]; then if [ "$VERSION" = 'N/A' ]; then
@@ -120,22 +172,47 @@ nvm_version() {
nvm_remote_version() { nvm_remote_version() {
local PATTERN local PATTERN
PATTERN=$1 PATTERN="$1"
local VERSION local VERSION
VERSION=`nvm_ls_remote $PATTERN | tail -n1` VERSION="$(nvm_ls_remote "$PATTERN" | tail -n1)"
echo "$VERSION" echo "$VERSION"
if [ "$VERSION" = 'N/A' ]; then if [ "_$VERSION" = '_N/A' ]; then
return 3 return 3
fi fi
} }
nvm_normalize_version() { nvm_normalize_version() {
echo "$1" | sed -e 's/^v//' | awk -F. '{ printf("%d%03d%03d\n", $1,$2,$3); }' echo "$1" | sed -e 's/^v//' | \awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }'
}
nvm_ensure_version_prefix() {
echo "$1" | sed -e 's/^\([0-9]\)/v\1/g'
} }
nvm_format_version() { nvm_format_version() {
echo "$1" | sed -e 's/^\([0-9]\)/v\1/g' local VERSION
VERSION="$(nvm_ensure_version_prefix "$1")"
if [ "_$(nvm_num_version_groups "$VERSION")" != "_3" ]; then
VERSION="$(echo "$VERSION" | sed -e 's/\.*$/.0/')"
nvm_format_version "$VERSION"
else
echo "$VERSION"
fi
}
nvm_num_version_groups() {
local VERSION
VERSION="$1"
if [ -z "$VERSION" ]; then
echo "0"
return
fi
local NVM_NUM_DOTS
NVM_NUM_DOTS=$(echo "$VERSION" | sed -e 's/^v//' | sed -e 's/\.$//' | sed -e 's/[^\.]//g')
local NVM_NUM_GROUPS
NVM_NUM_GROUPS=".$NVM_NUM_DOTS"
echo "${#NVM_NUM_GROUPS}"
} }
nvm_strip_path() { nvm_strip_path() {
@@ -152,20 +229,24 @@ nvm_prepend_path() {
nvm_binary_available() { nvm_binary_available() {
# binaries started with node 0.8.6 # binaries started with node 0.8.6
local MINIMAL local FIRST_VERSION_WITH_BINARY
MINIMAL="0.8.6" FIRST_VERSION_WITH_BINARY="0.8.6"
local VERSION nvm_version_greater_than_or_equal_to "$1" "$FIRST_VERSION_WITH_BINARY"
VERSION=$1
[ $(nvm_normalize_version $VERSION) -ge $(nvm_normalize_version $MINIMAL) ]
} }
nvm_ls_current() { nvm_ls_current() {
local NODE_PATH local NODE_PATH
NODE_PATH="$(which node)" NODE_PATH="$(which node 2> /dev/null)"
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo 'none' echo 'none'
elif nvm_tree_contains_path "$NVM_DIR" "$NODE_PATH"; then elif nvm_tree_contains_path "$NVM_DIR" "$NODE_PATH"; then
echo `node -v 2>/dev/null` local VERSION
VERSION=`node -v 2>/dev/null`
if [ "$VERSION" = "v0.6.21-pre" ]; then
echo "v0.6.21"
else
echo "$VERSION"
fi
else else
echo 'system' echo 'system'
fi fi
@@ -182,41 +263,57 @@ nvm_ls() {
fi fi
if [ -f "$NVM_DIR/alias/$PATTERN" ]; then if [ -f "$NVM_DIR/alias/$PATTERN" ]; then
nvm_version `cat $NVM_DIR/alias/$PATTERN` nvm_version "$(cat "$NVM_DIR/alias/$PATTERN")"
return return
fi fi
# 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 [ `expr "$PATTERN" : "v[0-9]*\.[0-9]*\.[0-9]*$"` != 0 ]; then PATTERN=$(nvm_ensure_version_prefix $PATTERN)
if [ -d "$NVM_DIR/$PATTERN" ]; then if [ "_$(echo "$PATTERN" | cut -c1-1)" = "_v" ] && [ "_$(nvm_num_version_groups "$PATTERN")" = "_3" ]; then
if [ -d "$(nvm_version_path "$PATTERN")" ]; then
VERSIONS="$PATTERN" VERSIONS="$PATTERN"
fi fi
else else
PATTERN=$(nvm_format_version $PATTERN) if [ "_$PATTERN" != "_system" ]; then
if [ `expr "$PATTERN" : "v[0-9]*\.[0-9]*$"` != 0 ]; then local NUM_VERSION_GROUPS
PATTERN="$PATTERN." NUM_VERSION_GROUPS="$(nvm_num_version_groups "$PATTERN")"
if [ "_$NUM_VERSION_GROUPS" = "_2" ] || [ "_$NUM_VERSION_GROUPS" = "_1" ]; then
PATTERN="$(echo "$PATTERN" | sed -e 's/\.*$//g')."
fi
fi
if [ -d "$(nvm_version_dir new)" ]; then
VERSIONS=`find "$(nvm_version_dir new)/" "$(nvm_version_dir old)/" -maxdepth 1 -type d -name "$PATTERN*" -exec basename '{}' ';' \
| sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n | \grep -v '^ *\.' | \grep -e '^v' | \grep -v -e '^versions$'`
else
VERSIONS=`find "$(nvm_version_dir old)/" -maxdepth 1 -type d -name "$PATTERN*" -exec basename '{}' ';' \
| sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n | \grep -v '^ *\.' | \grep -e '^v'`
fi fi
VERSIONS=`find "$NVM_DIR/" -maxdepth 1 -type d -name "$PATTERN*" -exec basename '{}' ';' \
| sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n | \grep -v '^ *\.'`
fi fi
if nvm_has_system_node; then
if [ -z "$PATTERN" ]; then
VERSIONS="$VERSIONS$(printf '\n%s' 'system')"
elif [ "$PATTERN" = 'system' ]; then
VERSIONS="$(printf '%s' 'system')"
fi
fi
if [ -z "$VERSIONS" ]; then if [ -z "$VERSIONS" ]; then
echo "N/A" echo "N/A"
return 3 return 3
fi fi
if [ -z "$PATTERN" ] && nvm_has_system_node; then
VERSIONS="$VERSIONS$(printf '\n%s' 'system')"
fi
echo "$VERSIONS" echo "$VERSIONS"
return return
} }
nvm_ls_remote() { nvm_ls_remote() {
local PATTERN local PATTERN
PATTERN=$1 PATTERN="$1"
local VERSIONS local VERSIONS
local GREP_OPTIONS local GREP_OPTIONS
GREP_OPTIONS='' GREP_OPTIONS=''
if [ -n "$PATTERN" ]; then if [ -n "$PATTERN" ]; then
PATTERN=`nvm_format_version "$PATTERN"` PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
else else
PATTERN=".*" PATTERN=".*"
fi fi
@@ -233,15 +330,15 @@ nvm_ls_remote() {
} }
nvm_checksum() { nvm_checksum() {
if nvm_has "shasum"; then if nvm_has "sha1sum"; then
checksum=$(shasum $1 | awk '{print $1}') checksum="$(sha1sum "$1" | \awk '{print $1}')"
elif nvm_has "sha1"; then elif nvm_has "sha1"; then
checksum=$(sha1 -q $1) checksum="$(sha1 -q "$1")"
else else
checksum=$(sha1sum $1 | awk '{print $1}') checksum="$(shasum "$1" | \awk '{print $1}')"
fi fi
if [ "$checksum" = "$2" ]; then if [ "_$checksum" = "_$2" ]; then
return return
elif [ -z "$2" ]; then elif [ -z "$2" ]; then
echo 'Checksums empty' #missing in raspberry pi binary echo 'Checksums empty' #missing in raspberry pi binary
@@ -260,7 +357,7 @@ nvm_print_versions() {
echo "$1" | while read VERSION; do echo "$1" | while read VERSION; do
if [ "$VERSION" = "$NVM_CURRENT" ]; then if [ "$VERSION" = "$NVM_CURRENT" ]; then
FORMAT='\033[0;32m-> %9s\033[0m' FORMAT='\033[0;32m-> %9s\033[0m'
elif [ -d "$NVM_DIR/$VERSION" ]; then elif [ -d "$(nvm_version_path "$VERSION")" ]; then
FORMAT='\033[0;34m%12s\033[0m' FORMAT='\033[0;34m%12s\033[0m'
elif [ "$VERSION" = "system" ]; then elif [ "$VERSION" = "system" ]; then
FORMAT='\033[0;33m%12s\033[0m' FORMAT='\033[0;33m%12s\033[0m'
@@ -375,28 +472,45 @@ nvm() {
fi fi
provided_version=$1 provided_version=$1
if [ -z "$provided_version" ]; then if [ -z "$provided_version" ]; then
if [ $version_not_provided -ne 1 ]; then if [ $version_not_provided -ne 1 ]; then
nvm_rc_version nvm_rc_version
fi fi
provided_version="$NVM_RC_VERSION" provided_version="$NVM_RC_VERSION"
else
shift
fi fi
[ -d "$NVM_DIR/$provided_version" ] && echo "$provided_version is already installed." >&2 && return
VERSION=`nvm_remote_version $provided_version` VERSION="$(nvm_remote_version "$provided_version")"
ADDITIONAL_PARAMETERS='' ADDITIONAL_PARAMETERS=''
local PROVIDED_COPY_PACKAGES_FROM
shift local COPY_PACKAGES_FROM
while [ $# -ne 0 ] while [ $# -ne 0 ]
do do
ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS $1" if [ "_$(echo "$1" | cut -c 1-21)" = "_--copy-packages-from=" ]; then
PROVIDED_COPY_PACKAGES_FROM="$(echo "$1" | cut -c 22-)"
COPY_PACKAGES_FROM="$(nvm_version "$PROVIDED_COPY_PACKAGES_FROM")"
else
ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS $1"
fi
shift shift
done done
if [ -d "$NVM_DIR/$VERSION" ]; then if [ "_$(nvm_ensure_version_prefix "$PROVIDED_COPY_PACKAGES_FROM")" = "_$VERSION" ]; then
echo "You can't copy global packages from the same version of node you're installing." >&2
return 4
elif [ ! -z "$PROVIDED_COPY_PACKAGES_FROM" ] && [ "_$COPY_PACKAGES_FROM" = "_N/A" ]; then
echo "If --copy-packages-from is provided, it must point to an installed version of node." >&2
return 5
fi
if [ -d "$(nvm_version_path "$VERSION")" ]; then
echo "$VERSION is already installed." >&2 echo "$VERSION is already installed." >&2
nvm use "$VERSION" if nvm use "$VERSION" && [ ! -z "$COPY_PACKAGES_FROM" ] && [ "_$COPY_PACKAGES_FROM" != "_N/A" ]; then
nvm copy-packages "$COPY_PACKAGES_FROM"
fi
return $? return $?
fi fi
@@ -412,7 +526,7 @@ nvm() {
if nvm_binary_available "$VERSION"; then if nvm_binary_available "$VERSION"; then
t="$VERSION-$os-$arch" t="$VERSION-$os-$arch"
url="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-${t}.tar.gz" url="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-${t}.tar.gz"
sum=`nvm_download -s $NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt -o - | \grep node-${t}.tar.gz | awk '{print $1}'` sum=`nvm_download -s $NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt -o - | \grep node-${t}.tar.gz | \awk '{print $1}'`
local tmpdir local tmpdir
tmpdir="$NVM_DIR/bin/node-${t}" tmpdir="$NVM_DIR/bin/node-${t}"
local tmptarball local tmptarball
@@ -423,10 +537,12 @@ nvm() {
nvm_checksum "$tmptarball" $sum && \ nvm_checksum "$tmptarball" $sum && \
tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \ tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \
rm -f "$tmptarball" && \ rm -f "$tmptarball" && \
mv "$tmpdir" "$NVM_DIR/$VERSION" mv "$tmpdir" "$(nvm_version_path "$VERSION")"
) )
then then
nvm use $VERSION if nvm use "$VERSION" && [ ! -z "$COPY_PACKAGES_FROM" ] && [ "_$COPY_PACKAGES_FROM" != "_N/A" ]; then
nvm copy-packages "$COPY_PACKAGES_FROM"
fi
return $? return $?
else else
echo "Binary download failed, trying source." >&2 echo "Binary download failed, trying source." >&2
@@ -436,7 +552,9 @@ nvm() {
fi fi
fi fi
echo "Additional options while compiling: $ADDITIONAL_PARAMETERS" if [ -n "$ADDITIONAL_PARAMETERS" ]; then
echo "Additional options while compiling: $ADDITIONAL_PARAMETERS"
fi
tarball='' tarball=''
sum='' sum=''
@@ -449,9 +567,9 @@ nvm() {
tmpdir="$NVM_DIR/src" tmpdir="$NVM_DIR/src"
local tmptarball local tmptarball
tmptarball="$tmpdir/node-$VERSION.tar.gz" tmptarball="$tmpdir/node-$VERSION.tar.gz"
if [ "`nvm_download -s -I "$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz" -o - | \grep '200 OK'`" != '' ]; then if [ "`nvm_download -s -I "$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz" -o - 2>&1 | \grep '200 OK'`" != '' ]; then
tarball="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz" tarball="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz"
sum=`nvm_download -s $NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt -o - | \grep node-$VERSION.tar.gz | awk '{print $1}'` sum=`nvm_download -s $NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt -o - | \grep node-$VERSION.tar.gz | \awk '{print $1}'`
elif [ "`nvm_download -s -I "$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz" -o - | \grep '200 OK'`" != '' ]; then elif [ "`nvm_download -s -I "$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz" -o - | \grep '200 OK'`" != '' ]; then
tarball="$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz" tarball="$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz"
fi fi
@@ -462,19 +580,21 @@ nvm() {
nvm_checksum "$tmptarball" $sum && \ nvm_checksum "$tmptarball" $sum && \
tar -xzf "$tmptarball" -C "$tmpdir" && \ tar -xzf "$tmptarball" -C "$tmpdir" && \
cd "$tmpdir/node-$VERSION" && \ cd "$tmpdir/node-$VERSION" && \
./configure --prefix="$NVM_DIR/$VERSION" $ADDITIONAL_PARAMETERS && \ ./configure --prefix="$(nvm_version_path "$VERSION")" $ADDITIONAL_PARAMETERS && \
$make $MAKE_CXX && \ $make $MAKE_CXX && \
rm -f "$NVM_DIR/$VERSION" 2>/dev/null && \ rm -f "$(nvm_version_path "$VERSION")" 2>/dev/null && \
$make $MAKE_CXX install $make $MAKE_CXX install
) )
then then
nvm use $VERSION if nvm use "$VERSION" && [ ! -z "$COPY_PACKAGES_FROM" ] && [ "_$COPY_PACKAGES_FROM" != "_N/A" ]; then
nvm copy-packages "$COPY_PACKAGES_FROM"
fi
if ! nvm_has "npm" ; then if ! nvm_has "npm" ; then
echo "Installing npm..." echo "Installing npm..."
if [ "`expr "$VERSION" : '\(^v0\.1\.\)'`" != '' ]; then if nvm_version_greater 0.2.0 "$VERSION"; then
echo "npm requires node v0.2.3 or higher" >&2 echo "npm requires node v0.2.3 or higher" >&2
elif [ "`expr "$VERSION" : '\(^v0\.2\.\)'`" != '' ]; then elif nvm_version_greater_than_or_equal_to "$VERSION" 0.2.0; then
if [ "`expr "$VERSION" : '\(^v0\.2\.[0-2]$\)'`" != '' ]; then if nvm_version_greater 0.2.3 "$VERSION"; then
echo "npm requires node v0.2.3 or higher" >&2 echo "npm requires node v0.2.3 or higher" >&2
else else
nvm_download https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh nvm_download https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh
@@ -487,16 +607,18 @@ nvm() {
echo "nvm: install $VERSION failed!" >&2 echo "nvm: install $VERSION failed!" >&2
return 1 return 1
fi fi
return $?
;; ;;
"uninstall" ) "uninstall" )
[ $# -ne 2 ] && nvm help && return [ $# -ne 2 ] && nvm help && return
PATTERN=`nvm_format_version $2` PATTERN=`nvm_ensure_version_prefix $2`
if [ "$PATTERN" = `nvm_version` ]; then if [ "$PATTERN" = `nvm_version` ]; then
echo "nvm: Cannot uninstall currently-active node version, $PATTERN." >&2 echo "nvm: Cannot uninstall currently-active node version, $PATTERN." >&2
return 1 return 1
fi fi
VERSION=`nvm_version $PATTERN` VERSION=`nvm_version $PATTERN`
if [ ! -d $NVM_DIR/$VERSION ]; then if [ ! -d "$(nvm_version_path "$VERSION")" ]; then
echo "$VERSION version is not installed..." >&2 echo "$VERSION version is not installed..." >&2
return; return;
fi fi
@@ -508,7 +630,7 @@ nvm() {
"$NVM_DIR/src/node-$VERSION.tar.gz" \ "$NVM_DIR/src/node-$VERSION.tar.gz" \
"$NVM_DIR/bin/node-${t}" \ "$NVM_DIR/bin/node-${t}" \
"$NVM_DIR/bin/node-${t}.tar.gz" \ "$NVM_DIR/bin/node-${t}.tar.gz" \
"$NVM_DIR/$VERSION" 2>/dev/null "$(nvm_version_path "$VERSION")" 2>/dev/null
echo "Uninstalled node $VERSION" echo "Uninstalled node $VERSION"
# Rm any aliases that point to uninstalled version. # Rm any aliases that point to uninstalled version.
@@ -519,24 +641,30 @@ nvm() {
;; ;;
"deactivate" ) "deactivate" )
if [ `expr "$PATH" : ".*$NVM_DIR/.*/bin.*"` != 0 ] ; then local NEWPATH
export PATH=`nvm_strip_path "$PATH" "/bin"` NEWPATH="$(nvm_strip_path "$PATH" "/bin")"
if [ "$PATH" = "$NEWPATH" ]; then
echo "Could not find $NVM_DIR/*/bin in \$PATH" >&2
else
export PATH="$NEWPATH"
hash -r hash -r
echo "$NVM_DIR/*/bin removed from \$PATH" echo "$NVM_DIR/*/bin removed from \$PATH"
else
echo "Could not find $NVM_DIR/*/bin in \$PATH" >&2
fi fi
if [ `expr "$MANPATH" : ".*$NVM_DIR/.*/share/man.*"` != 0 ] ; then
export MANPATH=`nvm_strip_path "$MANPATH" "/share/man"` NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
echo "$NVM_DIR/*/share/man removed from \$MANPATH" if [ "$MANPATH" = "$NEWPATH" ]; then
else
echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2 echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2
fi
if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ] ; then
export NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"`
echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
else else
export MANPATH="$NEWPATH"
echo "$NVM_DIR/*/share/man removed from \$MANPATH"
fi
NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")"
if [ "$NODE_PATH" = "$NEWPATH" ]; then
echo "Could not find $NVM_DIR/*/lib/node_modules in \$NODE_PATH" >&2 echo "Could not find $NVM_DIR/*/lib/node_modules in \$NODE_PATH" >&2
else
export NODE_PATH="$NEWPATH"
echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
fi fi
;; ;;
"use" ) "use" )
@@ -549,52 +677,56 @@ nvm() {
if [ -n "$NVM_RC_VERSION" ]; then if [ -n "$NVM_RC_VERSION" ]; then
VERSION=`nvm_version $NVM_RC_VERSION` VERSION=`nvm_version $NVM_RC_VERSION`
fi fi
elif [ "_$2" != '_system' ]; then
VERSION="$(nvm_version "$2")"
else else
if [ $2 = 'system' ]; then VERSION="$2"
if nvm_has_system_node && nvm deactivate; then
echo "Now using system version of node: $(node -v 2>/dev/null)."
return
else
echo "System version of node not found." >&2
return 127
fi
else
VERSION=`nvm_version $2`
fi
fi fi
if [ -z "$VERSION" ]; then if [ -z "$VERSION" ]; then
nvm help nvm help
return 127 return 127
fi fi
if [ -z "$VERSION" ]; then
VERSION=`nvm_version $2` if [ "_$VERSION" = '_system' ]; 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)."
return
else
echo "System version of node not found." >&2
return 127
fi
fi fi
if [ ! -d "$NVM_DIR/$VERSION" ]; then
local NVM_VERSION_DIR
NVM_VERSION_DIR="$(nvm_version_path "$VERSION")"
if [ ! -d "$NVM_VERSION_DIR" ]; then
echo "$VERSION version is not installed yet" >&2 echo "$VERSION version is not installed yet" >&2
return 1 return 1
fi fi
# Strip other version from PATH # Strip other version from PATH
PATH=`nvm_strip_path "$PATH" "/bin"` PATH=`nvm_strip_path "$PATH" "/bin"`
# Prepend current version # Prepend current version
PATH=`nvm_prepend_path "$PATH" "$NVM_DIR/$VERSION/bin"` PATH=`nvm_prepend_path "$PATH" "$NVM_VERSION_DIR/bin"`
if [ -z "$MANPATH" ]; then if [ -z "$MANPATH" ]; then
MANPATH=$(manpath) MANPATH=$(manpath)
fi fi
# Strip other version from MANPATH # Strip other version from MANPATH
MANPATH=`nvm_strip_path "$MANPATH" "/share/man"` MANPATH=`nvm_strip_path "$MANPATH" "/share/man"`
# Prepend current version # Prepend current version
MANPATH=`nvm_prepend_path "$MANPATH" "$NVM_DIR/$VERSION/share/man"` MANPATH=`nvm_prepend_path "$MANPATH" "$NVM_VERSION_DIR/share/man"`
# Strip other version from NODE_PATH # Strip other version from NODE_PATH
NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"` NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"`
# Prepend current version # Prepend current version
NODE_PATH=`nvm_prepend_path "$NODE_PATH" "$NVM_DIR/$VERSION/lib/node_modules"` NODE_PATH=`nvm_prepend_path "$NODE_PATH" "$NVM_VERSION_DIR/lib/node_modules"`
export PATH export PATH
hash -r hash -r
export MANPATH export MANPATH
export NODE_PATH export NODE_PATH
export NVM_PATH="$NVM_DIR/$VERSION/lib/node" export NVM_PATH="$NVM_VERSION_DIR/lib/node"
export NVM_BIN="$NVM_DIR/$VERSION/bin" export NVM_BIN="$NVM_VERSION_DIR/bin"
rm -f "$NVM_DIR/current" && ln -s "$NVM_DIR/$VERSION" "$NVM_DIR/current" if [ "$NVM_SYMLINK_CURRENT" = true ] || [ -z "$NVM_SYMLINK_CURRENT" ]; then
rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
fi
echo "Now using node $VERSION" echo "Now using node $VERSION"
;; ;;
"run" ) "run" )
@@ -630,14 +762,41 @@ nvm() {
fi fi
fi fi
if [ ! -d "$NVM_DIR/$VERSION" ]; then local NVM_VERSION_DIR
NVM_VERSION_DIR=$(nvm_version_path "$VERSION")
if [ ! -d "$NVM_VERSION_DIR" ]; then
echo "$VERSION version is not installed yet" >&2 echo "$VERSION version is not installed yet" >&2
return 1 return 1
fi fi
RUN_NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"` RUN_NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"`
RUN_NODE_PATH=`nvm_prepend_path "$NODE_PATH" "$NVM_DIR/$VERSION/lib/node_modules"` RUN_NODE_PATH=`nvm_prepend_path "$NODE_PATH" "$NVM_VERSION_DIR/lib/node_modules"`
echo "Running node $VERSION" echo "Running node $VERSION"
NODE_PATH=$RUN_NODE_PATH $NVM_DIR/$VERSION/bin/node "$@" NODE_PATH=$RUN_NODE_PATH $NVM_VERSION_DIR/bin/node "$@"
;;
"exec" )
shift
local provided_version
provided_version="$1"
if [ -n "$provided_version" ]; then
VERSION=`nvm_version $provided_version`
if [ $VERSION = "N/A" ]; then
provided_version=''
nvm_rc_version
VERSION="$(nvm_version "$NVM_RC_VERSION")"
else
shift
fi
fi
local NVM_VERSION_DIR
NVM_VERSION_DIR=$(nvm_version_path "$VERSION")
if [ ! -d "$NVM_VERSION_DIR" ]; then
echo "$VERSION version is not installed yet" >&2
return 1
fi
echo "Running node $VERSION"
NODE_VERSION=$VERSION $NVM_DIR/nvm-exec "$@"
;; ;;
"ls" | "list" ) "ls" | "list" )
local NVM_LS_OUTPUT local NVM_LS_OUTPUT
@@ -651,41 +810,43 @@ nvm() {
return $NVM_LS_EXIT_CODE return $NVM_LS_EXIT_CODE
;; ;;
"ls-remote" | "list-remote" ) "ls-remote" | "list-remote" )
nvm_print_versions "`nvm_ls_remote $2`" local NVM_LS_EXIT_CODE
return NVM_LS_OUTPUT=$(nvm_ls_remote "$2")
NVM_LS_EXIT_CODE=$?
nvm_print_versions "$NVM_LS_OUTPUT"
return $NVM_LS_EXIT_CODE
;; ;;
"current" ) "current" )
nvm_version current nvm_version current
;; ;;
"alias" ) "alias" )
mkdir -p $NVM_DIR/alias mkdir -p "$NVM_DIR/alias"
if [ $# -le 2 ]; then if [ $# -le 2 ]; then
local DEST local DEST
for ALIAS in $NVM_DIR/alias/$2*; do for ALIAS in "$NVM_DIR"/alias/"$2"*; do
if [ -e "$ALIAS" ]; then if [ -e "$ALIAS" ]; then
DEST=`cat $ALIAS` DEST="$(cat "$ALIAS")"
VERSION=`nvm_version $DEST` VERSION="$(nvm_version "$DEST")"
if [ "$DEST" = "$VERSION" ]; then if [ "_$DEST" = "_$VERSION" ]; then
echo "$(basename $ALIAS) -> $DEST" echo "$(basename "$ALIAS") -> $DEST"
else else
echo "$(basename $ALIAS) -> $DEST (-> $VERSION)" echo "$(basename "$ALIAS") -> $DEST (-> $VERSION)"
fi fi
fi fi
done done
return return
fi fi
if [ -z "$3" ]; then if [ -z "$3" ]; then
rm -f $NVM_DIR/alias/$2 rm -f "$NVM_DIR/alias/$2"
echo "$2 -> *poof*" echo "$2 -> *poof*"
return return
fi fi
mkdir -p $NVM_DIR/alias VERSION="$(nvm_version "$3")"
VERSION=`nvm_version $3`
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "! WARNING: Version '$3' does not exist." >&2 echo "! WARNING: Version '$3' does not exist." >&2
fi fi
echo $3 > "$NVM_DIR/alias/$2" echo $3 > "$NVM_DIR/alias/$2"
if [ ! "$3" = "$VERSION" ]; then if [ ! "_$3" = "_$VERSION" ]; then
echo "$2 -> $3 (-> $VERSION)" echo "$2 -> $3 (-> $VERSION)"
else else
echo "$2 -> $3" echo "$2 -> $3"
@@ -703,30 +864,43 @@ nvm() {
nvm help nvm help
return 127 return 127
fi fi
VERSION=`nvm_version $2`
local ROOT
ROOT=`(nvm use $VERSION && npm -g root)`
local ROOTDEPTH
ROOTDEPTH=$((`echo $ROOT | sed 's/[^\/]//g'|wc -m` -1))
# declare local INSTALLS first, otherwise it doesn't work in zsh local PROVIDED_VERSION
PROVIDED_VERSION="$2"
if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ] || [ "$(nvm_version $PROVIDED_VERSION)" = "$(nvm_ls_current)" ]; then
echo 'Can not copy packages from the current version of node.' >&2
return 2
fi
local INSTALLS local INSTALLS
INSTALLS=`nvm use $VERSION > /dev/null && npm -g -p ll | \grep "$ROOT\/[^/]\+$" | cut -d '/' -f $(($ROOTDEPTH + 2)) | cut -d ":" -f 2 | \grep -v npm | tr "\n" " "` if [ "$PROVIDED_VERSION" = "system" ]; then
if ! nvm_has_system_node; then
echo 'No system version of node detected.' >&2
return 3
fi
INSTALLS=$(nvm deactivate > /dev/null && npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | xargs)
else
local VERSION
VERSION="$(nvm_version "$PROVIDED_VERSION")"
INSTALLS=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | xargs)
fi
npm install -g ${INSTALLS[@]} echo "Copying global packages from $VERSION..."
echo "$INSTALLS" | xargs npm install -g --quiet
;; ;;
"clear-cache" ) "clear-cache" )
rm -f $NVM_DIR/v* 2>/dev/null rm -f $NVM_DIR/v* "$(nvm_version_dir)" 2>/dev/null
echo "Cache cleared." echo "Cache cleared."
;; ;;
"version" ) "version" )
nvm_version $2 nvm_version $2
;; ;;
"--version" ) "--version" )
echo "0.12.1" echo "0.17.2"
;; ;;
"unload" ) "unload" )
unset -f nvm nvm_print_versions nvm_checksum nvm_ls_remote nvm_ls nvm_remote_version nvm_version nvm_rc_version > /dev/null 2>&1 unset -f nvm nvm_print_versions nvm_checksum nvm_ls_remote nvm_ls nvm_remote_version nvm_version nvm_rc_version nvm_version_greater nvm_version_greater_than_or_equal_to > /dev/null 2>&1
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
;; ;;
* ) * )
@@ -735,5 +909,9 @@ nvm() {
esac esac
} }
nvm ls default >/dev/null && nvm use default >/dev/null || true if nvm ls default >/dev/null; then
nvm use default >/dev/null
elif nvm_rc_version >/dev/null 2>&1; then
nvm use >/dev/null
fi

View File

@@ -1,6 +1,6 @@
{ {
"name": "nvm", "name": "nvm",
"version": "0.12.1", "version": "0.17.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"
@@ -8,7 +8,8 @@
"scripts": { "scripts": {
"test": "urchin test", "test": "urchin test",
"test/fast": "urchin -f test/fast", "test/fast": "urchin -f test/fast",
"test/slow": "urchin -f test/slow" "test/slow": "urchin -f test/slow",
"test/installation": "urchin -f test/installation"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@@ -1,4 +1,28 @@
#!/bin/sh #!/bin/sh
. ../../../nvm.sh . ../../../nvm.sh
[ $(nvm alias | wc -l) = '10' ]
die () { echo $@ ; exit 1; }
NVM_ALIAS_OUTPUT=$(nvm alias)
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test1 -> 0.0.1 (-> v0.0.1)$' \
|| die "did not find test1 alias"
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test2 -> 0.0.2 (-> v0.0.2)$' \
|| die "did not find test2 alias"
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test3 -> 0.0.3 (-> v0.0.3)$' \
|| die "did not find test3 alias"
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test4 -> 0.0.4 (-> v0.0.4)$' \
|| die "did not find test4 alias"
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test5 -> 0.0.5 (-> v0.0.5)$' \
|| die "did not find test5 alias"
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test6 -> 0.0.6 (-> v0.0.6)$' \
|| die "did not find test6 alias"
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test7 -> 0.0.7 (-> v0.0.7)$' \
|| die "did not find test7 alias"
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test8 -> 0.0.8 (-> v0.0.8)$' \
|| die "did not find test8 alias"
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test9 -> 0.0.9 (-> v0.0.9)$' \
|| die "did not find test9 alias"
echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test10 -> 0.0.10 (-> v0.0.10)$' \
|| die "did not find test10 alias"

View File

@@ -2,5 +2,6 @@
for i in $(seq 1 10) for i in $(seq 1 10)
do do
echo v0.0.$i > ../../../alias/test$i echo 0.0.$i > ../../../alias/test$i
mkdir -p ../../../v0.0.$i
done done

8
test/fast/Aliases/teardown_dir Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/sh
for i in $(seq 1 10)
do
rm -f "../../../alias/test$i"
rm -rf "../../../v0.0.$i"
done

View File

@@ -0,0 +1,21 @@
#!/bin/sh
mkdir ../../../v0.0.2
mkdir ../../../v0.0.20
. ../../../nvm.sh
die () { echo $@ ; exit 1; }
# The result should contain only the appropriate version numbers.
nvm ls 0.0.2 | grep 'v0.0.2' > /dev/null
if [ $? -eq 0 ]; then
echo '"nvm ls 0.0.2" contained v0.0.2'
fi
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

View File

@@ -0,0 +1,7 @@
#!/bin/sh
. ../../../nvm.sh
nvm ls node
[ "$?" = "3" ]

View File

@@ -0,0 +1,21 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
mkdir -p ../../../v0.0.1
mkdir -p ../../../v0.0.3
mkdir -p ../../../v0.0.9
mkdir -p ../../../v0.3.1
mkdir -p ../../../v0.3.3
mkdir -p ../../../v0.3.9
nvm_has_system_node() { return 0; }
nvm ls system | grep system 2>&1 > /dev/null
[ $? -eq 0 ] || die '"nvm ls system" did not contain "system" when system node is present'
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'

View File

@@ -0,0 +1,11 @@
#!/bin/sh
mkdir ../../../v0.1.3
mkdir ../../../v0.2.3
mkdir ../../../versions
. ../../../nvm.sh
[ -z "$(nvm ls | \grep 'versions')" ]
# The result should contain only the appropriate version numbers.

View File

@@ -0,0 +1,12 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
mkdir -p ../../../versions/v0.12.1
mkdir ../../../v0.1.3
. ../../../nvm.sh
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'

View File

@@ -6,6 +6,6 @@ mkdir ../../../v0.1.2
nvm ls v0.1 | grep v0.1.2 && nvm ls v0.1 | grep v0.1.2 &&
nvm ls v0.1.2 | grep v0.1.2 && nvm ls v0.1.2 | grep v0.1.2 &&
nvm ls v0.1. | grep N/A && nvm ls v0.1. | grep v0.1.2 &&
nvm ls v0.1.1 | grep N/A nvm ls v0.1.1 | grep N/A

23
test/fast/Listing versions/teardown Normal file → Executable file
View File

@@ -1,11 +1,14 @@
rmdir ../../../v0.0.1 rmdir ../../../v0.0.1 >/dev/null 2>&1
rmdir ../../../v0.0.3 rmdir ../../../v0.0.2 >/dev/null 2>&1
rmdir ../../../v0.0.9 rmdir ../../../v0.0.3 >/dev/null 2>&1
rmdir ../../../v0.1.2 rmdir ../../../v0.0.9 >/dev/null 2>&1
rmdir ../../../v0.1.3 rmdir ../../../v0.0.20 >/dev/null 2>&1
rmdir ../../../v0.2.3 rmdir ../../../v0.1.2 >/dev/null 2>&1
rmdir ../../../v0.3.1 rmdir ../../../v0.1.3 >/dev/null 2>&1
rmdir ../../../v0.3.3 rmdir ../../../v0.2.3 >/dev/null 2>&1
rmdir ../../../v0.3.9 rmdir ../../../v0.3.1 >/dev/null 2>&1
unalias nvm_has_system_node rmdir ../../../v0.3.3 >/dev/null 2>&1
rmdir ../../../v0.3.9 >/dev/null 2>&1
rmdir ../../../versions >/dev/null 2>&1
unalias nvm_has_system_node >/dev/null 2>&1

View File

@@ -0,0 +1,31 @@
#!/bin/sh
die () { echo $@ ; cleanup ; exit 1; }
cleanup () {
rm -rf ../../v0.10.4
}
mkdir ../../v0.10.4
. ../../nvm.sh
nvm deactivate >/dev/null 2>&1
INSTALL_ERROR_MSG="$(nvm install v0.10.5 --copy-packages-from=0.11 2>&1)"
EXPECTED_ERROR_MSG="If --copy-packages-from is provided, it must point to an installed version of node."
[ "~$INSTALL_ERROR_MSG" = "~$EXPECTED_ERROR_MSG" ] \
|| die ""nvm install --copy-packages" should fail when given an uninstalled version: expected '$EXPECTED_ERROR_MSG', got '$INSTALL_ERROR_MSG'"
INSTALL_EXIT_CODE="$(nvm install v0.10.5 --copy-packages-from=0.11 >/dev/null 2>&1; echo $?)"
[ "~$INSTALL_EXIT_CODE" = "~5" ] \
|| die ""nvm install --copy-packages" should exit with code 5 when given an uninstalled version, got $INSTALL_EXIT_CODE"
INSTALL_ERROR_MSG="$(nvm install v0.10.5 --copy-packages-from=0.10.5 2>&1)"
EXPECTED_ERROR_MSG="You can't copy global packages from the same version of node you're installing."
[ "~$INSTALL_ERROR_MSG" = "~$EXPECTED_ERROR_MSG" ] \
|| die ""nvm install --copy-packages" should fail when given the same version: expected '$EXPECTED_ERROR_MSG', got '$INSTALL_ERROR_MSG'"
INSTALL_EXIT_CODE="$(nvm install v0.10.5 --copy-packages-from=0.10.5 >/dev/null 2>&1; echo $?)"
[ "~$INSTALL_EXIT_CODE" = "~4" ] \
|| die ""nvm install --copy-packages" should exit with code 4 when given the same version, got $INSTALL_EXIT_CODE"

View File

@@ -0,0 +1,83 @@
#!/bin/bash
. ../../nvm.sh
TEST_NODE_VERSION="v0.10.29"
TEST_COUNT=0
TEST_PASSED=0
TEST_FAILED=0
function registerExpectedSymlink() {
registerResult ${1}
}
function registerExpectedNoSymlink() {
[ ${1} -ne 0 ]
registerResult $?
}
function registerResult() {
result=${1}
TEST_COUNT=$(($TEST_COUNT + 1))
[ ${result} -eq 0 ] \
&& TEST_PASSED=$(($TEST_PASSED + 1)) \
|| TEST_FAILED=$(($TEST_FAILED + 1))
}
function cleanup() {
rm -rf ../../${TEST_NODE_VERSION}
rm -f ../../current
}
function runNvmUse() {
mkdir ../../${TEST_NODE_VERSION}
nvm use ${TEST_NODE_VERSION} > /dev/null 2>&1
rmdir ../../${TEST_NODE_VERSION}
}
function isCurrentSymlinkPresent() {
[ -L ../../current ]
}
NVM_SYMLINK_CURRENT=false
cleanup
runNvmUse
isCurrentSymlinkPresent && echo "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT=false!"
registerExpectedNoSymlink $?
NVM_SYMLINK_CURRENT=true
cleanup
runNvmUse
isCurrentSymlinkPresent || echo "Expected 'current' symlink to be created when NVM_SYMLINK_CURRENT=true!"
registerExpectedSymlink $?
NVM_SYMLINK_CURRENT=garbagevalue
cleanup
runNvmUse
isCurrentSymlinkPresent && echo "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT contains a string!"
registerExpectedNoSymlink $?
NVM_SYMLINK_CURRENT=0
cleanup
runNvmUse
isCurrentSymlinkPresent && echo "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT=0!"
registerExpectedNoSymlink $?
NVM_SYMLINK_CURRENT=1
cleanup
runNvmUse
isCurrentSymlinkPresent && echo "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT=1!"
registerExpectedNoSymlink $?
unset NVM_SYMLINK_CURRENT
cleanup
runNvmUse
isCurrentSymlinkPresent || echo "Expected 'current' symlink to be created when NVM_SYMLINK_CURRENT has been unset (default behaviour)!"
registerExpectedSymlink $?
cleanup
[ ${TEST_FAILED} -ne 0 ] && echo "${TEST_COUNT} tested, ${TEST_PASSED} passed, ${TEST_FAILED} failed" && exit 1 || true

View File

@@ -0,0 +1,18 @@
#!/bin/sh
cleanup () {
rm tmp/emptyfile tmp/testfile
rmdir tmp
}
die () { echo $@ ; cleanup; exit 1; }
. ../../../nvm.sh
mkdir -p tmp
touch tmp/emptyfile
echo -n "test" > tmp/testfile
nvm_checksum tmp/emptyfile "da39a3ee5e6b4b0d3255bfef95601890afd80709" || die "nvm_checksum on an empty file did not match the SHA1 digest of the empty string"
nvm_checksum tmp/testfile "da39a3ee5e6b4b0d3255bfef95601890afd80709" && die "nvm_checksum allowed a bad checksum"
cleanup

View File

@@ -0,0 +1,26 @@
#!/bin/sh
die () { echo $@ ; cleanup ; exit 1; }
setup() {
cleanup
mkdir -p tmp_nvm_find_up/a/b/c/d
touch tmp_nvm_find_up/test
touch tmp_nvm_find_up/a/b/c/test
}
cleanup () {
rm -rf tmp_nvm_find_up
}
. ../../../nvm.sh
setup
TEST_DIR="$PWD"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up" ] || die "failed to find 1 dir up"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up" ] || die "failed to find 2 dirs up"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find in current dir"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c/d nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find 1 level up from current dir"
cleanup

View File

@@ -0,0 +1,14 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
OUTPUT="$(nvm_format_version 0.1.2)"
EXPECTED_OUTPUT="v0.1.2"
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_format_version 0.1.2 did not return $EXPECTED_OUTPUT; got $OUTPUT"
OUTPUT="$(nvm_format_version 0.1)"
EXPECTED_OUTPUT="v0.1.0"
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_format_version 0.1.0 did not return $EXPECTED_OUTPUT; got $OUTPUT"

12
test/fast/Unit tests/nvm_has Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
nvm_has cat && type cat > /dev/null || die 'nvm_has locates "cat" properly'
[ "~$(nvm_has foobarbaz 2>&1)" = "~" ] || die "nvm_has does not suppress error output"
! nvm_has foobarbaz && ! type foobarbaz >/dev/null 2>&1 || die "nvm_has does not return a nonzero exit code when not found"

View File

@@ -0,0 +1,28 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
return_zero () { return 0; }
[ "$(nvm deactivate > /dev/null 2>&1 ; nvm_ls_current)" = "system" ] || die 'when deactivated, did not return "system"'
TEST_PWD=$(pwd)
TEST_DIR="$TEST_PWD/nvm_ls_current_tmp"
rm -rf "$TEST_DIR"
mkdir "$TEST_DIR"
ln -s "$(which which)" "$TEST_DIR/which"
ln -s "$(which dirname)" "$TEST_DIR/dirname"
[ "$(PATH="$TEST_DIR" nvm_ls_current)" = "none" ] || die 'when node not installed, nvm_ls_current did not return "none"'
[ "@$(PATH="$TEST_DIR" nvm_ls_current 2> /dev/stdout 1> /dev/null)@" = "@@" ] || die 'when node not installed, nvm_ls_current returned error output'
echo "#!/bin/bash" > "$TEST_DIR/node"
echo "echo 'VERSION FOO!'" > "$TEST_DIR/node"
chmod a+x "$TEST_DIR/node"
[ "$(alias nvm_tree_contains_path='return_zero' && PATH="$TEST_DIR" nvm_ls_current)" = "VERSION FOO!" ] || die 'when activated, did not return nvm node version'
rm -rf "$TEST_DIR"

View File

@@ -0,0 +1,468 @@
#!/bin/sh
die () { echo $@ ; cleanup ; exit 1; }
cleanup() {
unset -f nvm_download
}
. ../../../nvm.sh
# sample output at the time the test was written
nvm_download() {
echo 'foo "v0.10.0'
echo 'foo "v0.10.0'
echo 'foo "v0.10.1'
echo 'foo "v0.10.1'
echo 'foo "v0.10.10'
echo 'foo "v0.10.10'
echo 'foo "v0.10.11'
echo 'foo "v0.10.11'
echo 'foo "v0.10.12'
echo 'foo "v0.10.12'
echo 'foo "v0.10.13'
echo 'foo "v0.10.13'
echo 'foo "v0.10.14'
echo 'foo "v0.10.14'
echo 'foo "v0.10.15'
echo 'foo "v0.10.15'
echo 'foo "v0.10.16'
echo 'foo "v0.10.16'
echo 'foo "v0.10.16'
echo 'foo "v0.10.16'
echo 'foo "v0.10.17'
echo 'foo "v0.10.17'
echo 'foo "v0.10.18'
echo 'foo "v0.10.18'
echo 'foo "v0.10.19'
echo 'foo "v0.10.19'
echo 'foo "v0.10.2'
echo 'foo "v0.10.2'
echo 'foo "v0.10.20'
echo 'foo "v0.10.20'
echo 'foo "v0.10.21'
echo 'foo "v0.10.21'
echo 'foo "v0.10.22'
echo 'foo "v0.10.22'
echo 'foo "v0.10.23'
echo 'foo "v0.10.23'
echo 'foo "v0.10.24'
echo 'foo "v0.10.24'
echo 'foo "v0.10.25'
echo 'foo "v0.10.25'
echo 'foo "v0.10.26'
echo 'foo "v0.10.26'
echo 'foo "v0.10.27'
echo 'foo "v0.10.27'
echo 'foo "v0.10.28'
echo 'foo "v0.10.28'
echo 'foo "v0.10.29'
echo 'foo "v0.10.29'
echo 'foo "v0.10.3'
echo 'foo "v0.10.3'
echo 'foo "v0.10.30'
echo 'foo "v0.10.30'
echo 'foo "v0.10.31'
echo 'foo "v0.10.31'
echo 'foo "v0.10.32'
echo 'foo "v0.10.32'
echo 'foo "v0.10.4'
echo 'foo "v0.10.4'
echo 'foo "v0.10.5'
echo 'foo "v0.10.5'
echo 'foo "v0.10.6'
echo 'foo "v0.10.6'
echo 'foo "v0.10.7'
echo 'foo "v0.10.7'
echo 'foo "v0.10.8'
echo 'foo "v0.10.8'
echo 'foo "v0.10.9'
echo 'foo "v0.10.9'
echo 'foo "v0.11.0'
echo 'foo "v0.11.0'
echo 'foo "v0.11.1'
echo 'foo "v0.11.1'
echo 'foo "v0.11.10'
echo 'foo "v0.11.10'
echo 'foo "v0.11.11'
echo 'foo "v0.11.11'
echo 'foo "v0.11.12'
echo 'foo "v0.11.12'
echo 'foo "v0.11.13'
echo 'foo "v0.11.13'
echo 'foo "v0.11.14'
echo 'foo "v0.11.14'
echo 'foo "v0.11.2'
echo 'foo "v0.11.2'
echo 'foo "v0.11.3'
echo 'foo "v0.11.3'
echo 'foo "v0.11.4'
echo 'foo "v0.11.4'
echo 'foo "v0.11.5'
echo 'foo "v0.11.5'
echo 'foo "v0.11.6'
echo 'foo "v0.11.6'
echo 'foo "v0.11.7'
echo 'foo "v0.11.7'
echo 'foo "v0.11.8'
echo 'foo "v0.11.8'
echo 'foo "v0.11.9'
echo 'foo "v0.11.9'
echo 'foo "v0.5.1'
echo 'foo "v0.5.1'
echo 'foo "v0.5.10'
echo 'foo "v0.5.10'
echo 'foo "v0.5.2'
echo 'foo "v0.5.2'
echo 'foo "v0.5.3'
echo 'foo "v0.5.3'
echo 'foo "v0.5.4'
echo 'foo "v0.5.4'
echo 'foo "v0.5.5'
echo 'foo "v0.5.5'
echo 'foo "v0.5.6'
echo 'foo "v0.5.6'
echo 'foo "v0.5.7'
echo 'foo "v0.5.7'
echo 'foo "v0.5.8'
echo 'foo "v0.5.8'
echo 'foo "v0.5.9'
echo 'foo "v0.5.9'
echo 'foo "v0.6.0'
echo 'foo "v0.6.0'
echo 'foo "v0.6.1'
echo 'foo "v0.6.1'
echo 'foo "v0.6.10'
echo 'foo "v0.6.10'
echo 'foo "v0.6.11'
echo 'foo "v0.6.11'
echo 'foo "v0.6.12'
echo 'foo "v0.6.12'
echo 'foo "v0.6.13'
echo 'foo "v0.6.13'
echo 'foo "v0.6.14'
echo 'foo "v0.6.14'
echo 'foo "v0.6.15'
echo 'foo "v0.6.15'
echo 'foo "v0.6.16'
echo 'foo "v0.6.16'
echo 'foo "v0.6.17'
echo 'foo "v0.6.17'
echo 'foo "v0.6.18'
echo 'foo "v0.6.18'
echo 'foo "v0.6.19'
echo 'foo "v0.6.19'
echo 'foo "v0.6.2'
echo 'foo "v0.6.2'
echo 'foo "v0.6.20'
echo 'foo "v0.6.20'
echo 'foo "v0.6.21'
echo 'foo "v0.6.21'
echo 'foo "v0.6.3'
echo 'foo "v0.6.3'
echo 'foo "v0.6.4'
echo 'foo "v0.6.4'
echo 'foo "v0.6.5'
echo 'foo "v0.6.5'
echo 'foo "v0.6.6'
echo 'foo "v0.6.6'
echo 'foo "v0.6.7'
echo 'foo "v0.6.7'
echo 'foo "v0.6.8'
echo 'foo "v0.6.8'
echo 'foo "v0.6.9'
echo 'foo "v0.6.9'
echo 'foo "v0.7.0'
echo 'foo "v0.7.0'
echo 'foo "v0.7.1'
echo 'foo "v0.7.1'
echo 'foo "v0.7.10'
echo 'foo "v0.7.10'
echo 'foo "v0.7.11'
echo 'foo "v0.7.11'
echo 'foo "v0.7.12'
echo 'foo "v0.7.12'
echo 'foo "v0.7.2'
echo 'foo "v0.7.2'
echo 'foo "v0.7.3'
echo 'foo "v0.7.3'
echo 'foo "v0.7.4'
echo 'foo "v0.7.4'
echo 'foo "v0.7.5'
echo 'foo "v0.7.5'
echo 'foo "v0.7.6'
echo 'foo "v0.7.6'
echo 'foo "v0.7.7'
echo 'foo "v0.7.7'
echo 'foo "v0.7.8'
echo 'foo "v0.7.8'
echo 'foo "v0.7.9'
echo 'foo "v0.7.9'
echo 'foo "v0.8.0'
echo 'foo "v0.8.0'
echo 'foo "v0.8.1'
echo 'foo "v0.8.1'
echo 'foo "v0.8.10'
echo 'foo "v0.8.10'
echo 'foo "v0.8.11'
echo 'foo "v0.8.11'
echo 'foo "v0.8.12'
echo 'foo "v0.8.12'
echo 'foo "v0.8.13'
echo 'foo "v0.8.13'
echo 'foo "v0.8.14'
echo 'foo "v0.8.14'
echo 'foo "v0.8.15'
echo 'foo "v0.8.15'
echo 'foo "v0.8.16'
echo 'foo "v0.8.16'
echo 'foo "v0.8.17'
echo 'foo "v0.8.17'
echo 'foo "v0.8.18'
echo 'foo "v0.8.18'
echo 'foo "v0.8.19'
echo 'foo "v0.8.19'
echo 'foo "v0.8.2'
echo 'foo "v0.8.2'
echo 'foo "v0.8.20'
echo 'foo "v0.8.20'
echo 'foo "v0.8.21'
echo 'foo "v0.8.21'
echo 'foo "v0.8.22'
echo 'foo "v0.8.22'
echo 'foo "v0.8.23'
echo 'foo "v0.8.23'
echo 'foo "v0.8.24'
echo 'foo "v0.8.24'
echo 'foo "v0.8.25'
echo 'foo "v0.8.25'
echo 'foo "v0.8.26'
echo 'foo "v0.8.26'
echo 'foo "v0.8.27'
echo 'foo "v0.8.27'
echo 'foo "v0.8.28'
echo 'foo "v0.8.28'
echo 'foo "v0.8.3'
echo 'foo "v0.8.3'
echo 'foo "v0.8.4'
echo 'foo "v0.8.4'
echo 'foo "v0.8.5'
echo 'foo "v0.8.5'
echo 'foo "v0.8.6'
echo 'foo "v0.8.6'
echo 'foo "v0.8.7'
echo 'foo "v0.8.7'
echo 'foo "v0.8.8'
echo 'foo "v0.8.8'
echo 'foo "v0.8.9'
echo 'foo "v0.8.9'
echo 'foo "v0.9.0'
echo 'foo "v0.9.0'
echo 'foo "v0.9.1'
echo 'foo "v0.9.1'
echo 'foo "v0.9.10'
echo 'foo "v0.9.10'
echo 'foo "v0.9.11'
echo 'foo "v0.9.11'
echo 'foo "v0.9.12'
echo 'foo "v0.9.12'
echo 'foo "v0.9.2'
echo 'foo "v0.9.2'
echo 'foo "v0.9.3'
echo 'foo "v0.9.3'
echo 'foo "v0.9.4'
echo 'foo "v0.9.4'
echo 'foo "v0.9.5'
echo 'foo "v0.9.5'
echo 'foo "v0.9.6'
echo 'foo "v0.9.6'
echo 'foo "v0.9.7'
echo 'foo "v0.9.7'
echo 'foo "v0.9.8'
echo 'foo "v0.9.8'
echo 'foo "v0.9.9'
echo 'foo "v0.9.9'
echo 'foo "v0.1.100'
echo 'foo "v0.1.100'
echo 'foo "v0.1.101'
echo 'foo "v0.1.101'
echo 'foo "v0.1.102'
echo 'foo "v0.1.102'
echo 'foo "v0.1.103'
echo 'foo "v0.1.103'
echo 'foo "v0.1.104'
echo 'foo "v0.1.104'
echo 'foo "v0.1.14'
echo 'foo "v0.1.14'
echo 'foo "v0.1.15'
echo 'foo "v0.1.15'
echo 'foo "v0.1.16'
echo 'foo "v0.1.16'
echo 'foo "v0.1.17'
echo 'foo "v0.1.17'
echo 'foo "v0.1.18'
echo 'foo "v0.1.18'
echo 'foo "v0.1.19'
echo 'foo "v0.1.19'
echo 'foo "v0.1.20'
echo 'foo "v0.1.20'
echo 'foo "v0.1.21'
echo 'foo "v0.1.21'
echo 'foo "v0.1.22'
echo 'foo "v0.1.22'
echo 'foo "v0.1.23'
echo 'foo "v0.1.23'
echo 'foo "v0.1.24'
echo 'foo "v0.1.24'
echo 'foo "v0.1.25'
echo 'foo "v0.1.25'
echo 'foo "v0.1.26'
echo 'foo "v0.1.26'
echo 'foo "v0.1.27'
echo 'foo "v0.1.27'
echo 'foo "v0.1.28'
echo 'foo "v0.1.28'
echo 'foo "v0.1.29'
echo 'foo "v0.1.29'
echo 'foo "v0.1.30'
echo 'foo "v0.1.30'
echo 'foo "v0.1.31'
echo 'foo "v0.1.31'
echo 'foo "v0.1.32'
echo 'foo "v0.1.32'
echo 'foo "v0.1.33'
echo 'foo "v0.1.33'
echo 'foo "v0.1.90'
echo 'foo "v0.1.90'
echo 'foo "v0.1.91'
echo 'foo "v0.1.91'
echo 'foo "v0.1.92'
echo 'foo "v0.1.92'
echo 'foo "v0.1.93'
echo 'foo "v0.1.93'
echo 'foo "v0.1.94'
echo 'foo "v0.1.94'
echo 'foo "v0.1.95'
echo 'foo "v0.1.95'
echo 'foo "v0.1.96'
echo 'foo "v0.1.96'
echo 'foo "v0.1.97'
echo 'foo "v0.1.97'
echo 'foo "v0.1.98'
echo 'foo "v0.1.98'
echo 'foo "v0.1.99'
echo 'foo "v0.1.99'
echo 'foo "v0.10.14'
echo 'foo "v0.10.14'
echo 'foo "v0.2.0'
echo 'foo "v0.2.0'
echo 'foo "v0.2.1'
echo 'foo "v0.2.1'
echo 'foo "v0.2.2'
echo 'foo "v0.2.2'
echo 'foo "v0.2.3'
echo 'foo "v0.2.3'
echo 'foo "v0.2.4'
echo 'foo "v0.2.4'
echo 'foo "v0.2.5'
echo 'foo "v0.2.5'
echo 'foo "v0.2.6'
echo 'foo "v0.2.6'
echo 'foo "v0.3.0'
echo 'foo "v0.3.0'
echo 'foo "v0.3.1'
echo 'foo "v0.3.1'
echo 'foo "v0.3.2'
echo 'foo "v0.3.2'
echo 'foo "v0.3.3'
echo 'foo "v0.3.3'
echo 'foo "v0.3.4'
echo 'foo "v0.3.4'
echo 'foo "v0.3.5'
echo 'foo "v0.3.5'
echo 'foo "v0.3.6'
echo 'foo "v0.3.6'
echo 'foo "v0.3.7'
echo 'foo "v0.3.7'
echo 'foo "v0.3.8'
echo 'foo "v0.3.8'
echo 'foo "v0.4.0'
echo 'foo "v0.4.0'
echo 'foo "v0.4.1'
echo 'foo "v0.4.1'
echo 'foo "v0.4.10'
echo 'foo "v0.4.10'
echo 'foo "v0.4.11'
echo 'foo "v0.4.11'
echo 'foo "v0.4.12'
echo 'foo "v0.4.12'
echo 'foo "v0.4.2'
echo 'foo "v0.4.2'
echo 'foo "v0.4.3'
echo 'foo "v0.4.3'
echo 'foo "v0.4.4'
echo 'foo "v0.4.4'
echo 'foo "v0.4.5'
echo 'foo "v0.4.5'
echo 'foo "v0.4.6'
echo 'foo "v0.4.6'
echo 'foo "v0.4.7'
echo 'foo "v0.4.7'
echo 'foo "v0.4.8'
echo 'foo "v0.4.8'
echo 'foo "v0.4.9'
echo 'foo "v0.4.9'
echo 'foo "v0.5.0'
echo 'foo "v0.5.0'
echo 'foo "v0.6.1'
echo 'foo "v0.6.1'
echo 'foo "v0.6.10'
echo 'foo "v0.6.10'
echo 'foo "v0.6.11'
echo 'foo "v0.6.11'
echo 'foo "v0.6.12'
echo 'foo "v0.6.12'
echo 'foo "v0.6.13'
echo 'foo "v0.6.13'
echo 'foo "v0.6.2'
echo 'foo "v0.6.2'
echo 'foo "v0.6.3'
echo 'foo "v0.6.3'
echo 'foo "v0.6.4'
echo 'foo "v0.6.4'
echo 'foo "v0.6.5'
echo 'foo "v0.6.5'
echo 'foo "v0.6.6'
echo 'foo "v0.6.6'
echo 'foo "v0.6.7'
echo 'foo "v0.6.7'
echo 'foo "v0.6.8'
echo 'foo "v0.6.8'
echo 'foo "v0.6.9'
echo 'foo "v0.6.9'
}
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")"
OUTPUT="$(nvm_ls_remote 0.3)"
EXPECTED_OUTPUT="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"
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote 0.3 did not output 0.3.x versions; got $OUTPUT"
cleanup

View File

@@ -0,0 +1,21 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
[ "~$(nvm_num_version_groups)" = "~0" ] || die "no args should give 0"
[ "~$(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 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 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 1.2.3)" = "~3" ] || die "1.2.3 should give 3"
[ "~$(nvm_num_version_groups v1.2.3)" = "~3" ] || die "v1.2.3 should give 3"
[ "~$(nvm_num_version_groups v1.2.3.)" = "~3" ] || die "v1.2.3. should give 3"

View File

@@ -0,0 +1,35 @@
#!/bin/sh
die () { echo $@ ; cleanup ; exit 1; }
cleanup() {
unset -f nvm_ls_remote
}
. ../../../nvm.sh
nvm_ls_remote() {
echo "N/A"
}
OUTPUT="$(nvm_remote_version foo)"
EXIT_CODE="$(nvm_remote_version 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"
nvm_ls_remote() {
echo "test output"
echo "more test output"
echo "pattern received: _$1_"
}
OUTPUT="$(nvm_remote_version foo)"
EXIT_CODE="$(nvm_remote_version foo >/dev/null 2>&1 ; echo $?)"
[ "_$OUTPUT" = "_pattern received: _foo_" ] \
|| die "nvm_remote_version foo did not return last line only of nvm_ls_remote foo; got $OUTPUT"
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version foo did not exit with 0, got $EXIT_CODE"
cleanup

View File

@@ -11,9 +11,14 @@ die () { echo $@ ; cleanup; exit 1; }
. ../../../nvm.sh . ../../../nvm.sh
mkdir -p tmp mkdir -p tmp
touch -p tmp/node touch tmp/node
mkdir -p tmp2 mkdir -p tmp2
touch -p tmp2/node touch tmp2/node
[ "$(nvm_tree_contains_path 2>&1)" = "both the tree and the node path are required" ] || die 'incorrect error message with no args'
[ "$(nvm_tree_contains_path > /dev/null 2>&1 ; echo $?)" = "2" ] || die 'incorrect error code with no args'
[ "$(nvm_tree_contains_path tmp 2>&1)" = "both the tree and the node path are required" ] || die 'incorrect error message with one arg'
[ "$(nvm_tree_contains_path > /dev/null 2>&1 ; echo $?)" = "2" ] || die 'incorrect error code with one arg'
nvm_tree_contains_path tmp tmp/node || die '"tmp" should contain "tmp/node"' nvm_tree_contains_path tmp tmp/node || die '"tmp" should contain "tmp/node"'

View File

@@ -0,0 +1,11 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
[ "$(nvm_version_dir)" = "$NVM_DIR/versions" ] || die '"nvm_version_dir" did not return new dir path'
[ "$(nvm_version_dir new)" = "$(nvm_version_dir)" ] || die '"nvm_version_dir new" did not return new dir path'
[ "$(nvm_version_dir old)" = "$NVM_DIR" ] || die '"nvm_version_dir old" did not return old dir path'
[ "$(nvm_version_dir foo 2>&1)" = "unknown version dir" ] || die '"nvm_version_dir foo" did not error out'

View File

@@ -0,0 +1,16 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
nvm_version_greater 0.10.0 0.2.12 || die '"nvm_version_greater 0.10.0 0.2.12" did not return true'
if nvm_version_greater 0.10.0 0.20.12; then
die '"nvm_version_greater 0.10.0 0.20.12" returned true'
fi
if nvm_version_greater 0.10.0 0.10.0; then
die '"nvm_version_greater" returned false for the same two versions'
fi

View File

@@ -0,0 +1,11 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
[ "$(nvm_version_path foo)" = "$NVM_DIR/foo" ] || die '"nvm_version_path foo" did not return correct location'
[ "$(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/v0.12.0" ] || die 'new version has the wrong path'

View File

@@ -9,5 +9,8 @@
for SRC in v* src alias; do for SRC in v* src alias; do
[ -e "$SRC" ] && mv "$SRC" bak [ -e "$SRC" ] && mv "$SRC" bak
done done
if [ -d versions ]; then
mv versions bak
fi
true true
) )

View File

@@ -2,13 +2,13 @@
die () { echo $@ ; exit 1; } die () { echo $@ ; exit 1; }
. ../../../nvm.sh . ../../nvm.sh
[ "$(nvm install invalid.invalid 2>&1)" = "Version 'invalid.invalid' not found - try \`nvm ls-remote\` to browse available versions." ] || die "nvm installing an invalid version did not print a nice error message" [ "$(nvm install invalid.invalid 2>&1)" = "Version 'invalid.invalid' not found - try \`nvm ls-remote\` to browse available versions." ] || die "nvm installing an invalid version did not print a nice error message"
# Remove the stuff we're clobbering. # Remove the stuff we're clobbering.
[ -e ../../../v0.9.7 ] && rm -R ../../../v0.9.7 [ -e ../../v0.9.7 ] && rm -R ../../v0.9.7
[ -e ../../../v0.9.12 ] && rm -R ../../../v0.9.12 [ -e ../../v0.9.12 ] && rm -R ../../v0.9.12
# Install from binary # Install from binary
nvm install 0.9.7 nvm install 0.9.7

View File

@@ -1,17 +1,17 @@
#!/bin/sh #!/bin/sh
set -e set -e
. ../../../nvm.sh . ../../nvm.sh
NVM_TEST_VERSION=v0.10.7 NVM_TEST_VERSION=v0.10.7
# Remove the stuff we're clobbering. # Remove the stuff we're clobbering.
[ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION [ -e ../../$NVM_TEST_VERSION ] && rm -R ../../$NVM_TEST_VERSION
# Install from binary # Install from binary
nvm install $NVM_TEST_VERSION nvm install $NVM_TEST_VERSION
# Check # Check
[ -d ../../../$NVM_TEST_VERSION ] [ -d ../../$NVM_TEST_VERSION ]
nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION

View File

@@ -1,17 +1,17 @@
#!/bin/sh #!/bin/sh
set -e set -e
. ../../../nvm.sh . ../../nvm.sh
NVM_TEST_VERSION=v0.10.7 NVM_TEST_VERSION=v0.10.7
# Remove the stuff we're clobbering. # Remove the stuff we're clobbering.
[ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION [ -e ../../$NVM_TEST_VERSION ] && rm -R ../../$NVM_TEST_VERSION
# Install from source # Install from source
nvm install -s $NVM_TEST_VERSION nvm install -s $NVM_TEST_VERSION
# Check # Check
[ -d ../../../$NVM_TEST_VERSION ] [ -d ../../$NVM_TEST_VERSION ]
nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION

View File

@@ -1,19 +1,19 @@
#!/bin/sh #!/bin/sh
set -e set -e
. ../../../nvm.sh . ../../nvm.sh
# Remove the stuff we're clobbering. # Remove the stuff we're clobbering.
[ -e ../../../v0.9.7 ] && rm -R ../../../v0.9.7 [ -e ../../v0.9.7 ] && rm -R ../../v0.9.7
[ -e ../../../v0.9.12 ] && rm -R ../../../v0.9.12 [ -e ../../v0.9.12 ] && rm -R ../../v0.9.12
# Install from binary # Install from binary
nvm install 0.9.7 nvm install 0.9.7
nvm i 0.9.12 nvm i 0.9.12
# Check # Check
[ -d ../../../v0.9.7 ] [ -d ../../v0.9.7 ]
[ -d ../../../v0.9.12 ] [ -d ../../v0.9.12 ]
# Use the first one # Use the first one
nvm use 0.9.7 nvm use 0.9.7

View File

@@ -1,20 +1,20 @@
#!/bin/sh #!/bin/sh
set -e set -e
. ../../../nvm.sh . ../../nvm.sh
NVM_TEST_VERSION=v0.10.7 NVM_TEST_VERSION=v0.10.7
# Remove the stuff we're clobbering. # Remove the stuff we're clobbering.
[ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION [ -e ../../$NVM_TEST_VERSION ] && rm -R ../../$NVM_TEST_VERSION
# Install from binary # Install from binary
cat "$NVM_TEST_VERSION" > .nvmrc echo "$NVM_TEST_VERSION" > .nvmrc
nvm install nvm install
# Check # Check
[ -d ../../../$NVM_TEST_VERSION ] [ -d ../../$NVM_TEST_VERSION ]
nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION

View File

@@ -1,20 +1,20 @@
#!/bin/sh #!/bin/sh
set -e set -e
. ../../../nvm.sh . ../../nvm.sh
NVM_TEST_VERSION=v0.10.7 NVM_TEST_VERSION=v0.10.7
# Remove the stuff we're clobbering. # Remove the stuff we're clobbering.
[ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION [ -e ../../$NVM_TEST_VERSION ] && rm -R ../../$NVM_TEST_VERSION
# Install from binary # Install from binary
cat "$NVM_TEST_VERSION" > .nvmrc echo "$NVM_TEST_VERSION" > .nvmrc
nvm install -s nvm install -s
# Check # Check
[ -d ../../../$NVM_TEST_VERSION ] [ -d ../../$NVM_TEST_VERSION ]
nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION

View File

@@ -0,0 +1,34 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../nvm.sh
# Remove the stuff we're clobbering.
[ -e ../../v0.9.7 ] && rm -R ../../v0.9.7
[ -e ../../v0.9.12 ] && rm -R ../../v0.9.12
# Install from binary
nvm install 0.9.7
# Check
[ -d ../../v0.9.7 ] || die "nvm install 0.9.7 didn't install"
nvm use 0.9.7
node --version | grep v0.9.7 > /dev/null || die "nvm use 0.9.7 failed"
npm install -g is-nan@1.0.1 || die "npm install -g is-nan failed"
npm list --global | grep is-nan > /dev/null || die "is-nan isn't installed"
nvm ls 0.9 | grep v0.9.7 > /dev/null || die "nvm ls 0.9 didn't show v0.9.7"
nvm install 0.9.12 --copy-packages-from=0.9 || die "nvm install 0.9.12 --copy-packages-from=0.9 failed"
[ -d ../../v0.9.12 ] || die "nvm install 0.9.12 didn't install"
nvm use 0.9
node --version | grep v0.9.12 > /dev/null || die "nvm ls 0.9 didn't use v0.9.12"
npm list --global | grep is-nan > /dev/null || die "is-nan isn't installed"

View File

@@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
. ../../../nvm.sh . ../../nvm.sh
nvm uninstall v0.10.7 nvm uninstall v0.10.7
if [ -f ".nvmrc" ]; then if [ -f ".nvmrc" ]; then

View File

@@ -8,3 +8,7 @@ nvm install 0.10
[ "$(nvm current)" = "$(node -v)" ] || die "Failed to find current version: got \"$(nvm current)\", expected \"$(node -v)\"" [ "$(nvm current)" = "$(node -v)" ] || die "Failed to find current version: got \"$(nvm current)\", expected \"$(node -v)\""
nvm install 0.6.21
[ "$(node -v)" = "v0.6.21-pre" ] || die "v0.6.21-pre not installed with v0.6.21"
[ "$(nvm current)" = "v0.6.21" ] || die "v0.6.21-pre not reported as v0.6.21"

View File

@@ -0,0 +1,16 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
nvm use 0.10.28 > /dev/null
EXPECTED_MSG="Can not copy packages from the current version of node."
ACTUAL_MSG="$(nvm copy-packages 0.10.28 2>&1 > /dev/null)"
[ "~$ACTUAL_MSG" = "~$EXPECTED_MSG" ] || die "'nvm use 0.10.28 && nvm copy-packages 0.10.28' did not fail with the right message: '$ACTUAL_MESSAGE'"
EXPECTED_ERROR_CODE="2"
ACTUAL_ERROR_CODE="$(nvm copy-packages 0.10.28 > /dev/null 2>&1 ; echo $?)"
[ "~$ACTUAL_ERROR_CODE" = "~$EXPECTED_ERROR_CODE" ] || die "'nvm use 0.10.28 && nvm copy-packages 0.10.28' did not fail with the right error code: expected '$EXPECTED_ERROR_CODE', got '$ACTUAL_ERROR_CODE'"

View File

@@ -0,0 +1,10 @@
#!/bin/sh
. ../../../nvm.sh
nvm install 0.10.28
nvm install 0.10.29
if [ -f ".nvmrc" ]; then
mv .nvmrc .nvmrc.bak
fi

View File

@@ -0,0 +1,21 @@
#!/bin/sh
die () { echo "$@" ; exit 1; }
. ../../../nvm.sh
nvm use 0.10.28
EXPECTED_PACKAGES="autoprefixer bower david eslint grunt-cli grunth-cli http-server jshint marked node-gyp recursive-blame uglify-js yo"
echo "$EXPECTED_PACKAGES" | xargs npm install -g --quiet
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)
nvm copy-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" = "$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)"

View File

@@ -0,0 +1,12 @@
#!/bin/sh
. ../../../nvm.sh
nvm uninstall v0.10.28
nvm uninstall v0.10.29
rm -f .nvmrc
if [ -f ".nvmrc.bak" ]; then
mv .nvmrc.bak .nvmrc
fi

View File

@@ -0,0 +1,13 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
nvm use 0.10
NPM_VERSION_TEN="$(npm --version)"
nvm use 0.11.7 && [ "$(node --version)" = "v0.11.7" ] || 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"

View File

@@ -0,0 +1,17 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../../nvm.sh
nvm use 0.10.7
NPM_VERSION_TEN="$(npm --version)"
nvm use 0.11.7 && [ "$(node --version)" = "v0.11.7" ] || die "\`nvm use\` failed!"
echo "0.10.7" > .nvmrc
[ "$(nvm exec npm --version | tail -1)" = "$NPM_VERSION_TEN" ] || die "\`nvm exec\` failed to run with the .nvmrc version"
[ "$(nvm exec npm --version | head -1)" = "Found '$PWD/.nvmrc' with version <0.10.7>" ] || die "\`nvm exec\` failed to print out the \"found in .nvmrc\" message"

10
test/slow/nvm exec/setup_dir Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
. ../../../nvm.sh
nvm install 0.10.7
nvm install 0.11.7
if [ -f ".nvmrc" ]; then
mv .nvmrc .nvmrc.bak
fi

12
test/slow/nvm exec/teardown_dir Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/sh
. ../../../nvm.sh
nvm uninstall v0.10.7
nvm uninstall v0.11.7
rm .nvmrc
if [ -f ".nvmrc.bak" ]; then
mv .nvmrc.bak .nvmrc
fi