Compare commits

..

4 Commits

Author SHA1 Message Date
Jordan Harband
e2f0b5b57c wip 2024-06-10 15:29:48 -07:00
Jordan Harband
207465dd36 wip 2024-06-10 15:16:40 -07:00
Jordan Harband
c30ed0b1d3 [Tests] use a better JSON parsing implementation 2024-06-10 11:33:12 -07:00
Jordan Harband
0e74b147d6 [Tests] ensure travis can access public repo submodules 2024-06-10 09:15:16 -07:00
38 changed files with 267 additions and 991 deletions

View File

@@ -8,7 +8,6 @@ test/bak
.urchin.log .urchin.log
.urchin_stdout .urchin_stdout
test/**/test_output test/**/test_output
test/**/.nvmrc
node_modules/ node_modules/
npm-debug.log npm-debug.log

View File

@@ -1,104 +0,0 @@
name: 'Tests: nvm install with set -e'
on:
pull_request:
push:
workflow_dispatch:
inputs:
ref:
description: 'git ref to use'
required: false
default: 'HEAD'
jobs:
matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: matrix
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ] && [ -n "${{ github.event.inputs.ref }}" ]; then
echo "matrix=\"[\"${{ github.event.inputs.ref }}\"]\"" >> $GITHUB_OUTPUT
else
TAGS="$((echo "HEAD" && git tag --sort=-v:refname --merged HEAD --format='%(refname:strip=2) %(creatordate:short)' | grep '^v' | while read tag date; do
if [ "$(uname)" == "Darwin" ]; then
timestamp=$(date -j -f "%Y-%m-%d" "$date" +%s)
threshold=$(date -j -v-4y +%s)
else
timestamp=$(date -d "$date" +%s)
threshold=$(date -d "4 years ago" +%s)
fi
if [ $timestamp -ge $threshold ]; then echo "$tag"; fi
done) | xargs)"
echo $TAGS
TAGS_JSON=$(printf "%s\n" $TAGS | jq -R . | jq -sc .)
echo "matrix=${TAGS_JSON}" >> $GITHUB_OUTPUT
fi
test:
needs: [matrix]
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.ref == 'v0.40.0' }} # https://github.com/nvm-sh/nvm/issues/3405
strategy:
fail-fast: false
matrix:
ref: ${{ fromJson(needs.matrix.outputs.matrix) }}
has-nvmrc:
- 'no nvmrc'
- 'nvmrc'
shell-level:
- 1 shlvl
- 2 shlvls
steps:
- uses: actions/checkout@v4
- name: resolve HEAD to sha
run: |
if [ '${{ matrix.ref }}' = 'HEAD' ]; then
REF="$(git rev-parse HEAD)"
else
REF="${{ matrix.ref }}"
fi
echo "resolved ref: ${REF}"
echo "ref="$REF"" >> $GITHUB_ENV
- run: echo $- # which options are set
- run: echo node > .nvmrc
if: ${{ matrix.has-nvmrc == 'nvmrc' }}
- run: curl -I --compressed -v https://nodejs.org/dist/
- name: 'install nvm'
run: |
set -e
export NVM_INSTALL_VERSION="${ref}"
curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${ref}/install.sh" | bash
- name: nvm --version
run: |
set +e
. $NVM_DIR/nvm.sh && nvm --version
- name: nvm install in 1 shell level, ${{ matrix.has-nvmrc }}
if: ${{ matrix.shell-level == '1 shlvl' }}
run: |
set -ex
. $NVM_DIR/nvm.sh
echo nvm.sh sourced
nvm --version
if [ '${{ matrix.has-nvmrc }}' == 'nvmrc' ]; then
nvm install
fi
- name: nvm install in 2 shell levels, ${{ matrix.has-nvmrc }}
if: ${{ matrix.shell-level == '2 shlvls' }}
run: |
if [ '${{ matrix.has-nvmrc }}' == 'nvmrc' ]; then
bash -c "set -ex && . $NVM_DIR/nvm.sh && echo nvm.sh sourced && nvm --version && nvm install"
else
bash -c "set -ex && . $NVM_DIR/nvm.sh && echo nvm.sh sourced && nvm --version"
fi
finisher:
runs-on: ubuntu-latest
needs: [test]
steps:
- run: true

View File

@@ -19,24 +19,13 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
exclude: include:
- shell: sh - shell: bash
suite: install_script suite: install_script
- shell: dash # shell:
suite: install_script # - bash
- shell: zsh # suite:
suite: install_script # - install_script
- shell: ksh
suite: install_script
suite:
- install_script
- sourcing
shell:
- sh
- bash
- dash
- zsh
# - ksh
steps: steps:
- name: Harden Runner - name: Harden Runner
@@ -48,23 +37,17 @@ jobs:
raw.githubusercontent.com:443 raw.githubusercontent.com:443
nodejs.org:443 nodejs.org:443
iojs.org:443 iojs.org:443
azure.archive.ubuntu.com:80
packages.microsoft.com:443
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- run: sudo apt-get update; sudo apt-get install ${{ matrix.shell }}
if: matrix.shell == 'zsh' || matrix.shell == 'ksh'
# zsh (https://github.com/actions/runner-images/issues/264) and ksh are not in the ubuntu image
shell: bash
- run: sudo ${{ matrix.shell }} --version 2> /dev/null || dpkg -s ${{ matrix.shell }} 2> /dev/null || which ${{ matrix.shell }} - run: sudo ${{ matrix.shell }} --version 2> /dev/null || dpkg -s ${{ matrix.shell }} 2> /dev/null || which ${{ matrix.shell }}
- run: curl --version - run: curl --version
- run: wget --version - run: wget --version
- uses: ljharb/actions/node/install@main - uses: ljharb/actions/node/run@main
name: 'npm install && version checks' name: 'npm install && version checks'
with: with:
node-version: 'lts/*' node-version: 'lts/*'
skip-ls-check: true skip-ls-check: true
shell-command: echo installed
- run: npm ls urchin - run: npm ls urchin
- run: npx which urchin
- run: env - run: env
- run: make TERM=xterm-256color TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }} - run: make TERM=xterm-256color TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }}

3
.gitignore vendored
View File

@@ -9,7 +9,6 @@ test/bak
.urchin.log .urchin.log
.urchin_stdout .urchin_stdout
test/**/test_output test/**/test_output
test/**/.nvmrc
node_modules/ node_modules/
npm-debug.log npm-debug.log
@@ -22,5 +21,3 @@ current
npm-shrinkwrap.json npm-shrinkwrap.json
package-lock.json package-lock.json
yarn.lock yarn.lock
target/

View File

@@ -32,7 +32,7 @@ before_install:
- zsh --version - zsh --version
- dpkg -s dash | grep ^Version | awk '{print $2}' - dpkg -s dash | grep ^Version | awk '{print $2}'
# install python # install python
- pyenv local 2.7.18 || pyenv install 2.7.18 - pyenv install 2.7.18
- pyenv local 2.7.18 || echo 'pyenv failed' - pyenv local 2.7.18 || echo 'pyenv failed'
- python -V - python -V
install: install:
@@ -87,6 +87,11 @@ env:
- SHELL=bash TEST_SUITE=fast - SHELL=bash TEST_SUITE=fast
- SHELL=zsh TEST_SUITE=fast - SHELL=zsh TEST_SUITE=fast
# - SHELL=ksh TEST_SUITE=fast # - SHELL=ksh TEST_SUITE=fast
- SHELL=sh TEST_SUITE=sourcing
- SHELL=dash TEST_SUITE=sourcing
- SHELL=bash TEST_SUITE=sourcing
- SHELL=zsh TEST_SUITE=sourcing
# - SHELL=ksh TEST_SUITE=sourcing
- SHELL=sh TEST_SUITE=slow - SHELL=sh TEST_SUITE=slow
- SHELL=dash TEST_SUITE=slow - SHELL=dash TEST_SUITE=slow
- SHELL=bash TEST_SUITE=slow - SHELL=bash TEST_SUITE=slow

View File

@@ -40,14 +40,10 @@ list:
# Note that preexisting NVM_* variables are unset to avoid interfering with tests, except when running the Travis tests (where NVM_DIR must be passed in and the env. is assumed to be pristine). # Note that preexisting NVM_* variables are unset to avoid interfering with tests, except when running the Travis tests (where NVM_DIR must be passed in and the env. is assumed to be pristine).
.PHONY: $(SHELL_TARGETS) .PHONY: $(SHELL_TARGETS)
$(SHELL_TARGETS): $(SHELL_TARGETS):
@shell='$@'; shell=$${shell##*-}; \ @shell='$@'; shell=$${shell##*-}; which "$$shell" >/dev/null || { printf '\033[0;31m%s\033[0m\n' "WARNING: Cannot test with shell '$$shell': not found." >&2; exit 0; } && \
which "$$shell" >/dev/null || { printf '\033[0;31m%s\033[0m\n' "WARNING: Cannot test with shell '$$shell': not found." >&2; exit 0; } && \
printf '\n\033[0;34m%s\033[0m\n' "Running tests in $$shell"; \ printf '\n\033[0;34m%s\033[0m\n' "Running tests in $$shell"; \
[ -z "$$TRAVIS_BUILD_DIR" ] && [ -z "$$GITHUB_ACTIONS" ] && for v in $$(set | awk -F'=' '$$1 ~ "^NVM_" { print $$1 }'); do unset $$v; done && unset v; \ [ -z "$$TRAVIS_BUILD_DIR" ] && for v in $$(set | awk -F'=' '$$1 ~ "^NVM_" { print $$1 }'); do unset $$v; done && unset v; \
for suite in $(TEST_SUITE); do \ for suite in $(TEST_SUITE); do $(URCHIN) -f -s $$shell test/$$suite || exit; done
echo "Running test suite: $$suite"; \
$(URCHIN) -f -s $$shell test/$$suite || exit; \
done
# All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS). # All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS).
.PHONY: test .PHONY: test

View File

@@ -6,7 +6,7 @@
</a> </a>
# Node Version Manager [![Build Status](https://app.travis-ci.com/nvm-sh/nvm.svg?branch=master)][3] [![nvm version](https://img.shields.io/badge/version-v0.40.1-yellow.svg)][4] [![CII Best Practices](https://bestpractices.dev/projects/684/badge)](https://bestpractices.dev/projects/684) # Node Version Manager [![Build Status](https://app.travis-ci.com/nvm-sh/nvm.svg?branch=master)][3] [![nvm version](https://img.shields.io/badge/version-v0.39.7-yellow.svg)][4] [![CII Best Practices](https://bestpractices.dev/projects/684/badge)](https://bestpractices.dev/projects/684)
<!-- To update this table of contents, ensure you have run `npm install` then `npm run doctoc` --> <!-- To update this table of contents, ensure you have run `npm install` then `npm run doctoc` -->
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- START doctoc generated TOC please keep comment here to allow auto update -->
@@ -39,7 +39,6 @@
- [Restoring PATH](#restoring-path) - [Restoring PATH](#restoring-path)
- [Set default node version](#set-default-node-version) - [Set default node version](#set-default-node-version)
- [Use a mirror of node binaries](#use-a-mirror-of-node-binaries) - [Use a mirror of node binaries](#use-a-mirror-of-node-binaries)
- [Pass Authorization header to mirror](#pass-authorization-header-to-mirror)
- [.nvmrc](#nvmrc) - [.nvmrc](#nvmrc)
- [Deeper Shell Integration](#deeper-shell-integration) - [Deeper Shell Integration](#deeper-shell-integration)
- [Calling `nvm use` automatically in a directory with a `.nvmrc` file](#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file) - [Calling `nvm use` automatically in a directory with a `.nvmrc` file](#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file)
@@ -61,8 +60,6 @@
- [macOS Troubleshooting](#macos-troubleshooting) - [macOS Troubleshooting](#macos-troubleshooting)
- [WSL Troubleshooting](#wsl-troubleshooting) - [WSL Troubleshooting](#wsl-troubleshooting)
- [Maintainers](#maintainers) - [Maintainers](#maintainers)
- [Project Support](#project-support)
- [Enterprise Support](#enterprise-support)
- [License](#license) - [License](#license)
- [Copyright notice](#copyright-notice) - [Copyright notice](#copyright-notice)
@@ -102,10 +99,10 @@ nvm is a version manager for [node.js](https://nodejs.org/en/), designed to be i
To **install** or **update** nvm, you should run the [install script][2]. To do that, you may either download and run the script manually, or use the following cURL or Wget command: To **install** or **update** nvm, you should run the [install script][2]. To do that, you may either download and run the script manually, or use the following cURL or Wget command:
```sh ```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
``` ```
```sh ```sh
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
``` ```
Running either of the above commands downloads a script and runs it. The script clones the nvm repository to `~/.nvm`, and attempts to add the source lines from the snippet below to the correct profile file (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`). Running either of the above commands downloads a script and runs it. The script clones the nvm repository to `~/.nvm`, and attempts to add the source lines from the snippet below to the correct profile file (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`).
@@ -127,7 +124,7 @@ Eg: `curl ... | NVM_DIR="path/to/nvm"`. Ensure that the `NVM_DIR` does not conta
- The installer can use `git`, `curl`, or `wget` to download `nvm`, whichever is available. - The installer can use `git`, `curl`, or `wget` to download `nvm`, whichever is available.
- You can instruct the installer to not edit your shell config (for example if you already get completions via a [zsh nvm plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/nvm)) by setting `PROFILE=/dev/null` before running the `install.sh` script. Here's an example one-line command to do that: `PROFILE=/dev/null bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash'` - You can instruct the installer to not edit your shell config (for example if you already get completions via a [zsh nvm plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/nvm)) by setting `PROFILE=/dev/null` before running the `install.sh` script. Here's an example one-line command to do that: `PROFILE=/dev/null bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash'`
#### Troubleshooting on Linux #### Troubleshooting on Linux
@@ -175,7 +172,7 @@ You can use a task:
```yaml ```yaml
- name: Install nvm - name: Install nvm
ansible.builtin.shell: > ansible.builtin.shell: >
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
args: args:
creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh" creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"
``` ```
@@ -237,7 +234,7 @@ If you have `git` installed (requires git v1.7.10+):
1. clone this repo in the root of your user profile 1. clone this repo in the root of your user profile
- `cd ~/` from anywhere then `git clone https://github.com/nvm-sh/nvm.git .nvm` - `cd ~/` from anywhere then `git clone https://github.com/nvm-sh/nvm.git .nvm`
1. `cd ~/.nvm` and check out the latest version with `git checkout v0.40.1` 1. `cd ~/.nvm` and check out the latest version with `git checkout v0.39.7`
1. activate `nvm` by sourcing it from your shell: `. ./nvm.sh` 1. activate `nvm` by sourcing it from your shell: `. ./nvm.sh`
Now add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login: Now add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login:
@@ -533,13 +530,6 @@ NVM_IOJS_ORG_MIRROR=https://iojs.org/dist nvm install iojs-v1.0.3
`nvm use` will not, by default, create a "current" symlink. Set `$NVM_SYMLINK_CURRENT` to "true" to enable this behavior, which is sometimes useful for IDEs. Note that using `nvm` in multiple shell tabs with this environment variable enabled can cause race conditions. `nvm use` will not, by default, create a "current" symlink. Set `$NVM_SYMLINK_CURRENT` to "true" to enable this behavior, which is sometimes useful for IDEs. Note that using `nvm` in multiple shell tabs with this environment variable enabled can cause race conditions.
#### Pass Authorization header to mirror
To pass an Authorization header through to the mirror url, set `$NVM_AUTH_HEADER`
```sh
NVM_AUTH_HEADER="Bearer secret-token" nvm install node
```
### .nvmrc ### .nvmrc
You can create a `.nvmrc` file containing a node version number (or any other string that `nvm` understands; see `nvm --help` for details) in the project root directory (or any parent directory). You can create a `.nvmrc` file containing a node version number (or any other string that `nvm` understands; see `nvm --help` for details) in the project root directory (or any parent directory).
@@ -843,13 +833,13 @@ If installing nvm on Alpine Linux *is* still what you want or need to do, you sh
### Alpine Linux 3.13+ ### Alpine Linux 3.13+
```sh ```sh
apk add -U curl bash ca-certificates openssl ncurses coreutils python3 make gcc g++ libgcc linux-headers grep util-linux binutils findutils apk add -U curl bash ca-certificates openssl ncurses coreutils python3 make gcc g++ libgcc linux-headers grep util-linux binutils findutils
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
``` ```
### Alpine Linux 3.5 - 3.12 ### Alpine Linux 3.5 - 3.12
```sh ```sh
apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
``` ```
_Note: Alpine 3.5 can only install NodeJS versions up to v6.9.5, Alpine 3.6 can only install versions up to v6.10.3, Alpine 3.7 installs versions up to v8.9.3, Alpine 3.8 installs versions up to v8.14.0, Alpine 3.9 installs versions up to v10.19.0, Alpine 3.10 installs versions up to v10.24.1, Alpine 3.11 installs versions up to v12.22.6, Alpine 3.12 installs versions up to v12.22.12, Alpine 3.13 & 3.14 install versions up to v14.20.0, Alpine 3.15 & 3.16 install versions up to v16.16.0 (**These are all versions on the main branch**). Alpine 3.5 - 3.12 required the package `python2` to build NodeJS, as they are older versions to build. Alpine 3.13+ requires `python3` to successfully build newer NodeJS versions, but you can use `python2` with Alpine 3.13+ if you need to build versions of node supported in Alpine 3.5 - 3.15, you just need to specify what version of NodeJS you need to install in the package install script._ _Note: Alpine 3.5 can only install NodeJS versions up to v6.9.5, Alpine 3.6 can only install versions up to v6.10.3, Alpine 3.7 installs versions up to v8.9.3, Alpine 3.8 installs versions up to v8.14.0, Alpine 3.9 installs versions up to v10.19.0, Alpine 3.10 installs versions up to v10.24.1, Alpine 3.11 installs versions up to v12.22.6, Alpine 3.12 installs versions up to v12.22.12, Alpine 3.13 & 3.14 install versions up to v14.20.0, Alpine 3.15 & 3.16 install versions up to v16.16.0 (**These are all versions on the main branch**). Alpine 3.5 - 3.12 required the package `python2` to build NodeJS, as they are older versions to build. Alpine 3.13+ requires `python3` to successfully build newer NodeJS versions, but you can use `python2` with Alpine 3.13+ if you need to build versions of node supported in Alpine 3.5 - 3.15, you just need to specify what version of NodeJS you need to install in the package install script._
@@ -952,9 +942,9 @@ You have to make sure that the user directory name in `$HOME` and the user direc
To change the user directory and/or account name follow the instructions [here](https://support.apple.com/en-us/HT201548) To change the user directory and/or account name follow the instructions [here](https://support.apple.com/en-us/HT201548)
[1]: https://github.com/nvm-sh/nvm.git [1]: https://github.com/nvm-sh/nvm.git
[2]: https://github.com/nvm-sh/nvm/blob/v0.40.1/install.sh [2]: https://github.com/nvm-sh/nvm/blob/v0.39.7/install.sh
[3]: https://app.travis-ci.com/nvm-sh/nvm [3]: https://app.travis-ci.com/nvm-sh/nvm
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.40.1 [4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.7
[Urchin]: https://git.sdf.org/tlevine/urchin [Urchin]: https://git.sdf.org/tlevine/urchin
[Fish]: https://fishshell.com [Fish]: https://fishshell.com
@@ -1012,7 +1002,7 @@ Here's what you will need to do:
If one of these broken versions is installed on your system, the above step will likely still succeed even if you didn't include the `--shared-zlib` flag. If one of these broken versions is installed on your system, the above step will likely still succeed even if you didn't include the `--shared-zlib` flag.
However, later, when you attempt to `npm install` something using your old version of node.js, you will see `incorrect data check` errors. However, later, when you attempt to `npm install` something using your old version of node.js, you will see `incorrect data check` errors.
If you want to avoid the possible hassle of dealing with this, include that flag. If you want to avoid the possible hassle of dealing with this, include that flag.
For more details, see [this issue](https://github.com/nodejs/node/issues/39313) and [this comment](https://github.com/nodejs/node/issues/39313#issuecomment-90.40.176) For more details, see [this issue](https://github.com/nodejs/node/issues/39313) and [this comment](https://github.com/nodejs/node/issues/39313#issuecomment-90.39.776)
- Exit back to your native shell. - Exit back to your native shell.
@@ -1039,7 +1029,7 @@ Now you should be able to use node as usual.
If you've encountered this error on WSL-2: If you've encountered this error on WSL-2:
```sh ```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com 0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com
@@ -1072,16 +1062,6 @@ You can check the contents of the file by running:
Currently, the sole maintainer is [@ljharb](https://github.com/ljharb) - more maintainers are quite welcome, and we hope to add folks to the team over time. [Governance](./GOVERNANCE.md) will be re-evaluated as the project evolves. Currently, the sole maintainer is [@ljharb](https://github.com/ljharb) - more maintainers are quite welcome, and we hope to add folks to the team over time. [Governance](./GOVERNANCE.md) will be re-evaluated as the project evolves.
## Project Support
Only the latest version (v0.40.1 at this time) is supported.
## Enterprise Support
If you are unable to update to the latest version of `nvm`, our [partners](https://openjsf.org/ecosystem-sustainability-program) provide commercial security fixes for all unsupported versions:
- [HeroDevs Never-Ending Support](https://www.herodevs.com/support?utm_source=OpenJS&utm_medium=Link&utm_campaign=nvm_openjs)
## License ## License
See [LICENSE.md](./LICENSE.md). See [LICENSE.md](./LICENSE.md).

View File

@@ -33,7 +33,7 @@ nvm_install_dir() {
} }
nvm_latest_version() { nvm_latest_version() {
nvm_echo "v0.40.1" nvm_echo "v0.39.7"
} }
nvm_profile_is_bash_or_zsh() { nvm_profile_is_bash_or_zsh() {
@@ -358,7 +358,7 @@ nvm_check_global_modules() {
command printf %s\\n "$NPM_GLOBAL_MODULES" command printf %s\\n "$NPM_GLOBAL_MODULES"
nvm_echo '=> If you wish to uninstall them at a later point (or re-install them under your' nvm_echo '=> If you wish to uninstall them at a later point (or re-install them under your'
# shellcheck disable=SC2016 # shellcheck disable=SC2016
nvm_echo '=> `nvm` node installs), you can remove them from the system Node as follows:' nvm_echo '=> `nvm` Nodes), you can remove them from the system Node as follows:'
nvm_echo nvm_echo
nvm_echo ' $ nvm use system' nvm_echo ' $ nvm use system'
nvm_echo ' $ npm uninstall -g a_module' nvm_echo ' $ npm uninstall -g a_module'

301
nvm.sh Executable file → Normal file
View File

@@ -81,9 +81,9 @@ nvm_command_info() {
nvm_has_colors() { nvm_has_colors() {
local NVM_NUM_COLORS local NVM_NUM_COLORS
if nvm_has tput; then if nvm_has tput; then
NVM_NUM_COLORS="$(command tput -T "${TERM:-vt100}" colors)" NVM_NUM_COLORS="$(tput -T "${TERM:-vt100}" colors)"
fi fi
[ "${NVM_NUM_COLORS:--1}" -ge 8 ] && [ "${NVM_NO_COLORS-}" != '--no-colors' ] [ "${NVM_NUM_COLORS:--1}" -ge 8 ]
} }
nvm_curl_libz_support() { nvm_curl_libz_support() {
@@ -116,24 +116,12 @@ nvm_get_latest() {
} }
nvm_download() { nvm_download() {
local CURL_COMPRESSED_FLAG
if nvm_has "curl"; then if nvm_has "curl"; then
local CURL_COMPRESSED_FLAG=""
local CURL_HEADER_FLAG=""
if [ -n "${NVM_AUTH_HEADER:-}" ]; then
sanitized_header=$(nvm_sanitize_auth_header "${NVM_AUTH_HEADER}")
CURL_HEADER_FLAG="--header \"Authorization: ${sanitized_header}\""
fi
if nvm_curl_use_compression; then if nvm_curl_use_compression; then
CURL_COMPRESSED_FLAG="--compressed" CURL_COMPRESSED_FLAG="--compressed"
fi fi
local NVM_DOWNLOAD_ARGS curl --fail ${CURL_COMPRESSED_FLAG:-} -q "$@"
NVM_DOWNLOAD_ARGS=''
for arg in "$@"; do
NVM_DOWNLOAD_ARGS="${NVM_DOWNLOAD_ARGS} \"$arg\""
done
eval "curl -q --fail ${CURL_COMPRESSED_FLAG:-} ${CURL_HEADER_FLAG:-} ${NVM_DOWNLOAD_ARGS}"
elif nvm_has "wget"; then elif nvm_has "wget"; then
# Emulate curl with wget # Emulate curl with wget
ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \ ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \
@@ -145,20 +133,11 @@ nvm_download() {
-e 's/-sS /-nv /' \ -e 's/-sS /-nv /' \
-e 's/-o /-O /' \ -e 's/-o /-O /' \
-e 's/-C - /-c /') -e 's/-C - /-c /')
if [ -n "${NVM_AUTH_HEADER:-}" ]; then
ARGS="${ARGS} --header \"${NVM_AUTH_HEADER}\""
fi
# shellcheck disable=SC2086 # shellcheck disable=SC2086
eval wget $ARGS eval wget $ARGS
fi fi
} }
nvm_sanitize_auth_header() {
# Remove potentially dangerous characters
nvm_echo "$1" | command sed 's/[^a-zA-Z0-9:;_. -]//g'
}
nvm_has_system_node() { nvm_has_system_node() {
[ "$(nvm deactivate >/dev/null 2>&1 && command -v node)" != '' ] [ "$(nvm deactivate >/dev/null 2>&1 && command -v node)" != '' ]
} }
@@ -391,9 +370,8 @@ nvm_install_latest_npm() {
|| { [ $NVM_IS_16_OR_ABOVE -eq 1 ] && [ $NVM_IS_16_LTS_OR_ABOVE -eq 0 ]; } \ || { [ $NVM_IS_16_OR_ABOVE -eq 1 ] && [ $NVM_IS_16_LTS_OR_ABOVE -eq 0 ]; } \
|| { [ $NVM_IS_17_OR_ABOVE -eq 1 ] && [ $NVM_IS_18_OR_ABOVE -eq 0 ]; } \ || { [ $NVM_IS_17_OR_ABOVE -eq 1 ] && [ $NVM_IS_18_OR_ABOVE -eq 0 ]; } \
; then ; then
nvm_echo '* `npm` `v8.6` is the last version that works on `node` `v12`, `v14.13` - `v14.16`, or `v16.0` - `v16.12`' nvm_echo '* `npm` `v8.x` is the last version that works on `node` `v12`, `v14.13` - `v14.16`, or `v16.0` - `v16.12`'
# ^8.7 breaks `npm ls` on file: deps $NVM_NPM_CMD install -g npm@8
$NVM_NPM_CMD install -g npm@8.6
elif \ elif \
[ $NVM_IS_18_17_OR_ABOVE -eq 0 ] \ [ $NVM_IS_18_17_OR_ABOVE -eq 0 ] \
|| { [ $NVM_IS_19_OR_ABOVE -eq 1 ] && [ $NVM_IS_20_5_OR_ABOVE -eq 0 ]; } \ || { [ $NVM_IS_19_OR_ABOVE -eq 1 ] && [ $NVM_IS_20_5_OR_ABOVE -eq 0 ]; } \
@@ -502,15 +480,15 @@ additionally, a single bare nvm-recognized version-ish must be present (after st
warn_text="non-commented content parsed: warn_text="non-commented content parsed:
${1}" ${1}"
nvm_err "$(nvm_wrap_with_color_code 'r' "${error_text}") nvm_err "$(nvm_wrap_with_color_code r "${error_text}")
$(nvm_wrap_with_color_code 'y' "${warn_text}")" $(nvm_wrap_with_color_code y "${warn_text}")"
} }
nvm_process_nvmrc() { nvm_process_nvmrc() {
local NVMRC_PATH local NVMRC_PATH="$1"
NVMRC_PATH="$1"
local lines local lines
local unpaired_line
lines=$(command sed 's/#.*//' "$NVMRC_PATH" | command sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | nvm_grep -v '^$') lines=$(command sed 's/#.*//' "$NVMRC_PATH" | command sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | nvm_grep -v '^$')
@@ -520,12 +498,8 @@ nvm_process_nvmrc() {
fi fi
# Initialize key-value storage # Initialize key-value storage
local keys local keys=''
keys='' local values=''
local values
values=''
local unpaired_line
unpaired_line=''
while IFS= read -r line; do while IFS= read -r line; do
if [ -z "${line}" ]; then if [ -z "${line}" ]; then
@@ -891,10 +865,6 @@ nvm_normalize_lts() {
fi fi
;; ;;
*) *)
if [ "${LTS}" != "$(echo "${LTS}" | command tr '[:upper:]' '[:lower:]')" ]; then
nvm_err 'LTS names must be lowercase'
return 3
fi
nvm_echo "${LTS}" nvm_echo "${LTS}"
;; ;;
esac esac
@@ -1107,7 +1077,7 @@ nvm_print_formatted_alias() {
fi fi
local ARROW local ARROW
ARROW='->' ARROW='->'
if nvm_has_colors; then if [ -z "${NVM_NO_COLORS}" ] && nvm_has_colors; then
ARROW='\033[0;90m->\033[0m' ARROW='\033[0;90m->\033[0m'
if [ "_${DEFAULT}" = '_true' ]; then if [ "_${DEFAULT}" = '_true' ]; then
NEWLINE=" \033[${DEFAULT_COLOR}(default)\033[0m\n" NEWLINE=" \033[${DEFAULT_COLOR}(default)\033[0m\n"
@@ -1253,9 +1223,7 @@ nvm_alias() {
nvm_err 'An alias is required.' nvm_err 'An alias is required.'
return 1 return 1
fi fi
if ! ALIAS="$(nvm_normalize_lts "${ALIAS}")"; then ALIAS="$(nvm_normalize_lts "${ALIAS}")"
return $?
fi
if [ -z "${ALIAS}" ]; then if [ -z "${ALIAS}" ]; then
return 2 return 2
@@ -1658,9 +1626,7 @@ $VERSION_LIST
EOF EOF
if [ -n "${LTS-}" ]; then if [ -n "${LTS-}" ]; then
if ! LTS="$(nvm_normalize_lts "lts/${LTS}")"; then LTS="$(nvm_normalize_lts "lts/${LTS}")"
return $?
fi
LTS="${LTS#lts/}" LTS="${LTS#lts/}"
fi fi
@@ -1849,7 +1815,7 @@ nvm_print_versions() {
DEFAULT_COLOR=$(nvm_get_colors 5) DEFAULT_COLOR=$(nvm_get_colors 5)
LTS_COLOR=$(nvm_get_colors 6) LTS_COLOR=$(nvm_get_colors 6)
if nvm_has_colors; then if [ -z "${NVM_NO_COLORS-}" ] && nvm_has_colors; then
NVM_HAS_COLORS=1 NVM_HAS_COLORS=1
fi fi
@@ -2207,7 +2173,7 @@ nvm_install_binary_extract() {
command mkdir -p "${VERSION_PATH}" || return 1 command mkdir -p "${VERSION_PATH}" || return 1
if [ "${NVM_OS}" = 'win' ]; then if [ "${NVM_OS}" = 'win' ]; then
command mv "${TMPDIR}/"*/* "${VERSION_PATH}/" || return 1 command mv "${TMPDIR}/"*/* "${VERSION_PATH}" || return 1
command chmod +x "${VERSION_PATH}"/node.exe || return 1 command chmod +x "${VERSION_PATH}"/node.exe || return 1
command chmod +x "${VERSION_PATH}"/npm || return 1 command chmod +x "${VERSION_PATH}"/npm || return 1
command chmod +x "${VERSION_PATH}"/npx 2>/dev/null command chmod +x "${VERSION_PATH}"/npx 2>/dev/null
@@ -2286,8 +2252,8 @@ nvm_install_binary() {
# Read nosource from arguments # Read nosource from arguments
if [ "${nosource-}" = '1' ]; then if [ "${nosource-}" = '1' ]; then
nvm_err 'Binary download failed. Download from source aborted.' nvm_err 'Binary download failed. Download from source aborted.'
return 0 return 0
fi fi
nvm_err 'Binary download failed, trying source.' nvm_err 'Binary download failed, trying source.'
@@ -2454,7 +2420,7 @@ nvm_download_artifact() {
nvm_err "Downloading ${TARBALL_URL}..." nvm_err "Downloading ${TARBALL_URL}..."
nvm_download -L -C - "${PROGRESS_BAR}" "${TARBALL_URL}" -o "${TARBALL}" || ( nvm_download -L -C - "${PROGRESS_BAR}" "${TARBALL_URL}" -o "${TARBALL}" || (
command rm -rf "${TARBALL}" "${tmpdir}" command rm -rf "${TARBALL}" "${tmpdir}"
nvm_err "download from ${TARBALL_URL} failed" nvm_err "Binary download from ${TARBALL_URL} failed, trying source."
return 4 return 4
) )
@@ -2928,23 +2894,6 @@ nvm_is_natural_num() {
esac esac
} }
nvm_write_nvmrc() {
local VERSION_STRING
VERSION_STRING=$(nvm_version "${1-}")
if [ "${VERSION_STRING}" = '∞' ] || [ "${VERSION_STRING}" = 'N/A' ]; then
return 1
fi
echo "${VERSION_STRING}" | tee "$PWD"/.nvmrc > /dev/null || {
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
nvm_err "Warning: Unable to write version number ($VERSION_STRING) to .nvmrc"
fi
return 3
}
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
nvm_echo "Wrote version number ($VERSION_STRING) to .nvmrc"
fi
}
# Check version dir permissions # Check version dir permissions
nvm_check_file_permissions() { nvm_check_file_permissions() {
nvm_is_zsh && setopt local_options nonomatch nvm_is_zsh && setopt local_options nonomatch
@@ -3050,7 +2999,6 @@ nvm() {
nvm_echo ' --no-progress Disable the progress bar on any downloads' nvm_echo ' --no-progress Disable the progress bar on any downloads'
nvm_echo ' --alias=<name> After installing, set the alias specified to the version specified. (same as: nvm alias <name> <version>)' nvm_echo ' --alias=<name> After installing, set the alias specified to the version specified. (same as: nvm alias <name> <version>)'
nvm_echo ' --default After installing, set default alias to the version specified. (same as: nvm alias default <version>)' nvm_echo ' --default After installing, set default alias to the version specified. (same as: nvm alias default <version>)'
nvm_echo ' --save After installing, write the specified version to .nvmrc'
nvm_echo ' nvm uninstall <version> Uninstall a version' nvm_echo ' nvm uninstall <version> Uninstall a version'
nvm_echo ' nvm uninstall --lts Uninstall using automatic LTS (long-term support) alias `lts/*`, if available.' nvm_echo ' nvm uninstall --lts Uninstall using automatic LTS (long-term support) alias `lts/*`, if available.'
nvm_echo ' nvm uninstall --lts=<LTS name> Uninstall using automatic alias for provided LTS line, if available.' nvm_echo ' nvm uninstall --lts=<LTS name> Uninstall using automatic alias for provided LTS line, if available.'
@@ -3059,7 +3007,6 @@ nvm() {
nvm_echo ' --silent Silences stdout/stderr output' nvm_echo ' --silent Silences stdout/stderr output'
nvm_echo ' --lts Uses automatic LTS (long-term support) alias `lts/*`, if available.' nvm_echo ' --lts Uses automatic LTS (long-term support) alias `lts/*`, if available.'
nvm_echo ' --lts=<LTS name> Uses automatic alias for provided LTS line, if available.' nvm_echo ' --lts=<LTS name> Uses automatic alias for provided LTS line, if available.'
nvm_echo ' --save Writes the specified version to .nvmrc.'
nvm_echo ' nvm exec [<version>] [<command>] Run <command> on <version>. Uses .nvmrc if available and version is omitted.' nvm_echo ' nvm exec [<version>] [<command>] Run <command> on <version>. Uses .nvmrc if available and version is omitted.'
nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm exec`:' nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm exec`:'
nvm_echo ' --silent Silences stdout/stderr output' nvm_echo ' --silent Silences stdout/stderr output'
@@ -3097,16 +3044,16 @@ nvm() {
nvm_echo ' nvm cache clear Empty cache directory for nvm' nvm_echo ' nvm cache clear Empty cache directory for nvm'
nvm_echo ' nvm set-colors [<color codes>] Set five text colors using format "yMeBg". Available when supported.' nvm_echo ' nvm set-colors [<color codes>] Set five text colors using format "yMeBg". Available when supported.'
nvm_echo ' Initial colors are:' nvm_echo ' Initial colors are:'
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'b' 'b')$(nvm_wrap_with_color_code 'y' 'y')$(nvm_wrap_with_color_code 'g' 'g')$(nvm_wrap_with_color_code 'r' 'r')$(nvm_wrap_with_color_code 'e' 'e')" nvm_echo_with_colors " $(nvm_wrap_with_color_code b b)$(nvm_wrap_with_color_code y y)$(nvm_wrap_with_color_code g g)$(nvm_wrap_with_color_code r r)$(nvm_wrap_with_color_code e e)"
nvm_echo ' Color codes:' nvm_echo ' Color codes:'
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'r' 'r')/$(nvm_wrap_with_color_code 'R' 'R') = $(nvm_wrap_with_color_code 'r' 'red') / $(nvm_wrap_with_color_code 'R' 'bold red')" nvm_echo_with_colors " $(nvm_wrap_with_color_code r r)/$(nvm_wrap_with_color_code R R) = $(nvm_wrap_with_color_code r red) / $(nvm_wrap_with_color_code R 'bold red')"
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'g' 'g')/$(nvm_wrap_with_color_code 'G' 'G') = $(nvm_wrap_with_color_code 'g' 'green') / $(nvm_wrap_with_color_code 'G' 'bold green')" nvm_echo_with_colors " $(nvm_wrap_with_color_code g g)/$(nvm_wrap_with_color_code G G) = $(nvm_wrap_with_color_code g green) / $(nvm_wrap_with_color_code G 'bold green')"
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'b' 'b')/$(nvm_wrap_with_color_code 'B' 'B') = $(nvm_wrap_with_color_code 'b' 'blue') / $(nvm_wrap_with_color_code 'B' 'bold blue')" nvm_echo_with_colors " $(nvm_wrap_with_color_code b b)/$(nvm_wrap_with_color_code B B) = $(nvm_wrap_with_color_code b blue) / $(nvm_wrap_with_color_code B 'bold blue')"
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'c' 'c')/$(nvm_wrap_with_color_code 'C' 'C') = $(nvm_wrap_with_color_code 'c' 'cyan') / $(nvm_wrap_with_color_code 'C' 'bold cyan')" nvm_echo_with_colors " $(nvm_wrap_with_color_code c c)/$(nvm_wrap_with_color_code C C) = $(nvm_wrap_with_color_code c cyan) / $(nvm_wrap_with_color_code C 'bold cyan')"
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'm' 'm')/$(nvm_wrap_with_color_code 'M' 'M') = $(nvm_wrap_with_color_code 'm' 'magenta') / $(nvm_wrap_with_color_code 'M' 'bold magenta')" nvm_echo_with_colors " $(nvm_wrap_with_color_code m m)/$(nvm_wrap_with_color_code M M) = $(nvm_wrap_with_color_code m magenta) / $(nvm_wrap_with_color_code M 'bold magenta')"
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'y' 'y')/$(nvm_wrap_with_color_code 'Y' 'Y') = $(nvm_wrap_with_color_code 'y' 'yellow') / $(nvm_wrap_with_color_code 'Y' 'bold yellow')" nvm_echo_with_colors " $(nvm_wrap_with_color_code y y)/$(nvm_wrap_with_color_code Y Y) = $(nvm_wrap_with_color_code y yellow) / $(nvm_wrap_with_color_code Y 'bold yellow')"
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'k' 'k')/$(nvm_wrap_with_color_code 'K' 'K') = $(nvm_wrap_with_color_code 'k' 'black') / $(nvm_wrap_with_color_code 'K' 'bold black')" nvm_echo_with_colors " $(nvm_wrap_with_color_code k k)/$(nvm_wrap_with_color_code K K) = $(nvm_wrap_with_color_code k black) / $(nvm_wrap_with_color_code K 'bold black')"
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'e' 'e')/$(nvm_wrap_with_color_code 'W' 'W') = $(nvm_wrap_with_color_code 'e' 'light grey') / $(nvm_wrap_with_color_code 'W' 'white')" nvm_echo_with_colors " $(nvm_wrap_with_color_code e e)/$(nvm_wrap_with_color_code W W) = $(nvm_wrap_with_color_code e 'light grey') / $(nvm_wrap_with_color_code W white)"
nvm_echo 'Example:' nvm_echo 'Example:'
nvm_echo ' nvm install 8.0.0 Install a specific version number' nvm_echo ' nvm install 8.0.0 Install a specific version number'
nvm_echo ' nvm use 8.0 Use the latest available 8.0.x release' nvm_echo ' nvm use 8.0 Use the latest available 8.0.x release'
@@ -3272,8 +3219,6 @@ nvm() {
local ALIAS local ALIAS
local NVM_UPGRADE_NPM local NVM_UPGRADE_NPM
NVM_UPGRADE_NPM=0 NVM_UPGRADE_NPM=0
local NVM_WRITE_TO_NVMRC
NVM_WRITE_TO_NVMRC=0
local PROVIDED_REINSTALL_PACKAGES_FROM local PROVIDED_REINSTALL_PACKAGES_FROM
local REINSTALL_PACKAGES_FROM local REINSTALL_PACKAGES_FROM
@@ -3372,14 +3317,6 @@ nvm() {
SKIP_DEFAULT_PACKAGES=true SKIP_DEFAULT_PACKAGES=true
shift shift
;; ;;
--save | -w)
if [ $NVM_WRITE_TO_NVMRC -eq 1 ]; then
nvm_err '--save and -w may only be provided once'
return 6
fi
NVM_WRITE_TO_NVMRC=1
shift
;;
*) *)
break # stop parsing args break # stop parsing args
;; ;;
@@ -3425,11 +3362,9 @@ nvm() {
;; ;;
esac esac
local EXIT_CODE
VERSION="$(NVM_VERSION_ONLY=true NVM_LTS="${LTS-}" nvm_remote_version "${provided_version}")" VERSION="$(NVM_VERSION_ONLY=true NVM_LTS="${LTS-}" nvm_remote_version "${provided_version}")"
EXIT_CODE="$?"
if [ "${VERSION}" = 'N/A' ] || [ $EXIT_CODE -ne 0 ]; then if [ "${VERSION}" = 'N/A' ]; then
local LTS_MSG local LTS_MSG
local REMOTE_CMD local REMOTE_CMD
if [ "${LTS-}" = '*' ]; then if [ "${LTS-}" = '*' ]; then
@@ -3438,10 +3373,6 @@ nvm() {
elif [ -n "${LTS-}" ]; then elif [ -n "${LTS-}" ]; then
LTS_MSG="(with LTS filter '${LTS}') " LTS_MSG="(with LTS filter '${LTS}') "
REMOTE_CMD="nvm ls-remote --lts=${LTS}" REMOTE_CMD="nvm ls-remote --lts=${LTS}"
if [ -z "${provided_version}" ]; then
nvm_err "Version with LTS filter '${LTS}' not found - try \`${REMOTE_CMD}\` to browse available versions."
return 3
fi
else else
REMOTE_CMD='nvm ls-remote' REMOTE_CMD='nvm ls-remote'
fi fi
@@ -3506,6 +3437,7 @@ nvm() {
FLAVOR="$(nvm_node_prefix)" FLAVOR="$(nvm_node_prefix)"
fi fi
local EXIT_CODE
EXIT_CODE=0 EXIT_CODE=0
if nvm_is_version_installed "${VERSION}"; then if nvm_is_version_installed "${VERSION}"; then
@@ -3533,11 +3465,6 @@ nvm() {
nvm_ensure_default_set "${provided_version}" nvm_ensure_default_set "${provided_version}"
fi fi
if [ $NVM_WRITE_TO_NVMRC -eq 1 ]; then
nvm_write_nvmrc "${VERSION}"
EXIT_CODE=$?
fi
if [ $EXIT_CODE -ne 0 ] && [ -n "${ALIAS-}" ]; then if [ $EXIT_CODE -ne 0 ] && [ -n "${ALIAS-}" ]; then
nvm alias "${ALIAS}" "${provided_version}" nvm alias "${ALIAS}" "${provided_version}"
EXIT_CODE=$? EXIT_CODE=$?
@@ -3589,13 +3516,9 @@ nvm() {
EXIT_CODE=$? EXIT_CODE=$?
else else
EXIT_CODE=-1 EXIT_CODE=-1
if [ $nosource -eq 1 ]; then
nvm_err "Binary download is not available for ${VERSION}"
EXIT_CODE=3
fi
fi fi
if [ $EXIT_CODE -ne 0 ] && [ $nosource -ne 1 ]; then if [ $EXIT_CODE -ne 0 ]; then
if [ -z "${NVM_MAKE_JOBS-}" ]; then if [ -z "${NVM_MAKE_JOBS-}" ]; then
nvm_get_make_jobs nvm_get_make_jobs
fi fi
@@ -3610,29 +3533,26 @@ nvm() {
fi fi
fi fi
if [ $EXIT_CODE -eq 0 ]; then if [ $EXIT_CODE -eq 0 ] && nvm_use_if_needed "${VERSION}" && nvm_install_npm_if_needed "${VERSION}"; then
if nvm_use_if_needed "${VERSION}" && nvm_install_npm_if_needed "${VERSION}"; then if [ -n "${LTS-}" ]; then
if [ -n "${LTS-}" ]; then nvm_ensure_default_set "lts/${LTS}"
nvm_ensure_default_set "lts/${LTS}"
else
nvm_ensure_default_set "${provided_version}"
fi
if [ "${NVM_UPGRADE_NPM}" = 1 ]; then
nvm install-latest-npm
EXIT_CODE=$?
fi
if [ $EXIT_CODE -eq 0 ] && [ -z "${SKIP_DEFAULT_PACKAGES-}" ]; then
nvm_install_default_packages
fi
if [ $EXIT_CODE -eq 0 ] && [ -n "${REINSTALL_PACKAGES_FROM-}" ] && [ "_${REINSTALL_PACKAGES_FROM}" != "_N/A" ]; then
nvm reinstall-packages "${REINSTALL_PACKAGES_FROM}"
EXIT_CODE=$?
fi
else else
nvm_ensure_default_set "${provided_version}"
fi
if [ "${NVM_UPGRADE_NPM}" = 1 ]; then
nvm install-latest-npm
EXIT_CODE=$? EXIT_CODE=$?
fi fi
if [ $EXIT_CODE -eq 0 ] && [ -z "${SKIP_DEFAULT_PACKAGES-}" ]; then
nvm_install_default_packages
fi
if [ $EXIT_CODE -eq 0 ] && [ -n "${REINSTALL_PACKAGES_FROM-}" ] && [ "_${REINSTALL_PACKAGES_FROM}" != "_N/A" ]; then
nvm reinstall-packages "${REINSTALL_PACKAGES_FROM}"
EXIT_CODE=$?
fi
else
EXIT_CODE=$?
fi fi
return $EXIT_CODE return $EXIT_CODE
;; ;;
"uninstall") "uninstall")
@@ -3773,8 +3693,6 @@ nvm() {
local NVM_LTS local NVM_LTS
local IS_VERSION_FROM_NVMRC local IS_VERSION_FROM_NVMRC
IS_VERSION_FROM_NVMRC=0 IS_VERSION_FROM_NVMRC=0
local NVM_WRITE_TO_NVMRC
NVM_WRITE_TO_NVMRC=0
while [ $# -ne 0 ]; do while [ $# -ne 0 ]; do
case "$1" in case "$1" in
@@ -3786,13 +3704,6 @@ nvm() {
--) ;; --) ;;
--lts) NVM_LTS='*' ;; --lts) NVM_LTS='*' ;;
--lts=*) NVM_LTS="${1##--lts=}" ;; --lts=*) NVM_LTS="${1##--lts=}" ;;
--save | -w)
if [ $NVM_WRITE_TO_NVMRC -eq 1 ]; then
nvm_err '--save and -w may only be provided once'
return 6
fi
NVM_WRITE_TO_NVMRC=1
;;
--*) ;; --*) ;;
*) *)
if [ -n "${1-}" ]; then if [ -n "${1-}" ]; then
@@ -3826,10 +3737,6 @@ nvm() {
return 127 return 127
fi fi
if [ $NVM_WRITE_TO_NVMRC -eq 1 ]; then
nvm_write_nvmrc "${VERSION}"
fi
if [ "_${VERSION}" = '_system' ]; then if [ "_${VERSION}" = '_system' ]; then
if nvm_has_system_node && nvm deactivate "${NVM_SILENT_ARG-}" >/dev/null 2>&1; then if nvm_has_system_node && nvm deactivate "${NVM_SILENT_ARG-}" >/dev/null 2>&1; then
if [ "${NVM_SILENT:-0}" -ne 1 ]; then if [ "${NVM_SILENT:-0}" -ne 1 ]; then
@@ -3845,7 +3752,7 @@ nvm() {
nvm_err 'System version of node not found.' nvm_err 'System version of node not found.'
fi fi
return 127 return 127
elif [ "_${VERSION}" = '_∞' ]; then elif [ "_${VERSION}" = "_∞" ]; then
if [ "${NVM_SILENT:-0}" -ne 1 ]; then if [ "${NVM_SILENT:-0}" -ne 1 ]; then
nvm_err "The alias \"${PROVIDED_VERSION}\" leads to an infinite loop. Aborting." nvm_err "The alias \"${PROVIDED_VERSION}\" leads to an infinite loop. Aborting."
fi fi
@@ -4409,7 +4316,7 @@ nvm() {
NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}" NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}"
;; ;;
"--version" | "-v") "--version" | "-v")
nvm_echo '0.40.1' nvm_echo '0.39.7'
;; ;;
"unload") "unload")
nvm deactivate >/dev/null 2>&1 nvm deactivate >/dev/null 2>&1
@@ -4450,12 +4357,11 @@ nvm() {
nvm_sanitize_path nvm_has_colors nvm_process_parameters \ nvm_sanitize_path nvm_has_colors nvm_process_parameters \
nvm_node_version_has_solaris_binary nvm_iojs_version_has_solaris_binary \ nvm_node_version_has_solaris_binary nvm_iojs_version_has_solaris_binary \
nvm_curl_libz_support nvm_command_info nvm_is_zsh nvm_stdout_is_terminal \ nvm_curl_libz_support nvm_command_info nvm_is_zsh nvm_stdout_is_terminal \
nvm_npmrc_bad_news_bears nvm_sanitize_auth_header \ nvm_npmrc_bad_news_bears \
nvm_get_colors nvm_set_colors nvm_print_color_code nvm_wrap_with_color_code nvm_format_help_message_colors \ nvm_get_colors nvm_set_colors nvm_print_color_code nvm_wrap_with_color_code nvm_format_help_message_colors \
nvm_echo_with_colors nvm_err_with_colors \ nvm_echo_with_colors nvm_err_with_colors \
nvm_get_artifact_compression nvm_install_binary_extract nvm_extract_tarball \ nvm_get_artifact_compression nvm_install_binary_extract nvm_extract_tarball \
nvm_process_nvmrc nvm_nvmrc_invalid_msg \ nvm_process_nvmrc nvm_nvmrc_invalid_msg \
nvm_write_nvmrc \
>/dev/null 2>&1 >/dev/null 2>&1
unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \ unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \ NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \
@@ -4481,23 +4387,37 @@ nvm() {
} }
nvm_get_default_packages() { nvm_get_default_packages() {
local NVM_DEFAULT_PACKAGE_FILE local NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages"
NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages"
if [ -f "${NVM_DEFAULT_PACKAGE_FILE}" ]; then if [ -f "${NVM_DEFAULT_PACKAGE_FILE}" ]; then
command awk -v filename="${NVM_DEFAULT_PACKAGE_FILE}" ' local DEFAULT_PACKAGES
/^[[:space:]]*#/ { next } # Skip lines that begin with # DEFAULT_PACKAGES=''
/^[[:space:]]*$/ { next } # Skip empty lines
/[[:space:]]/ && !/^[[:space:]]*#/ { # Read lines from $NVM_DIR/default-packages
print "Only one package per line is allowed in `" filename "`. Please remove any lines with multiple space-separated values." > "/dev/stderr" local line
err = 1 # ensure a trailing newline
exit 1 WORK=$(mktemp -d) || exit $?
} # shellcheck disable=SC2064
{ trap "command rm -rf '$WORK'" EXIT
if (NR > 1 && !prev_space) printf " " # shellcheck disable=SC1003
printf "%s", $0 sed -e '$a\' "${NVM_DEFAULT_PACKAGE_FILE}" > "${WORK}/default-packages"
prev_space = 0 while IFS=' ' read -r line; do
} # Skip empty lines.
' "${NVM_DEFAULT_PACKAGE_FILE}" [ -n "${line-}" ] || continue
# Skip comment lines that begin with `#`.
[ "$(nvm_echo "${line}" | command cut -c1)" != "#" ] || continue
# Fail on lines that have multiple space-separated words
case $line in
*\ *)
nvm_err "Only one package per line is allowed in the ${NVM_DIR}/default-packages file. Please remove any lines with multiple space-separated values."
return 1
;;
esac
DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} "
done < "${WORK}/default-packages"
echo "${DEFAULT_PACKAGES}" | command xargs
fi fi
} }
@@ -4574,44 +4494,31 @@ nvm_supports_xz() {
nvm_auto() { nvm_auto() {
local NVM_MODE local NVM_MODE
NVM_MODE="${1-}" NVM_MODE="${1-}"
local VERSION
case "${NVM_MODE}" in local NVM_CURRENT
none) return 0 ;; if [ "_${NVM_MODE}" = '_install' ]; then
use) VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)"
local VERSION if [ -n "${VERSION}" ]; then
local NVM_CURRENT nvm install "${VERSION}" >/dev/null
NVM_CURRENT="$(nvm_ls_current)" elif nvm_rc_version >/dev/null 2>&1; then
if [ "_${NVM_CURRENT}" = '_none' ] || [ "_${NVM_CURRENT}" = '_system' ]; then nvm install >/dev/null
VERSION="$(nvm_resolve_local_alias default 2>/dev/null || nvm_echo)" fi
if [ -n "${VERSION}" ]; then elif [ "_$NVM_MODE" = '_use' ]; then
if [ "_${VERSION}" != '_N/A' ] && nvm_is_valid_version "${VERSION}"; then NVM_CURRENT="$(nvm_ls_current)"
nvm use --silent "${VERSION}" >/dev/null if [ "_${NVM_CURRENT}" = '_none' ] || [ "_${NVM_CURRENT}" = '_system' ]; then
else VERSION="$(nvm_resolve_local_alias default 2>/dev/null || nvm_echo)"
return 0 if [ -n "${VERSION}" ]; then
fi nvm use --silent "${VERSION}" >/dev/null
elif nvm_rc_version >/dev/null 2>&1; then
nvm use --silent >/dev/null
fi
else
nvm use --silent "${NVM_CURRENT}" >/dev/null
fi
;;
install)
local VERSION
VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)"
if [ -n "${VERSION}" ] && [ "_${VERSION}" != '_N/A' ] && nvm_is_valid_version "${VERSION}"; then
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 use --silent >/dev/null
else
return 0
fi fi
;; else
*) nvm use --silent "${NVM_CURRENT}" >/dev/null
nvm_err 'Invalid auto mode supplied.' fi
return 1 elif [ "_${NVM_MODE}" != '_none' ]; then
;; nvm_err 'Invalid auto mode supplied.'
esac return 1
fi
} }
nvm_process_parameters() { nvm_process_parameters() {

View File

@@ -1,6 +1,6 @@
{ {
"name": "nvm", "name": "nvm",
"version": "0.40.1", "version": "0.39.7",
"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"
@@ -14,8 +14,6 @@
"test/installation/node": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_node test-$shell", "test/installation/node": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_node test-$shell",
"test/installation/iojs": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_iojs test-$shell", "test/installation/iojs": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_iojs test-$shell",
"test/sourcing": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=sourcing test-$shell", "test/sourcing": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=sourcing test-$shell",
"test:check-exec": "(IFS=$'\\n'; for file in $(git ls-files test); do if [ ! -x \"$file\" ] && [[ \"$file\" != *.* ]] && [[ \"$file\" != test/fixtures/* ]]; then echo \"$file\"; fi; done) | tee /dev/stderr | awk 'END {if (NR > 0) exit 1}'",
"test:check-nonexec": "(IFS=$'\\n'; for file in $(git ls-files test); do if [ -x \"$file\" ] && [ ! -d \"$file\" ] && { [[ \"$file\" =~ '\\.(json|txt|sh|js|log)$' ]] || [[ \"$file\" =~ '^test/(mocks|fixtures)/.*' ]]; }; then echo \"$file\"; fi; done) | tee /dev/stderr | awk 'END {if (NR > 0) exit 1}'",
"doctoc": "doctoc --title='## Table of Contents' --github README.md", "doctoc": "doctoc --title='## Table of Contents' --github README.md",
"predoctoc:check": "cp README.md v-README.md.orig && npm run doctoc", "predoctoc:check": "cp README.md v-README.md.orig && npm run doctoc",
"doctoc:check": "diff -q README.md v-README.md.orig", "doctoc:check": "diff -q README.md v-README.md.orig",
@@ -47,7 +45,7 @@
"eclint": "^2.8.1", "eclint": "^2.8.1",
"markdown-link-check": "^3.12.2", "markdown-link-check": "^3.12.2",
"replace": "^1.2.2", "replace": "^1.2.2",
"semver": "^7.6.3", "semver": "^7.6.2",
"urchin": "^0.0.5" "urchin": "^0.0.5"
} }
} }

View File

@@ -9,7 +9,7 @@ cleanup () { rm -f "${BEFORE}" "${AFTER}"; }
die () { echo "$@" ; cleanup ; exit 1; } die () { echo "$@" ; cleanup ; exit 1; }
typeset -f | awk '/ \(\) $/ && !/^main / {print $1}' > "${BEFORE}" typeset -f | awk '/ \(\) $/ && !/^main / {print $1}' > "${BEFORE}"
env | grep -v PATH= | grep -v IFS= | grep -v NVM_ | grep -v TRAVIS_ | sort >> "${BEFORE}" env | grep -v PATH= | grep -v IFS= | grep -v NVM_ | sort >> "${BEFORE}"
set +e # TODO: fix set +e # TODO: fix
\. ../../nvm.sh \. ../../nvm.sh
@@ -20,11 +20,11 @@ type nvm > /dev/null 2>&1 || die "nvm not loaded"
nvm unload nvm unload
typeset -f | awk '/ \(\) $/ && !/^main / {print $1}' > "${AFTER}" typeset -f | awk '/ \(\) $/ && !/^main / {print $1}' > "${AFTER}"
env | grep -v PATH= | grep -v IFS= | grep -v TRAVIS_ | sort >> "${AFTER}" env | grep -v PATH= | grep -v IFS= | sort >> "${AFTER}"
! type nvm > /dev/null 2>&1 || die "nvm not unloaded" ! type nvm > /dev/null 2>&1 || die "nvm not unloaded"
DIFF="$(diff "${BEFORE}" "${AFTER}" ||:)" DIFF="$(diff "${BEFORE}" "${AFTER}" ||:)"
[ -z "${DIFF}" ] || die "function pollution found: >${DIFF}<" [ -z "${DIFF}" ] || die "function pollution found: ${DIFF}"
cleanup cleanup

View File

@@ -1,61 +0,0 @@
#!/bin/sh
\. ../../../nvm.sh
\. ../../common.sh
set -e
TEST_VERSION='v0.2.4'
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
cleanup() {
nvm cache clear
nvm deactivate
nvm unalias default
rm -rf "${NVM_DIR}/v0.2.4" .nvmrc
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
unset -f nvm_ls_remote nvm_ls_remote_iojs
}
die() {
echo "$@"
cleanup
exit 1
}
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
nvm_ls_remote() {
if [ -n "${PATTERN}" ]; then
cat "${REMOTE}" | \grep "${PATTERN}"
else
cat "${REMOTE}"
fi
}
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
nvm_ls_remote_iojs() {
local PATTERN
PATTERN="${1-}"
if [ -n "${PATTERN}" ]; then
cat "${REMOTE_IOJS}" | \grep "${PATTERN}"
else
cat "${REMOTE_IOJS}"
fi
}
make_fake_node "${TEST_VERSION}"
nvm install -w "${TEST_VERSION}" || die "\`nvm install -w ${TEST_VERSION}\` failed"
OUTPUT="$(cat .nvmrc)"
nvm_is_valid_version "${OUTPUT}" \
|| die "\`nvm install -w ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
rm .nvmrc || die 'removing of .nvmrc failed'
nvm install --save "${TEST_VERSION}" || die "\`nvm install --save ${TEST_VERSION}\` failed"
OUTPUT="$(cat .nvmrc)"
nvm_is_valid_version "${OUTPUT}" \
|| die "\`nvm install --save ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
cleanup

View File

@@ -1,61 +0,0 @@
#!/bin/sh
\. ../../../nvm.sh
\. ../../common.sh
set -e
TEST_VERSION='v0.2.4'
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
cleanup() {
nvm cache clear
nvm deactivate
nvm unalias default
rm -rf "${NVM_DIR}/v0.2.4" .nvmrc
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
unset -f nvm_ls_remote nvm_ls_remote_iojs
}
die() {
echo "$@"
cleanup
exit 1
}
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
nvm_ls_remote() {
if [ -n "${PATTERN}" ]; then
cat "${REMOTE}" | \grep "${PATTERN}"
else
cat "${REMOTE}"
fi
}
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
nvm_ls_remote_iojs() {
local PATTERN
PATTERN="${1-}"
if [ -n "${PATTERN}" ]; then
cat "${REMOTE_IOJS}" | \grep "${PATTERN}"
else
cat "${REMOTE_IOJS}"
fi
}
make_fake_node "${TEST_VERSION}"
nvm use -w "${TEST_VERSION}" || die "\`nvm install -w ${TEST_VERSION}\` failed"
OUTPUT="$(cat .nvmrc)"
nvm_is_valid_version "${OUTPUT}" \
|| die "\`nvm install -w ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
rm .nvmrc || die 'removing of .nvmrc failed'
nvm use --save "${TEST_VERSION}" || die "\`nvm install --save ${TEST_VERSION}\` failed"
OUTPUT="$(cat .nvmrc)"
nvm_is_valid_version "${OUTPUT}" \
|| die "\`nvm install --save ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
cleanup

View File

@@ -1,57 +0,0 @@
#!/bin/sh
\. ../../../nvm.sh
\. ../../common.sh
set -e
TEST_VERSION="v0.2.4"
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
if [ -f ../.nvmrc ]; then mv ../.nvmrc ../.nvmrc.orig; fi
del_nvmrc () {
rm -f .nvmrc ../.nvmrc
}
cleanup () {
del_nvmrc
nvm cache clear
nvm deactivate
nvm unalias default
rm -rf ${NVM_DIR}/v*
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
if [ -f ../.nvmrc.orig ]; then mv ../.nvmrc.orig ../.nvmrc; fi
unset -f nvm_ls_remote nvm_ls_remote_iojs
}
die () {
echo "$@"
cleanup
exit 1
}
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
nvm_ls_remote() {
cat "$REMOTE"
}
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
nvm_ls_remote_iojs() {
cat "$REMOTE_IOJS"
}
del_nvmrc
make_fake_node "$TEST_VERSION"
(cd ..
nvm use --save "$TEST_VERSION" || die "\`nvm use --save $TEST_VERSION\` failed in the parent dir")
nvm use --save || die "\`nvm use --save\` failed"
[ -f ../.nvmrc ] && [ -f .nvmrc ] || die "expected two .nvmrc files to be generated"
OUTPUT=$(cat .nvmrc)
EXPECTED_OUTPUT="$(cat ../.nvmrc)"
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \
|| die "invalid \`nvm use --save \` output: expected '$EXPECTED_OUTPUT'; got '$OUTPUT'"
cleanup

View File

@@ -1,51 +0,0 @@
#!/bin/sh
\. ../../../nvm.sh
\. ../../common.sh
set -e
TEST_VERSION="v0.2.4"
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
cleanup () {
nvm cache clear
nvm deactivate
nvm unalias default
rm -rf "${NVM_DIR}/${TEST_VERSION:?}" .nvmrc
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
unset -f nvm_ls_remote nvm_ls_remote_iojs
}
die () {
echo "$@"
cleanup
exit 1
}
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
nvm_ls_remote() {
cat "${REMOTE}"
}
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt"
nvm_ls_remote_iojs() {
cat "${REMOTE_IOJS}"
}
make_fake_node "${TEST_VERSION}"
OUTPUT=$(nvm use --save --silent "${TEST_VERSION}" || die "\`nvm use --save --silent ${TEST_VERSION}\` failed")
EXPECTED_OUTPUT=''
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] \
|| die "\`nvm use --save --silent ${TEST_VERSION}\` output was not silenced to '${EXPECTED_OUTPUT}'; got '${OUTPUT}'"
rm .nvmrc || die 'removing of .nvmrc failed'
OUTPUT=$(nvm use -w --silent "${TEST_VERSION}" || die "\`nvm use -w --silent ${TEST_VERSION}\` failed")
EXPECTED_OUTPUT=''
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] \
|| die "\`nvm use -w --silent ${TEST_VERSION}\` output was not silenced to '${EXPECTED_OUTPUT}'; got '${OUTPUT}'"
cleanup

View File

@@ -1,20 +0,0 @@
#!/bin/sh
die () { echo "$@" ; exit 1; }
\. ../../../nvm.sh
nvm_install_source() {
exit 42
}
VERSION="0.7.0"
EXIT_CODE=$(nvm install -b "${VERSION}" ; echo $?)
[ $EXIT_CODE -eq 3 ] || die "Expected exit code 3, got ${EXIT_CODE}"
ACTUAL="$(nvm install -b "${VERSION}" 2>&1)"
EXPECTED="Binary download is not available for v${VERSION}"
[ "${ACTUAL}" = "${EXPECTED}" ] || die "Expected >${EXPECTED}<, got >${ACTUAL}<"

View File

@@ -1,35 +0,0 @@
#!/bin/sh
die () { echo "$@" ; exit 1; }
\. ../../../nvm.sh
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt"
nvm_download() {
if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then
cat "${REMOTE}"
elif [ "$*" = "-L -s $(nvm_get_mirror iojs)/index.tab -o -" ]; then
cat "${REMOTE_IOJS}"
else
nvm_err "unknown nvm_download call: $*"
return 42
fi
}
nvm_install_binary() {
return 42
}
nvm_install_source() {
return 42
}
ACTUAL="$(nvm install lts/ARGON 2>&1)"
EXIT_CODE=$?
[ $EXIT_CODE -eq 3 ] || die "Expected exit code of 3, got ${EXIT_CODE}"
EXPECTED="LTS names must be lowercase
Version with LTS filter 'ARGON' not found - try \`nvm ls-remote --lts=ARGON\` to browse available versions."
[ "${ACTUAL}" = "${EXPECTED}" ] || die "Expected >${EXPECTED}<, got >${ACTUAL}<"

View File

@@ -1,17 +1,19 @@
#!/bin/sh #!/bin/sh
set -e
die () { echo "$@" ; cleanup ; exit 1; } die () { echo "$@" ; cleanup ; exit 1; }
cleanup() { cleanup() {
unset -f nvm_download nvm_ls_remote nvm_ls_remote_iojs unset -f nvm_download nvm_ls_remote nvm_ls_remote_iojs
if [ -n "${TEMP_NVM_COLORS-}" ]; then if [ -n TEMP_NVM_COLORS ]; then
export NVM_COLORS=TEMP_NVM_COLORS export NVM_COLORS=TEMP_NVM_COLORS
fi fi
unset TEMP_NVM_COLORS unset TEMP_NVM_COLORS
} }
\. ../../../nvm.sh \. ../../../nvm.sh
if [ -n "${NVM_COLORS-}" ]; then if [ -n ${NVM_COLORS} ]; then
export TEMP_NVM_COLORS=NVM_COLORS export TEMP_NVM_COLORS=NVM_COLORS
unset NVM_COLORS unset NVM_COLORS
fi fi
@@ -20,11 +22,11 @@ nvm deactivate 2>/dev/null || die 'unable to deactivate'
\. ../../common.sh \. ../../common.sh
MOCKS_DIR="${PWD}/mocks" MOCKS_DIR="$PWD/mocks"
nvm_download() { nvm_download() {
if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then
cat "${MOCKS_DIR}/nodejs.org-dist-index.tab" cat "$MOCKS_DIR/nodejs.org-dist-index.tab"
return return
fi fi
return 42 return 42
@@ -32,15 +34,15 @@ nvm_download() {
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt" EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
OUTPUT="$(nvm ls-remote --lts | sed 's/[ \t]*$//')" OUTPUT="$(nvm ls-remote --lts | sed 's/[ \t]*$//')"
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )" EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote --lts did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote --lts did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt" EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
OUTPUT="$(nvm ls-remote "lts/*" | sed 's/[ \t]*$//')" OUTPUT="$(nvm ls-remote "lts/*" | sed 's/[ \t]*$//')"
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )" EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
MOCKS_DIR="${PWD}/mocks" MOCKS_DIR="$PWD/mocks"
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt" LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)" LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)"
@@ -54,26 +56,18 @@ printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
INDEX=$(($INDEX + 1)) INDEX=$(($INDEX + 1))
done done
OUTPUT="$(nvm ls-remote lts/ARGON 2>&1)" REMOTE="$PWD/mocks/nvm_ls_remote.txt"
EXIT_CODE=$?
[ $EXIT_CODE -eq 3 ] || die "nvm ls-remote lts/ARGON did not exit 3, got '${EXIT_CODE}'"
EXPECTED_OUTPUT="LTS names must be lowercase
N/A"
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote lts/ARGON did not output expected error message; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
nvm_ls_remote() { nvm_ls_remote() {
cat "${REMOTE}" cat "$REMOTE"
} }
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt" REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
nvm_ls_remote_iojs() { nvm_ls_remote_iojs() {
cat "${REMOTE_IOJS}" cat "$REMOTE_IOJS"
} }
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt" EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt"
OUTPUT="$(nvm ls-remote | sed 's/[ \t]*$//')" OUTPUT="$(nvm ls-remote | sed 's/[ \t]*$//')"
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )" EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "bare nvm ls-remote did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm ls-remote did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
cleanup cleanup

12
test/fast/Unit tests/nvm_download Executable file → Normal file
View File

@@ -2,7 +2,6 @@
cleanup () { cleanup () {
unset -f die cleanup unset -f die cleanup
docker stop httpbin && docker rm httpbin
} }
die () { echo "$@" ; cleanup ; exit 1; } die () { echo "$@" ; cleanup ; exit 1; }
@@ -16,15 +15,4 @@ nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/de
# nvm_download should fail to download wrong_install.sh # nvm_download should fail to download wrong_install.sh
! nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" >/dev/null || die "nvm_download should fail to download no existing file" ! nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" >/dev/null || die "nvm_download should fail to download no existing file"
# nvm_download should pass when calling with auth header
docker pull kennethreitz/httpbin && SHELL=bash docker run -d --name httpbin -p 80:80 kennethreitz/httpbin
sleep 1 # wait for httpbin to start
NVM_AUTH_HEADER="Bearer test-token" nvm_download "http://127.0.0.1/bearer" > /dev/null || die 'nvm_download with auth header should send correctly'
# nvm_download should fail when calling without auth header
nvm_download "http://127.0.0.1/bearer" > /dev/null && die 'nvm_download with no auth header should not send the header and should fail'
# ensure quoted extra args remain quoted
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" -o "; die quoted-command-not-quoted" || die 'command failed'
cleanup cleanup

View File

@@ -2,11 +2,11 @@
# Save the PATH as it was when the test started to restore it when it # Save the PATH as it was when the test started to restore it when it
# finishes # finishes
ORIG_PATH="${PATH}" ORIG_PATH=$PATH
cleanup() { cleanup() {
# Restore the PATH as it was when the test started # Restore the PATH as it was when the test started
export PATH="${ORIG_PATH}" export PATH=ORIG_PATH
} }
die () { cleanup; echo "$@" ; exit 1; } die () { cleanup; echo "$@" ; exit 1; }
@@ -15,23 +15,20 @@ die () { cleanup; echo "$@" ; exit 1; }
# Directory where mocked binaries used by nvm_get_arch for each OS/arch are # Directory where mocked binaries used by nvm_get_arch for each OS/arch are
# located # located
MOCKS_DIR="$(pwd)/../../mocks" MOCKS_DIR=`pwd`/../../mocks
# Sets the PATH for these tests to include the symlinks to the mocked # Sets the PATH for these tests to include the symlinks to the mocked
# binaries # binaries
export PATH=".:${PATH}" export PATH=.:${PATH}
# Setups mock binaries for a given OS and arch that mimic # Setups mock binaries for a given OS and arch that mimic
# the output of the real binaries used by nvm_get_arch to guess # the output of the real binaries used by nvm_get_arch to guess
# the architecture of a given system. # the architecture of a given system.
setup_mock_arch() { setup_mock_arch() {
local OS local OS=$1
OS=$1 local ARCH=$2
local ARCH local OPT=$3
ARCH=$2
local OPT
OPT=$3
if [ "_${OS}" = '_solaris' ] || [ "_${OS}" = '_smartos' ]; then if [ "_$OS" = "_solaris" ] || [ "_$OS" = "_smartos" ]; then
ln -sf "${MOCKS_DIR}/isainfo_${ARCH}" ./isainfo ln -sf "${MOCKS_DIR}/isainfo_${ARCH}" ./isainfo
if [ "_$OPT" != "_no_pkg_info" ]; then if [ "_$OPT" != "_no_pkg_info" ]; then
ln -sf "${MOCKS_DIR}/pkg_info_${ARCH}" ./pkg_info ln -sf "${MOCKS_DIR}/pkg_info_${ARCH}" ./pkg_info
@@ -45,12 +42,10 @@ setup_mock_arch() {
# Cleans up the setup done by setup_mock_arch. # Cleans up the setup done by setup_mock_arch.
cleanup_mock_arch() { cleanup_mock_arch() {
local OS local OS=$1
OS=$1 local ARCH=$2
local ARCH
ARCH=$2
if [ "_${OS}" = '_solaris' ] || [ "_${OS}" = '_smartos' ]; then if [ "_$OS" = "_solaris" ] || [ "_$OS" = "_smartos" ]; then
rm -f ./isainfo rm -f ./isainfo
rm -f ./pkg_info rm -f ./pkg_info
fi fi
@@ -62,22 +57,17 @@ cleanup_mock_arch() {
# expected output $EXPECTED_OUTPUT with the actual output. Does nothing # expected output $EXPECTED_OUTPUT with the actual output. Does nothing
# and exits cleanly if they match, dies otherwise. # and exits cleanly if they match, dies otherwise.
run_test() { run_test() {
local ARCH local ARCH=$1
ARCH=$1 local OS=$2
local OS local EXPECTED_OUTPUT=$3
OS=$2 local OPT=$4
local EXPECTED_OUTPUT
EXPECTED_OUTPUT=$3
local OPT
OPT=$4
setup_mock_arch "${OS}" "${ARCH}" "${OPT}" setup_mock_arch $OS $ARCH $OPT
local OUTPUT local OUTPUT="$(nvm_get_arch)"
OUTPUT="$(nvm_get_arch)" cleanup_mock_arch $OS $ARCH
cleanup_mock_arch "${OS}" "${ARCH}" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] ||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm_get_arch for OS \"$OS\" and arch \"$ARCH\" with OPT \"$OPT\" did
die "nvm_get_arch for OS \"${OS}\" and arch \"${ARCH}\" with OPT \"${OPT}\" did not return \"$EXPECTED_OUTPUT\"; got \"$OUTPUT\""
not return \"${EXPECTED_OUTPUT}\"; got \"${OUTPUT}\""
} }
run_test x86 smartos x86 run_test x86 smartos x86

View File

@@ -2,29 +2,27 @@
\. ../../../nvm.sh \. ../../../nvm.sh
FILE="${NVM_DIR}/default-packages" FILE="$NVM_DIR/default-packages"
die () { echo "$@" ; cleanup ; exit 1; } die () { echo "$@" ; cleanup ; exit 1; }
setup () { setup () {
if [ -f "${FILE}" ]; then if [ -f $FILE ]; then
ORIG_DEFAULT_PACKAGES=$(cat "${FILE}") ORIG_DEFAULT_PACKAGES=$(cat $FILE)
mkdir -p ./tmp/ ||: mkdir -p ./tmp/ ||:
mv "${FILE}" ./tmp/default-packages ||: mv $FILE ./tmp/default-packages ||:
fi fi
touch "${FILE}" touch $FILE
} }
cleanup () { cleanup () {
if [ "${ORIG_DEFAULT_PACKAGES}" != "" ]; then if [ "$ORIG_DEFAULT_PACKAGES" != "" ]; then
rm -rf ./tmp/ rm -rf ./tmp/
echo "${ORIG_DEFAULT_PACKAGES}" > "${FILE}" echo "$ORIG_DEFAULT_PACKAGES" > $FILE
else
rm "${FILE}"
fi fi
} }
setup setup
cat > "${FILE}" << EOF cat > $FILE << EOF
rimraf rimraf
object-inspect@1.0.2 object-inspect@1.0.2
@@ -41,7 +39,7 @@ cleanup
setup setup
cat > "${FILE}" << EOF cat > $FILE << EOF
rimraf rimraf
not~a~package~name not~a~package~name
mkdirp mkdirp
@@ -55,12 +53,12 @@ cleanup
setup setup
cat > "${FILE}" << EOF cat > $FILE << EOF
rimraf rimraf
not~a~package~name not~a~package~name
mkdirp mkdirp
EOF EOF
printf %s "$(cat "${FILE}")" > "${FILE}" # strip trailing newline printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline
DEFAULT_PKGS="$(nvm_get_default_packages)" DEFAULT_PKGS="$(nvm_get_default_packages)"
EXPECTED_PKGS='rimraf not~a~package~name mkdirp' EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
@@ -70,25 +68,25 @@ cleanup
setup setup
cat > "${FILE}" << EOF cat > $FILE << EOF
object-inspect @ 1.0.2 object-inspect @ 1.0.2
rimraf rimraf
EOF EOF
DEFAULT_PKGS="$(nvm_get_default_packages 2>&1 >/dev/null)" DEFAULT_PKGS="$(nvm_get_default_packages 2>&1 >/dev/null)"
EXPECTED_PKGS="Only one package per line is allowed in \`${FILE}\`. Please remove any lines with multiple space-separated values." EXPECTED_PKGS="Only one package per line is allowed in the $FILE file. Please remove any lines with multiple space-separated values."
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<" [ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
cleanup cleanup
setup setup
rm -rf "${FILE}" rm -rf $FILE
DEFAULT_PKGS="$(nvm_get_default_packages)" DEFAULT_PKGS="$(nvm_get_default_packages)"
EXPECTED_PKGS='' EXPECTED_PKGS=''
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<" [ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
touch "${FILE}" touch $FILE
cleanup cleanup

55
test/fast/Unit tests/nvm_install_binary_extract Executable file → Normal file
View File

@@ -1,43 +1,33 @@
#!/bin/sh #!/bin/sh
cleanup() { cleanup () {
[ -d "${tmp_dir}" ] && rm -rf "${tmp_dir}" [ -d "$tmp_dir" ] && rm -rf "$tmp_dir"
[ -d "${NVM_DIR}" ] && rm -rf "${NVM_DIR}" [ -d "$NVM_DIR" ] && rm -rf "$NVM_DIR"
unset -f die cleanup test_archi nvm_supports_xz unset -f die cleanup test_archi nvm_supports_xz
unset NVM_DIR tmp_dir version archi unset NVM_DIR tmp_dir version archi
} }
die() { echo "$@" ; cleanup ; exit 1; } die () { echo "$@" ; cleanup ; exit 1; }
test_archi() { test_archi(){
local os local os="$1"
os="$1" local version="$2"
local version local archi="$os-$3"
version="$2" local node="$4"
local archi local ext="$5"
archi="$os-$3" local command="$6"
local node local command_option="$7"
node="$4" local node_path="$tmp_dir/node-$version-$archi/$node"
local ext
ext="$5"
local command
command="$6"
local command_option
command_option="$7"
local node_dir
node_dir="${tmp_dir}/node-${version}-${archi}"
local node_path
node_path="${node_dir}/${node}"
# Create tarball # Create tarball
mkdir -p "$(dirname "${node_path}")" mkdir -p "$(dirname "$node_path")"
echo "node ${version}" > "${node_path}" echo "node $version" > "$node_path"
(cd "${tmp_dir}" && "${command}" "${command_option}" "${node_dir}.${ext}" "node-${version}-${archi}") (cd "$tmp_dir" && "$command" "$command_option" "$tmp_dir/node-$version-$archi.$ext" "node-$version-$archi" && rm -rf "$tmp_dir/node-$version-$archi")
[ -f "${node_dir}.${ext}" ] || die "Unable to create fake ${ext} file" [ -f "$tmp_dir/node-$version-$archi.$ext" ] || die "Unable to create fake $ext file"
# Extract it # Extract it
nvm_install_binary_extract "$os" "$version" "$(expr "${version}" : '.\(.*\)')" "${node_dir}.$ext" "${tmp_dir}/files" nvm_install_binary_extract "$os" "$version" "${version:1}" "$tmp_dir/node-$version-$archi.$ext" "$tmp_dir/files"
[ "$(cat "${NVM_DIR}/versions/node/${version}/bin/node")" = "node ${version}" ] || die "Unable to extract ${ext} file" [ "$(cat "$NVM_DIR/versions/node/$version/bin/node")" = "node $version" ] || die "Unable to extract $ext file"
} }
\. ../../../nvm.sh \. ../../../nvm.sh
@@ -49,18 +39,17 @@ type nvm_install_binary_extract > /dev/null 2>&1 || die 'nvm_install_binary_extr
NVM_DIR=$(mktemp -d) NVM_DIR=$(mktemp -d)
tmp_dir=$(mktemp -d) tmp_dir=$(mktemp -d)
if [ -z "${NVM_DIR}" ] || [ -z "${tmp_dir}" ]; then if [ -z "$NVM_DIR" ] || [ -z "$tmp_dir" ]; then
die 'Unable to create temporary folder' die 'Unable to create temporary folder'
fi fi
# Test windows zip # Test windows zip
# TODO: enable this test_archi 'win' 'v15.6.0' 'x64' 'node' 'zip' 'zip' '-qr'
# test_archi 'win' 'v15.6.0' 'x64' 'node' 'zip' 'zip' '-qr'
# Test linux tar.xz # Test linux tar.xz
test_archi 'linux' 'v14.15.4' 'x64' 'bin/node' 'tar.xz' 'tar' '-cJf' test_archi 'linux' 'v14.15.4' 'x64' 'bin/node' 'tar.xz' 'tar' '-cJf'
nvm_supports_xz() { nvm_supports_xz(){
return 1 return 1
} }

58
test/fast/Unit tests/nvm_install_no_progress_bar Executable file → Normal file
View File

@@ -6,16 +6,18 @@ cleanup () {
nvm cache clear nvm cache clear
nvm deactivate nvm deactivate
rm -rf ${NVM_DIR}/v* rm -rf ${NVM_DIR}/v*
nvm unalias default || true nvm unalias default
} }
die () { >&2 echo "$@" ; cleanup ; exit 1; } die () { >&2 echo "$@" ; cleanup ; exit 1; }
\. ../../../nvm.sh \. ../../../nvm.sh
nvm_has_colors() { return 1 ; }
cleanup cleanup
OUTPUT="$(TERM=dumb 2>&1 nvm install --no-progress v0.12.18)" OUTPUT="$(2>&1 nvm install --no-progress v0.12.18)"
EXPECTED_OUTPUT="Downloading and installing node v0.12.18... EXPECTED_OUTPUT="Downloading and installing node v0.12.18...
Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz... Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz...
Computing checksum with sha256sum Computing checksum with sha256sum
@@ -23,63 +25,19 @@ Checksums matched!
Now using node v0.12.18 (npm v2.15.11) Now using node v0.12.18 (npm v2.15.11)
Creating default alias: default -> v0.12.18 *" Creating default alias: default -> v0.12.18 *"
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "1: expected > [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
${EXPECTED_OUTPUT}<, got >
${OUTPUT}<"
cleanup cleanup
OUTPUT="$(TERM=dumb 2>&1 nvm install v0.12.18)" OUTPUT="$(2>&1 nvm install v0.12.18)"
EXPECTED_OUTPUT="Downloading and installing node v0.12.18... EXPECTED_OUTPUT="Downloading and installing node v0.12.18...
Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz... Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz...
######################################################################### 100.0% ######################################################################## 100.0%
Computing checksum with sha256sum Computing checksum with sha256sum
Checksums matched! Checksums matched!
Now using node v0.12.18 (npm v2.15.11) Now using node v0.12.18 (npm v2.15.11)
Creating default alias: default -> v0.12.18 *" Creating default alias: default -> v0.12.18 *"
[ "$(echo "${OUTPUT}" | wc -l)" = "$(echo "${EXPECTED_OUTPUT}" | wc -l)" ] || die "2: expected 7 lines, got $(echo "${OUTPUT}" | wc -l)" [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
# Preprocess function to handle carriage returns and extract final output
preprocess_output() {
echo "$1" | awk '
{
# For each line in the input
while (index($0, "\r") > 0) {
# If a carriage return is found, process it
pos = index($0, "\r")
before_cr = substr($0, 1, pos - 1)
after_cr = substr($0, pos + 1)
# Overwrite the line up to the carriage return with content after it
$0 = after_cr
}
print $0
}' | sed '/^$/d' # Remove any empty lines
}
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || {
echo "$OUTPUT" \
| while IFS= read -r output_line && IFS= read -r expected_line <&3; do
line_number=$((line_number + 1))
# Strip non-visible characters from both lines
clean_output=$(preprocess_output "$output_line")
if [ "${output_line}" != "${expected_line}" ] && ! echo "${clean_output}" | \grep -qE '^#+ 100\.0%$'; then
echo "Difference on line ${line_number}:"
echo "Output: ${output_line}"
echo "Expected: ${expected_line}"
echo "Byte-by-byte comparison:"
echo "Output: $(echo "${clean_output}" | od -An -tx1 | tr -d '\n')"
echo "Expected: $(echo "${expected_line}" | od -An -tx1 | tr -d '\n')"
die "4: expected >
${EXPECTED_OUTPUT}<, got >
${OUTPUT}<"
fi
done 3<<EOF
$EXPECTED_OUTPUT
EOF
}
cleanup cleanup

0
test/fast/Unit tests/nvm_is_version_installed Executable file → Normal file
View File

View File

@@ -16,9 +16,6 @@ ACTUAL="$(nvm_normalize_lts "lts/*")"
EXPECTED='lts/*' EXPECTED='lts/*'
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<" [ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
if ACTUAL="$(nvm_normalize_lts lts/ARGON)"; then
die "expected failure, got >${ACTUAL}<"
fi
MOCKS_DIR="../Unit tests/mocks" MOCKS_DIR="../Unit tests/mocks"
STAR="$(cat "$MOCKS_DIR/lts-star.txt")" STAR="$(cat "$MOCKS_DIR/lts-star.txt")"

View File

@@ -1,86 +0,0 @@
#!/bin/sh
\. ../../../nvm.sh
\. ../../common.sh
set -e
TEST_VERSION="v0.2.4"
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
del_nvmrc () {
rm -f .nvmrc
}
del_alias () {
nvm unalias test >/dev/null 2>&1
}
cleanup () {
del_nvmrc
del_alias
nvm cache clear
nvm deactivate
nvm unalias default
rm -rf ${NVM_DIR}/v*
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
unset -f nvm_ls_remote nvm_ls_remote_iojs
}
die () {
echo "$@"
cleanup
exit 1
}
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
nvm_ls_remote() {
cat "$REMOTE"
}
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
nvm_ls_remote_iojs() {
cat "$REMOTE_IOJS"
}
make_fake_node "$TEST_VERSION"
test_version () {
del_nvmrc
VERSION_STRING=${1-}
make_fake_node "$VERSION_STRING"
nvm_write_nvmrc $VERSION_STRING || die "\`nvm_write_nvmrc ${VERSION_STRING}\` failed"
OUTPUT="$(cat .nvmrc)"
nvm_is_valid_version "$(cat .nvmrc)" \
|| die "\`nvm install --save ${VERSION_STRING}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
}
# 1.
test_version "$TEST_VERSION" || die
# 2. with an alias
del_alias
nvm alias test "$TEST_VERSION"
test_version test || die
# 3. fails with invalid permissions
del_nvmrc
touch .nvmrc
chmod 0 .nvmrc
nvm_write_nvmrc $TEST_VERSION 2>/dev/null && die "\`nvm_write_nvmrc $TEST_VERSION\` did not fail with invalid permissions"
del_nvmrc
# 4. respects NVM_SILENT=1
export NVM_SILENT=1
[ "$(nvm_write_nvmrc $TEST_VERSION)" = "" ] || die "\`nvm_write_nvmrc $TEST_VERSION\` was not silenced by NVM_SILENT=1"
unset NVM_SILENT
# 5. fails with an invalid version number
TEST_VERSION="not_a_node_version"
nvm_write_nvmrc $TEST_VERSION 2>/dev/null && die "\`nvm_write_nvmrc $TEST_VERSION\` did not fail"
#
cleanup

View File

View File

@@ -27,15 +27,15 @@ setup () {
mkdir -p "$npm_config_prefix/lib" mkdir -p "$npm_config_prefix/lib"
} }
setup setup
npm install -g nop >/dev/null || die 'nvm_check_global_modules cannot be tested because `npm` cannot install the `nop` package' npm install -g nop >/dev/null || die 'nvm_check_global_modules cannot be tested because `npm` cannot install the `nop` package'
message=$(nvm_check_global_modules) message=$(nvm_check_global_modules)
[ ! -z "$message" ] || die "nvm_check_global_modules should have printed a notice when npm had global modules installed; got:\n${message}" [ ! -z "$message" ] || die "nvm_check_global_modules should have printed a notice when npm had global modules installed; got:\n${message}"
if [ -n "${ORIGINAL_NVM_DIR}" ] && [ -z "${GITHUB_ACTIONS}" ]; then if [ -n "${ORIGINAL_NVM_DIR}" ]; then
# Admit we're using NVM, just for this one test # Admit we're using NVM, just for this one test
# TODO: fix this for GHA
message=$(NVM_DIR="${ORIGINAL_NVM_DIR}" nvm_check_global_modules) message=$(NVM_DIR="${ORIGINAL_NVM_DIR}" nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm is managed by nvm; got:\n${message}" [ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm is managed by nvm; got:\n${message}"
fi fi

2
test/install_script/nvm_download Executable file → Normal file
View File

@@ -12,7 +12,7 @@ nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/de
# nvm_download should fail to download wrong_install.sh # nvm_download should fail to download wrong_install.sh
if nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" &>/dev/null; then if nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" &>/dev/null; then
die "nvm_download should fail to download nonexistent file" die "nvm_download should fail to download no existing file"
fi fi
cleanup cleanup

View File

@@ -9,20 +9,20 @@ die () { echo "$@" ; exit 1; }
nvm unalias default >/dev/null 2>&1 || die 'unable to unalias default' nvm unalias default >/dev/null 2>&1 || die 'unable to unalias default'
set +ex # needed for stderr set +ex # needed for stderr
OUTPUT="$(nvm install --lts 0.12 2>&1)" OUTPUT="$(nvm install --lts 3 2>&1)"
EXIT_CODE="$?"
set -ex set -ex
EXPECTED_OUTPUT="Version '0.12' (with LTS filter) not found - try \`nvm ls-remote --lts\` to browse available versions." EXIT_CODE="$(nvm install --lts 3 >/dev/null 2>&1 && echo $? || echo $?)"
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts 0.12\` did not exit with 3, got >${EXIT_CODE}<" EXPECTED_OUTPUT="Version '3' (with LTS filter) not found - try \`nvm ls-remote --lts\` to browse available versions."
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts 3\` did not exit with 3, got >${EXIT_CODE}<"
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts 3\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<" [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts 3\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
set +ex # needed for stderr set +ex # needed for stderr
OUTPUT="$(nvm install --lts=argon 0.12 2>&1)" OUTPUT="$(nvm install --lts=argon 3 2>&1)"
EXIT_CODE="$?" set -ex
set -x EXIT_CODE="$(nvm install --lts=argon 3 >/dev/null 2>&1 && echo $? || echo $?)"
EXPECTED_OUTPUT="Version '0.12' (with LTS filter 'argon') not found - try \`nvm ls-remote --lts=argon\` to browse available versions." EXPECTED_OUTPUT="Version '3' (with LTS filter 'argon') not found - try \`nvm ls-remote --lts=argon\` to browse available versions."
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts=argon 0.12\` did not exit with 3, got >${EXIT_CODE}<" [ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts=argon 3\` did not exit with 3, got >${EXIT_CODE}<"
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts=argon 0.12\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<" [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts=argon 3\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
nvm install --lts 4.2.2 || die 'nvm install --lts 4.2.2 failed' nvm install --lts 4.2.2 || die 'nvm install --lts 4.2.2 failed'

View File

@@ -1,10 +1,6 @@
#!/bin/sh #!/bin/sh
die () { die () { echo "$@" ; exit 1; }
unset -f nvm_install_binary nvm_install_source
echo "$@"
exit 1
}
\. ../../nvm.sh \. ../../nvm.sh
@@ -26,28 +22,16 @@ nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || die "'nvm run $N
NVM_CURRENT_DEFAULT="$(nvm_alias default)" NVM_CURRENT_DEFAULT="$(nvm_alias default)"
[ "$NVM_CURRENT_DEFAULT" = "$NVM_TEST_VERSION" ] || die "wrong default alias: $(nvm alias)" [ "$NVM_CURRENT_DEFAULT" = "$NVM_TEST_VERSION" ] || die "wrong default alias: $(nvm alias)"
nvm_install_binary() { # Falls back to source but if -b is set fails binary download.
>&2 echo 'binary failed'
return 1
}
# binary fails, falls back to source, but if -b is set, fails
OUTPUT="$(nvm install -b 9.0.0 2>&1)" OUTPUT="$(nvm install -b 9.0.0 2>&1)"
EXPECTED_OUTPUT='binary failed' EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
if [ "${OUTPUT#*"${EXPECTED_OUTPUT}"}" = "${OUTPUT}" ]; then if [ "${OUTPUT#*$EXPECTED_OUTPUT}" = "${OUTPUT}" ]; then
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<" die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
fi fi
nvm_install_source() { # Falls back to source but if -b is not set.
>&2 echo 'source intentionally failed'
return 1
}
# binary fails, falls back to source if -b is not set
OUTPUT="$(nvm install 9.0.0 2>&1)" OUTPUT="$(nvm install 9.0.0 2>&1)"
EXPECTED_OUTPUT="binary failed EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
Detected that you have 2 CPU core(s) if [ "${OUTPUT#*$EXPECTED_OUTPUT}" != "${OUTPUT}" ]; then
Number of CPU core(s) less than or equal to 2, running in single-threaded mode die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
source intentionally failed" fi
[ "${EXPECTED_OUTPUT}" = "${OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"

0
test/slow/nvm reinstall-packages/test-npmlink/index.js Normal file → Executable file
View File

View File

@@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
die () { echo "$*" ; echo "|${NVM_DIR}|"; exit 1; } die () { echo "$@" ; exit 1; }
echo '0.10.1' > ../../alias/default || die "couldn't create default alias" echo '0.10.1' > ../../alias/default || die "couldn't create default alias"
@@ -9,12 +9,12 @@ echo '0.10.1' > ../../alias/default || die "couldn't create default alias"
NVM_TARGET=0.10.3 NVM_TARGET=0.10.3
NVM_DEFAULT="$(nvm_resolve_local_alias default)" NVM_DEFAULT="$(nvm_resolve_local_alias default)"
[ "_${NVM_DEFAULT}" != "_${NVM_TARGET}" ] || die "default ${NVM_DEFAULT} is the same as target ${NVM_TARGET}" [ "_$NVM_DEFAULT" != "_$NVM_TARGET" ] || die "default $NVM_DEFAULT is the same as target $NVM_TARGET"
nvm use "${NVM_TARGET}" || die "nvm use ${NVM_TARGET} failed" nvm use $NVM_TARGET || die "nvm use $NVM_TARGET failed"
\. ../../nvm.sh || die 'sourcing returned nonzero exit code' \. ../../nvm.sh || die 'sourcing returned nonzero exit code'
NVM_CURRENT="$(nvm current)" NVM_CURRENT="$(nvm current)"
[ "_${NVM_CURRENT#v}" = "_${NVM_TARGET}" ] || die "node version not retained after sourcing" [ "_${NVM_CURRENT#v}" = "_$NVM_TARGET" ] || die "node version not retained after sourcing"

View File

@@ -8,21 +8,21 @@ die () { echo "$@" ; exit 1; }
# despite being unloaded in setup, the inherited PATH still contains # despite being unloaded in setup, the inherited PATH still contains
# an nvm-installed node version. We have to reset NVM_DIR after the unload. # an nvm-installed node version. We have to reset NVM_DIR after the unload.
\. ../../nvm.sh || die 'sourcing returned nonzero exit code' \. ../../nvm.sh || die 'sourcing returned nonzero exit code'
NVM_DIR_CACHED="${NVM_DIR}" NVM_DIR_CACHED="$NVM_DIR"
nvm unload || die 'unloading returned nonzero exit code' nvm unload || die 'unloading returned nonzero exit code'
NVM_DIR="${NVM_DIR_CACHED}" NVM_DIR="$NVM_DIR_CACHED"
echo '0.10.1' > "${NVM_DIR}/alias/default" || die 'creation of default alias failed' echo '0.10.1' > ../../alias/default || die 'creation of default alias failed'
# Now to begin the real test # Now to begin the real test
\. ../../nvm.sh || die 'sourcing returned nonzero exit code' \. ../../nvm.sh || die 'sourcing returned nonzero exit code'
NVM_LS_CURRENT_NOT_GREPPED="$(nvm ls current | strip_colors)" NVM_LS_CURRENT_NOT_GREPPED="$(nvm ls current | strip_colors)"
NVM_LS_CURRENT="$(nvm ls current | strip_colors | \grep -o v0.10.1)" NVM_LS_CURRENT="$(nvm ls current | strip_colors | \grep -o v0.10.1)"
[ "_${NVM_LS_CURRENT}" = '_v0.10.1' ] || die "'nvm ls current' did not return '-> v0.10.1', got '${NVM_LS_CURRENT_NOT_GREPPED}'" [ "_$NVM_LS_CURRENT" = '_v0.10.1' ] || die "'nvm ls current' did not return '-> v0.10.1', got '$NVM_LS_CURRENT_NOT_GREPPED'"
# NVM_LS_CURRENT_COLORED="$(nvm ls current | sed -n l)" # NVM_LS_CURRENT_COLORED="$(nvm ls current | sed -n l)"
NVM_ALIAS_DEFAULT="$(nvm alias default | strip_colors)" NVM_ALIAS_DEFAULT="$(nvm alias default | strip_colors)"
[ "_${NVM_ALIAS_DEFAULT}" = "_default -> 0.10.1 (-> v0.10.1)" ] \ [ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.1 (-> v0.10.1)" ] \
|| die "'nvm alias default did not return 'default -> 0.10.1 (-> v0.10.1)', got '${NVM_ALIAS_DEFAULT}'" || die "'nvm alias default did not return 'default -> 0.10.1 (-> v0.10.1)', got '$NVM_ALIAS_DEFAULT'"

View File

@@ -1,7 +1,6 @@
#!/bin/sh #!/bin/sh
die () { echo "$*" ; echo "|${NVM_DIR}|"; exit 1; } die () { echo "$@" ; exit 1; }
supports_source_options () { supports_source_options () {
[ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ] [ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ]
} }
@@ -11,23 +10,18 @@ if ! supports_source_options; then
exit 0; exit 0;
fi fi
echo '0.10.2' > .nvmrc || die 'creation of .nvmrc failed' echo '0.10.2' > ../../.nvmrc || die 'creation of .nvmrc failed'
export NVM_DIR="${PWD}/../.."
rm ../../alias/default
\. ../../nvm.sh --install \. ../../nvm.sh --install
EXIT_CODE="$?" EXIT_CODE="$(echo $?)"
echo 'sourcing complete.' echo 'sourcing complete.'
nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: $(nvm ls)"
[ "_$(nvm_rc_version | \grep -o -e 'with version .*$')" = "_with version <0.10.2>" ] || die "nvm_rc_version $(nvm_rc_version)" [ "_$(nvm_rc_version | \grep -o -e 'with version .*$')" = "_with version <0.10.2>" ] || die "nvm_rc_version $(nvm_rc_version)"
nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: \n$(nvm_ls)" [ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE"
[ "_${EXIT_CODE}" = '_0' ] || die "sourcing returned nonzero exit code: ${EXIT_CODE}"
NVM_LS_CURRENT="$(nvm ls current | \grep -o v0.10.2)" NVM_LS_CURRENT="$(nvm ls current | \grep -o v0.10.2)"
[ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got >${NVM_LS_CURRENT}<\n$(nvm_ls)" [ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got '$NVM_LS_CURRENT' `nvm ls`"
rm .nvmrc

View File

@@ -2,7 +2,6 @@
\. ../common.sh \. ../common.sh
die () { echo "$@" ; exit 1; } die () { echo "$@" ; exit 1; }
supports_source_options () { supports_source_options () {
[ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ] [ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ]
} }
@@ -12,26 +11,22 @@ if ! supports_source_options; then
exit 0; exit 0;
fi fi
rm .nvmrc
export NVM_DIR="${PWD}/../.."
echo '0.10.2' > ../../alias/default || die 'creation of default alias failed' echo '0.10.2' > ../../alias/default || die 'creation of default alias failed'
echo 'sourcing nvm with --install...' echo 'sourcing nvm with --install...'
\. ../../nvm.sh --install \. ../../nvm.sh --install
EXIT_CODE="$?" EXIT_CODE="$(echo $?)"
echo 'sourcing complete.' echo 'sourcing complete.'
[ "$(nvm_alias default)" = '0.10.2' ] || die "nvm_alias default did not return '0.10.2', got >$(nvm_alias default)<" nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: $(nvm ls)"
nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: \n$(nvm_ls)" [ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE"
[ "_$EXIT_CODE" = '_0' ] || die "sourcing returned nonzero exit code: ${EXIT_CODE}"
NVM_LS_CURRENT="$(nvm ls current | strip_colors | command grep -o v0.10.2)" NVM_LS_CURRENT="$(nvm ls current | strip_colors | command grep -o v0.10.2)"
[ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', >${NVM_LS_CURRENT}<\n$(nvm_ls)" [ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got '$NVM_LS_CURRENT'"
NVM_ALIAS_DEFAULT="$(nvm alias default | strip_colors)" NVM_ALIAS_DEFAULT="$(nvm alias default | strip_colors)"
[ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.2 (-> v0.10.2)" ] \ [ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.2 (-> v0.10.2)" ] \
|| die "'nvm alias default did not return 'default -> 0.10.2 (-> v0.10.2)', got >${NVM_ALIAS_DEFAULT}<\n$(nvm_ls)" || die "'nvm alias default did not return 'default -> 0.10.2 (-> v0.10.2)', got '$NVM_ALIAS_DEFAULT'"

View File

@@ -4,5 +4,4 @@ rm -rf ../../alias
rm -rf ../../v0.10.1 rm -rf ../../v0.10.1
rm -rf ../../v0.10.2 rm -rf ../../v0.10.2
rm -rf ../../v0.10.3 rm -rf ../../v0.10.3
rm -rf ../../versions/node/v4.1.0
rm -f ../../.nvmrc rm -f ../../.nvmrc