mirror of
https://github.com/nvm-sh/nvm.git
synced 2025-12-11 15:44:19 +00:00
Compare commits
21 Commits
v0.40.0
...
84923554ad
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84923554ad | ||
|
|
6b70c40f15 | ||
|
|
5dc31ac51b | ||
|
|
58029b1ddc | ||
|
|
da2720a429 | ||
|
|
9fb9dec710 | ||
|
|
9a28dbd394 | ||
|
|
179d45050b | ||
|
|
ff7634577b | ||
|
|
0ce8f5a52f | ||
|
|
863bd63cfa | ||
|
|
0d53381666 | ||
|
|
df70535248 | ||
|
|
c31a867c46 | ||
|
|
a8c418558a | ||
|
|
d5e2c92a25 | ||
|
|
81f18bc445 | ||
|
|
4beab63631 | ||
|
|
14acd3dcdd | ||
|
|
271720ebfc | ||
|
|
423ee82b4c |
104
.github/workflows/nvm-install-test.yml
vendored
Normal file
104
.github/workflows/nvm-install-test.yml
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
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
|
||||
33
.github/workflows/tests.yml
vendored
33
.github/workflows/tests.yml
vendored
@@ -19,13 +19,24 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- shell: bash
|
||||
exclude:
|
||||
- shell: sh
|
||||
suite: install_script
|
||||
# shell:
|
||||
# - bash
|
||||
# suite:
|
||||
# - install_script
|
||||
- shell: dash
|
||||
suite: install_script
|
||||
- shell: zsh
|
||||
suite: install_script
|
||||
- shell: ksh
|
||||
suite: install_script
|
||||
suite:
|
||||
- install_script
|
||||
- sourcing
|
||||
shell:
|
||||
- sh
|
||||
- bash
|
||||
- dash
|
||||
- zsh
|
||||
# - ksh
|
||||
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
@@ -37,17 +48,23 @@ jobs:
|
||||
raw.githubusercontent.com:443
|
||||
nodejs.org:443
|
||||
iojs.org:443
|
||||
azure.archive.ubuntu.com:80
|
||||
packages.microsoft.com:443
|
||||
- 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: curl --version
|
||||
- run: wget --version
|
||||
- uses: ljharb/actions/node/run@main
|
||||
- uses: ljharb/actions/node/install@main
|
||||
name: 'npm install && version checks'
|
||||
with:
|
||||
node-version: 'lts/*'
|
||||
skip-ls-check: true
|
||||
shell-command: echo installed
|
||||
- run: npm ls urchin
|
||||
- run: npx which urchin
|
||||
- run: env
|
||||
- run: make TERM=xterm-256color TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }}
|
||||
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -22,3 +22,5 @@ current
|
||||
npm-shrinkwrap.json
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
|
||||
target/
|
||||
|
||||
@@ -87,11 +87,6 @@ env:
|
||||
- SHELL=bash TEST_SUITE=fast
|
||||
- SHELL=zsh 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=dash TEST_SUITE=slow
|
||||
- SHELL=bash TEST_SUITE=slow
|
||||
|
||||
2
Makefile
2
Makefile
@@ -43,7 +43,7 @@ $(SHELL_TARGETS):
|
||||
@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; } && \
|
||||
printf '\n\033[0;34m%s\033[0m\n' "Running tests in $$shell"; \
|
||||
[ -z "$$TRAVIS_BUILD_DIR" ] && for v in $$(set | awk -F'=' '$$1 ~ "^NVM_" { print $$1 }'); do unset $$v; done && unset v; \
|
||||
[ -z "$$TRAVIS_BUILD_DIR" ] && [ -z "$$GITHUB_ACTIONS" ] && for v in $$(set | awk -F'=' '$$1 ~ "^NVM_" { print $$1 }'); do unset $$v; done && unset v; \
|
||||
for suite in $(TEST_SUITE); do \
|
||||
echo "Running test suite: $$suite"; \
|
||||
$(URCHIN) -f -s $$shell test/$$suite || exit; \
|
||||
|
||||
26
README.md
26
README.md
@@ -6,7 +6,7 @@
|
||||
</a>
|
||||
|
||||
|
||||
# Node Version Manager [][3] [][4] [](https://bestpractices.dev/projects/684)
|
||||
# Node Version Manager [][3] [][4] [](https://bestpractices.dev/projects/684)
|
||||
|
||||
<!-- 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 -->
|
||||
@@ -102,10 +102,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:
|
||||
```sh
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
|
||||
```
|
||||
```sh
|
||||
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
|
||||
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/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`).
|
||||
@@ -127,7 +127,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.
|
||||
|
||||
- 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.0/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.40.1/install.sh | bash'`
|
||||
|
||||
#### Troubleshooting on Linux
|
||||
|
||||
@@ -175,7 +175,7 @@ You can use a task:
|
||||
```yaml
|
||||
- name: Install nvm
|
||||
ansible.builtin.shell: >
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
|
||||
args:
|
||||
creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"
|
||||
```
|
||||
@@ -237,7 +237,7 @@ If you have `git` installed (requires git v1.7.10+):
|
||||
|
||||
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`
|
||||
1. `cd ~/.nvm` and check out the latest version with `git checkout v0.40.0`
|
||||
1. `cd ~/.nvm` and check out the latest version with `git checkout v0.40.1`
|
||||
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:
|
||||
@@ -843,13 +843,13 @@ If installing nvm on Alpine Linux *is* still what you want or need to do, you sh
|
||||
### Alpine Linux 3.13+
|
||||
```sh
|
||||
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.0/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
|
||||
```
|
||||
|
||||
### Alpine Linux 3.5 - 3.12
|
||||
```sh
|
||||
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.0/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/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._
|
||||
@@ -952,9 +952,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)
|
||||
|
||||
[1]: https://github.com/nvm-sh/nvm.git
|
||||
[2]: https://github.com/nvm-sh/nvm/blob/v0.40.0/install.sh
|
||||
[2]: https://github.com/nvm-sh/nvm/blob/v0.40.1/install.sh
|
||||
[3]: https://app.travis-ci.com/nvm-sh/nvm
|
||||
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.40.0
|
||||
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.40.1
|
||||
[Urchin]: https://git.sdf.org/tlevine/urchin
|
||||
[Fish]: https://fishshell.com
|
||||
|
||||
@@ -1012,7 +1012,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.
|
||||
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.
|
||||
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.076)
|
||||
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)
|
||||
|
||||
- Exit back to your native shell.
|
||||
|
||||
@@ -1039,7 +1039,7 @@ Now you should be able to use node as usual.
|
||||
If you've encountered this error on WSL-2:
|
||||
|
||||
```sh
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
|
||||
% Total % Received % Xferd Average Speed Time Time Time Current
|
||||
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
|
||||
@@ -1074,7 +1074,7 @@ Currently, the sole maintainer is [@ljharb](https://github.com/ljharb) - more ma
|
||||
|
||||
## Project Support
|
||||
|
||||
Only the latest version (v0.40.0 at this time) is supported.
|
||||
Only the latest version (v0.40.1 at this time) is supported.
|
||||
|
||||
## Enterprise Support
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ nvm_install_dir() {
|
||||
}
|
||||
|
||||
nvm_latest_version() {
|
||||
nvm_echo "v0.40.0"
|
||||
nvm_echo "v0.40.1"
|
||||
}
|
||||
|
||||
nvm_profile_is_bash_or_zsh() {
|
||||
@@ -358,7 +358,7 @@ nvm_check_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'
|
||||
# shellcheck disable=SC2016
|
||||
nvm_echo '=> `nvm` Nodes), you can remove them from the system Node as follows:'
|
||||
nvm_echo '=> `nvm` node installs), you can remove them from the system Node as follows:'
|
||||
nvm_echo
|
||||
nvm_echo ' $ nvm use system'
|
||||
nvm_echo ' $ npm uninstall -g a_module'
|
||||
|
||||
366
nvm.sh
366
nvm.sh
@@ -13,6 +13,42 @@
|
||||
# shellcheck disable=SC3028
|
||||
NVM_SCRIPT_SOURCE="$_"
|
||||
|
||||
NVM_LOG_LEVEL=${NVM_LOG_LEVEL:-INFO}
|
||||
NVM_VERSION="0.39.0" # Update this with the actual nvm version
|
||||
|
||||
nvm_log() {
|
||||
local level=$1
|
||||
shift
|
||||
if [[ $NVM_LOG_LEVEL == DEBUG || ($NVM_LOG_LEVEL == INFO && $level != DEBUG) ]]; then
|
||||
printf "[%s] [%s] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$level" "$*" >&2
|
||||
fi
|
||||
}
|
||||
|
||||
nvm_debug() { nvm_log DEBUG "$@"; }
|
||||
nvm_info() { nvm_log INFO "$@"; }
|
||||
nvm_warn() { nvm_log WARN "$@"; }
|
||||
nvm_error() { nvm_log ERROR "$@"; }
|
||||
|
||||
nvm_run_command() {
|
||||
nvm_debug "Executing: $*"
|
||||
"$@"
|
||||
}
|
||||
|
||||
nvm_time_operation() {
|
||||
local start_time=$(date +%s)
|
||||
"$@"
|
||||
local end_time=$(date +%s)
|
||||
local duration=$((end_time - start_time))
|
||||
nvm_info "Operation took ${duration} seconds"
|
||||
}
|
||||
|
||||
nvm_log_env() {
|
||||
nvm_debug "Environment:"
|
||||
nvm_debug " NVM_DIR: $NVM_DIR"
|
||||
nvm_debug " PATH: $PATH"
|
||||
nvm_debug " Shell: $SHELL"
|
||||
}
|
||||
|
||||
nvm_is_zsh() {
|
||||
[ -n "${ZSH_VERSION-}" ]
|
||||
}
|
||||
@@ -81,7 +117,7 @@ nvm_command_info() {
|
||||
nvm_has_colors() {
|
||||
local NVM_NUM_COLORS
|
||||
if nvm_has tput; then
|
||||
NVM_NUM_COLORS="$(tput -T "${TERM:-vt100}" colors)"
|
||||
NVM_NUM_COLORS="$(command tput -T "${TERM:-vt100}" colors)"
|
||||
fi
|
||||
[ "${NVM_NUM_COLORS:--1}" -ge 8 ] && [ "${NVM_NO_COLORS-}" != '--no-colors' ]
|
||||
}
|
||||
@@ -128,7 +164,12 @@ nvm_download() {
|
||||
if nvm_curl_use_compression; then
|
||||
CURL_COMPRESSED_FLAG="--compressed"
|
||||
fi
|
||||
eval "curl -q --fail ${CURL_COMPRESSED_FLAG:-} ${CURL_HEADER_FLAG:-} $*"
|
||||
local NVM_DOWNLOAD_ARGS
|
||||
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
|
||||
# Emulate curl with wget
|
||||
ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \
|
||||
@@ -191,6 +232,9 @@ nvm_install_latest_npm() {
|
||||
nvm_echo 'Attempting to upgrade to the latest working version of npm...'
|
||||
local NODE_VERSION
|
||||
NODE_VERSION="$(nvm_strip_iojs_prefix "$(nvm_ls_current)")"
|
||||
local NPM_VERSION
|
||||
NPM_VERSION="$(npm --version 2>/dev/null)"
|
||||
|
||||
if [ "${NODE_VERSION}" = 'system' ]; then
|
||||
NODE_VERSION="$(node --version)"
|
||||
elif [ "${NODE_VERSION}" = 'none' ]; then
|
||||
@@ -201,8 +245,6 @@ nvm_install_latest_npm() {
|
||||
nvm_err 'Unable to obtain node version.'
|
||||
return 1
|
||||
fi
|
||||
local NPM_VERSION
|
||||
NPM_VERSION="$(npm --version 2>/dev/null)"
|
||||
if [ -z "${NPM_VERSION}" ]; then
|
||||
nvm_err 'Unable to obtain npm version.'
|
||||
return 2
|
||||
@@ -503,9 +545,9 @@ $(nvm_wrap_with_color_code 'y' "${warn_text}")"
|
||||
}
|
||||
|
||||
nvm_process_nvmrc() {
|
||||
local NVMRC_PATH="$1"
|
||||
local NVMRC_PATH
|
||||
NVMRC_PATH="$1"
|
||||
local lines
|
||||
local unpaired_line
|
||||
|
||||
lines=$(command sed 's/#.*//' "$NVMRC_PATH" | command sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | nvm_grep -v '^$')
|
||||
|
||||
@@ -515,8 +557,12 @@ nvm_process_nvmrc() {
|
||||
fi
|
||||
|
||||
# Initialize key-value storage
|
||||
local keys=''
|
||||
local values=''
|
||||
local keys
|
||||
keys=''
|
||||
local values
|
||||
values=''
|
||||
local unpaired_line
|
||||
unpaired_line=''
|
||||
|
||||
while IFS= read -r line; do
|
||||
if [ -z "${line}" ]; then
|
||||
@@ -691,7 +737,9 @@ nvm_ensure_version_installed() {
|
||||
nvm_err "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed."
|
||||
fi
|
||||
nvm_err ""
|
||||
if [ "${IS_VERSION_FROM_NVMRC}" != '1' ]; then
|
||||
if [ "${PROVIDED_VERSION}" = 'lts' ]; then
|
||||
nvm_err '`lts` is not an alias - you may need to run `nvm install --lts` to install and `nvm use --lts` to use it.'
|
||||
elif [ "${IS_VERSION_FROM_NVMRC}" != '1' ]; then
|
||||
nvm_err "You need to run \`nvm install ${PROVIDED_VERSION}\` to install and use it."
|
||||
else
|
||||
nvm_err 'You need to run `nvm install` to install and use the node version specified in `.nvmrc`.'
|
||||
@@ -785,7 +833,7 @@ nvm_remote_versions() {
|
||||
esac
|
||||
|
||||
if nvm_validate_implicit_alias "${PATTERN-}" 2>/dev/null; then
|
||||
nvm_err 'Implicit aliases are not supported in nvm_remote_versions.'
|
||||
nvm_error 'Implicit aliases are not supported in nvm_remote_versions.'
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -877,11 +925,15 @@ nvm_normalize_lts() {
|
||||
if [ "${RESULT}" != '*' ]; then
|
||||
nvm_echo "lts/${RESULT}"
|
||||
else
|
||||
nvm_err 'That many LTS releases do not exist yet.'
|
||||
nvm_error 'That many LTS releases do not exist yet.'
|
||||
return 2
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if [ "${LTS}" != "$(echo "${LTS}" | command tr '[:upper:]' '[:lower:]')" ]; then
|
||||
nvm_error 'LTS names must be lowercase'
|
||||
return 3
|
||||
fi
|
||||
nvm_echo "${LTS}"
|
||||
;;
|
||||
esac
|
||||
@@ -927,7 +979,7 @@ nvm_num_version_groups() {
|
||||
|
||||
nvm_strip_path() {
|
||||
if [ -z "${NVM_DIR-}" ]; then
|
||||
nvm_err '${NVM_DIR} not set!'
|
||||
nvm_error '${NVM_DIR} not set!'
|
||||
return 1
|
||||
fi
|
||||
command printf %s "${1-}" | command awk -v NVM_DIR="${NVM_DIR}" -v RS=: '
|
||||
@@ -940,10 +992,10 @@ nvm_strip_path() {
|
||||
}
|
||||
|
||||
nvm_change_path() {
|
||||
# if there’s no initial path, just return the supplementary path
|
||||
# if there's no initial path, just return the supplementary path
|
||||
if [ -z "${1-}" ]; then
|
||||
nvm_echo "${3-}${2-}"
|
||||
# if the initial path doesn’t contain an nvm path, prepend the supplementary
|
||||
# if the initial path doesn't contain an nvm path, prepend the supplementary
|
||||
# path
|
||||
elif ! nvm_echo "${1-}" | nvm_grep -q "${NVM_DIR}/[^/]*${2-}" \
|
||||
&& ! nvm_echo "${1-}" | nvm_grep -q "${NVM_DIR}/versions/[^/]*/[^/]*${2-}"; then
|
||||
@@ -1010,7 +1062,7 @@ nvm_get_colors() {
|
||||
COLOR=$(nvm_echo "$SYS_COLOR" | command tr '0;' '1;')
|
||||
;;
|
||||
*)
|
||||
nvm_err "Invalid color index, ${1-}"
|
||||
nvm_error "Invalid color index, ${1-}"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
@@ -1050,7 +1102,7 @@ nvm_print_color_code() {
|
||||
'e') nvm_echo '0;37m' ;;
|
||||
'W') nvm_echo '1;37m' ;;
|
||||
*)
|
||||
nvm_err "Invalid color code: ${1-}";
|
||||
nvm_error "Invalid color code: ${1-}";
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
@@ -1132,13 +1184,13 @@ nvm_print_alias_path() {
|
||||
local NVM_ALIAS_DIR
|
||||
NVM_ALIAS_DIR="${1-}"
|
||||
if [ -z "${NVM_ALIAS_DIR}" ]; then
|
||||
nvm_err 'An alias dir is required.'
|
||||
nvm_error 'An alias dir is required.'
|
||||
return 1
|
||||
fi
|
||||
local ALIAS_PATH
|
||||
ALIAS_PATH="${2-}"
|
||||
if [ -z "${ALIAS_PATH}" ]; then
|
||||
nvm_err 'An alias path is required.'
|
||||
nvm_error 'An alias path is required.'
|
||||
return 2
|
||||
fi
|
||||
local ALIAS
|
||||
@@ -1154,7 +1206,7 @@ nvm_print_default_alias() {
|
||||
local ALIAS
|
||||
ALIAS="${1-}"
|
||||
if [ -z "${ALIAS}" ]; then
|
||||
nvm_err 'A default alias is required.'
|
||||
nvm_error 'A default alias is required.'
|
||||
return 1
|
||||
fi
|
||||
local DEST
|
||||
@@ -1168,13 +1220,13 @@ nvm_make_alias() {
|
||||
local ALIAS
|
||||
ALIAS="${1-}"
|
||||
if [ -z "${ALIAS}" ]; then
|
||||
nvm_err "an alias name is required"
|
||||
nvm_error "an alias name is required"
|
||||
return 1
|
||||
fi
|
||||
local VERSION
|
||||
VERSION="${2-}"
|
||||
if [ -z "${VERSION}" ]; then
|
||||
nvm_err "an alias target version is required"
|
||||
nvm_error "an alias target version is required"
|
||||
return 2
|
||||
fi
|
||||
nvm_echo "${VERSION}" | tee "$(nvm_alias_path)/${ALIAS}" >/dev/null
|
||||
@@ -1237,10 +1289,12 @@ nvm_alias() {
|
||||
local ALIAS
|
||||
ALIAS="${1-}"
|
||||
if [ -z "${ALIAS}" ]; then
|
||||
nvm_err 'An alias is required.'
|
||||
nvm_error 'An alias is required.'
|
||||
return 1
|
||||
fi
|
||||
ALIAS="$(nvm_normalize_lts "${ALIAS}")"
|
||||
if ! ALIAS="$(nvm_normalize_lts "${ALIAS}")"; then
|
||||
return $?
|
||||
fi
|
||||
|
||||
if [ -z "${ALIAS}" ]; then
|
||||
return 2
|
||||
@@ -1249,7 +1303,7 @@ nvm_alias() {
|
||||
local NVM_ALIAS_PATH
|
||||
NVM_ALIAS_PATH="$(nvm_alias_path)/${ALIAS}"
|
||||
if [ ! -f "${NVM_ALIAS_PATH}" ]; then
|
||||
nvm_err 'Alias does not exist.'
|
||||
nvm_error 'Alias does not exist.'
|
||||
return 2
|
||||
fi
|
||||
|
||||
@@ -1554,7 +1608,7 @@ nvm_ls_remote_index_tab() {
|
||||
local LTS
|
||||
LTS="${NVM_LTS-}"
|
||||
if [ "$#" -lt 3 ]; then
|
||||
nvm_err 'not enough arguments'
|
||||
nvm_error 'not enough arguments'
|
||||
return 5
|
||||
fi
|
||||
|
||||
@@ -1576,11 +1630,11 @@ nvm_ls_remote_index_tab() {
|
||||
iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;;
|
||||
node-std) PREFIX='' ;;
|
||||
iojs-*)
|
||||
nvm_err 'unknown type of io.js release'
|
||||
nvm_error 'unknown type of io.js release'
|
||||
return 4
|
||||
;;
|
||||
*)
|
||||
nvm_err 'unknown type of node.js release'
|
||||
nvm_error 'unknown type of node.js release'
|
||||
return 4
|
||||
;;
|
||||
esac
|
||||
@@ -1643,7 +1697,9 @@ $VERSION_LIST
|
||||
EOF
|
||||
|
||||
if [ -n "${LTS-}" ]; then
|
||||
LTS="$(nvm_normalize_lts "lts/${LTS}")"
|
||||
if ! LTS="$(nvm_normalize_lts "lts/${LTS}")"; then
|
||||
return $?
|
||||
fi
|
||||
LTS="${LTS#lts/}"
|
||||
fi
|
||||
|
||||
@@ -1692,8 +1748,8 @@ nvm_get_checksum_binary() {
|
||||
elif nvm_has_non_aliased 'sha1'; then
|
||||
nvm_echo 'sha1'
|
||||
else
|
||||
nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.'
|
||||
nvm_err 'Unaliased sha1sum or sha1 not found.'
|
||||
nvm_error 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.'
|
||||
nvm_error 'Unaliased sha1sum or sha1 not found.'
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
@@ -1719,36 +1775,36 @@ nvm_compute_checksum() {
|
||||
local FILE
|
||||
FILE="${1-}"
|
||||
if [ -z "${FILE}" ]; then
|
||||
nvm_err 'Provided file to checksum is empty.'
|
||||
nvm_error 'Provided file to checksum is empty.'
|
||||
return 2
|
||||
elif ! [ -f "${FILE}" ]; then
|
||||
nvm_err 'Provided file to checksum does not exist.'
|
||||
nvm_error 'Provided file to checksum does not exist.'
|
||||
return 1
|
||||
fi
|
||||
|
||||
if nvm_has_non_aliased "sha256sum"; then
|
||||
nvm_err 'Computing checksum with sha256sum'
|
||||
nvm_debug 'Computing checksum with sha256sum'
|
||||
command sha256sum "${FILE}" | command awk '{print $1}'
|
||||
elif nvm_has_non_aliased "shasum"; then
|
||||
nvm_err 'Computing checksum with shasum -a 256'
|
||||
nvm_debug 'Computing checksum with shasum -a 256'
|
||||
command shasum -a 256 "${FILE}" | command awk '{print $1}'
|
||||
elif nvm_has_non_aliased "sha256"; then
|
||||
nvm_err 'Computing checksum with sha256 -q'
|
||||
nvm_debug 'Computing checksum with sha256 -q'
|
||||
command sha256 -q "${FILE}" | command awk '{print $1}'
|
||||
elif nvm_has_non_aliased "gsha256sum"; then
|
||||
nvm_err 'Computing checksum with gsha256sum'
|
||||
nvm_debug 'Computing checksum with gsha256sum'
|
||||
command gsha256sum "${FILE}" | command awk '{print $1}'
|
||||
elif nvm_has_non_aliased "openssl"; then
|
||||
nvm_err 'Computing checksum with openssl dgst -sha256'
|
||||
nvm_debug 'Computing checksum with openssl dgst -sha256'
|
||||
command openssl dgst -sha256 "${FILE}" | command awk '{print $NF}'
|
||||
elif nvm_has_non_aliased "bssl"; then
|
||||
nvm_err 'Computing checksum with bssl sha256sum'
|
||||
nvm_debug 'Computing checksum with bssl sha256sum'
|
||||
command bssl sha256sum "${FILE}" | command awk '{print $1}'
|
||||
elif nvm_has_non_aliased "sha1sum"; then
|
||||
nvm_err 'Computing checksum with sha1sum'
|
||||
nvm_debug 'Computing checksum with sha1sum'
|
||||
command sha1sum "${FILE}" | command awk '{print $1}'
|
||||
elif nvm_has_non_aliased "sha1"; then
|
||||
nvm_err 'Computing checksum with sha1 -q'
|
||||
nvm_debug 'Computing checksum with sha1 -q'
|
||||
command sha1 -q "${FILE}"
|
||||
fi
|
||||
}
|
||||
@@ -1757,10 +1813,10 @@ nvm_compare_checksum() {
|
||||
local FILE
|
||||
FILE="${1-}"
|
||||
if [ -z "${FILE}" ]; then
|
||||
nvm_err 'Provided file to checksum is empty.'
|
||||
nvm_error 'Provided file to checksum is empty.'
|
||||
return 4
|
||||
elif ! [ -f "${FILE}" ]; then
|
||||
nvm_err 'Provided file to checksum does not exist.'
|
||||
nvm_error 'Provided file to checksum does not exist.'
|
||||
return 3
|
||||
fi
|
||||
|
||||
@@ -1770,19 +1826,19 @@ nvm_compare_checksum() {
|
||||
local CHECKSUM
|
||||
CHECKSUM="${2-}"
|
||||
if [ -z "${CHECKSUM}" ]; then
|
||||
nvm_err 'Provided checksum to compare to is empty.'
|
||||
nvm_error 'Provided checksum to compare to is empty.'
|
||||
return 2
|
||||
fi
|
||||
|
||||
if [ -z "${COMPUTED_SUM}" ]; then
|
||||
nvm_err "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary
|
||||
nvm_err 'WARNING: Continuing *without checksum verification*'
|
||||
nvm_error "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary
|
||||
nvm_warn 'WARNING: Continuing *without checksum verification*'
|
||||
return
|
||||
elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ] && [ "${COMPUTED_SUM}" != "\\${CHECKSUM}" ]; then
|
||||
nvm_err "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected."
|
||||
nvm_error "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected."
|
||||
return 1
|
||||
fi
|
||||
nvm_err 'Checksums matched!'
|
||||
nvm_debug 'Checksums matched!'
|
||||
}
|
||||
|
||||
# args: flavor, type, version, slug, compression
|
||||
@@ -1791,7 +1847,7 @@ nvm_get_checksum() {
|
||||
case "${1-}" in
|
||||
node | iojs) FLAVOR="${1}" ;;
|
||||
*)
|
||||
nvm_err 'supported flavors: node, iojs'
|
||||
nvm_error 'supported flavors: node, iojs'
|
||||
return 2
|
||||
;;
|
||||
esac
|
||||
@@ -1912,7 +1968,7 @@ nvm_validate_implicit_alias() {
|
||||
return
|
||||
;;
|
||||
*)
|
||||
nvm_err "Only implicit aliases 'stable', 'unstable', '${NVM_IOJS_PREFIX}', and '${NVM_NODE_PREFIX}' are supported."
|
||||
nvm_error "Only implicit aliases 'stable', 'unstable', '${NVM_IOJS_PREFIX}', and '${NVM_NODE_PREFIX}' are supported."
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
@@ -1920,7 +1976,7 @@ nvm_validate_implicit_alias() {
|
||||
|
||||
nvm_print_implicit_alias() {
|
||||
if [ "_$1" != "_local" ] && [ "_$1" != "_remote" ]; then
|
||||
nvm_err "nvm_print_implicit_alias must be specified with local or remote as the first argument."
|
||||
nvm_error "nvm_print_implicit_alias must be specified with local or remote as the first argument."
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -2081,13 +2137,13 @@ nvm_get_minor_version() {
|
||||
VERSION="$1"
|
||||
|
||||
if [ -z "${VERSION}" ]; then
|
||||
nvm_err 'a version is required'
|
||||
nvm_error 'a version is required'
|
||||
return 1
|
||||
fi
|
||||
|
||||
case "${VERSION}" in
|
||||
v | .* | *..* | v*[!.0123456789]* | [!v]*[!.0123456789]* | [!v0123456789]* | v[!0123456789]*)
|
||||
nvm_err 'invalid version number'
|
||||
nvm_error 'invalid version number'
|
||||
return 2
|
||||
;;
|
||||
esac
|
||||
@@ -2098,7 +2154,7 @@ nvm_get_minor_version() {
|
||||
local MINOR
|
||||
MINOR="$(nvm_echo "${PREFIXED_VERSION}" | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2)"
|
||||
if [ -z "${MINOR}" ]; then
|
||||
nvm_err 'invalid version number! (please report this)'
|
||||
nvm_error 'invalid version number! (please report this)'
|
||||
return 3
|
||||
fi
|
||||
nvm_echo "${MINOR}"
|
||||
@@ -2108,7 +2164,7 @@ nvm_ensure_default_set() {
|
||||
local VERSION
|
||||
VERSION="$1"
|
||||
if [ -z "${VERSION}" ]; then
|
||||
nvm_err 'nvm_ensure_default_set: a version is required'
|
||||
nvm_error 'nvm_ensure_default_set: a version is required'
|
||||
return 1
|
||||
elif nvm_alias default >/dev/null 2>&1; then
|
||||
# default already set
|
||||
@@ -2118,7 +2174,7 @@ nvm_ensure_default_set() {
|
||||
OUTPUT="$(nvm alias default "${VERSION}")"
|
||||
local EXIT_CODE
|
||||
EXIT_CODE="$?"
|
||||
nvm_echo "Creating default alias: ${OUTPUT}"
|
||||
nvm_info "Creating default alias: ${OUTPUT}"
|
||||
return $EXIT_CODE
|
||||
}
|
||||
|
||||
@@ -2133,21 +2189,21 @@ nvm_get_mirror() {
|
||||
node-std) NVM_MIRROR="${NVM_NODEJS_ORG_MIRROR:-https://nodejs.org/dist}" ;;
|
||||
iojs-std) NVM_MIRROR="${NVM_IOJS_ORG_MIRROR:-https://iojs.org/dist}" ;;
|
||||
*)
|
||||
nvm_err 'unknown type of node.js or io.js release'
|
||||
nvm_error 'unknown type of node.js or io.js release'
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${NVM_MIRROR}" in
|
||||
*\`* | *\\* | *\'* | *\(* | *' '* )
|
||||
nvm_err '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL'
|
||||
nvm_error '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL'
|
||||
return 2
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
if ! nvm_echo "${NVM_MIRROR}" | command awk '{ $0 ~ "^https?://[a-zA-Z0-9./_-]+$" }'; then
|
||||
nvm_err '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL'
|
||||
nvm_error '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL'
|
||||
return 2
|
||||
fi
|
||||
|
||||
@@ -2157,7 +2213,7 @@ nvm_get_mirror() {
|
||||
# args: os, prefixed version, version, tarball, extract directory
|
||||
nvm_install_binary_extract() {
|
||||
if [ "$#" -ne 5 ]; then
|
||||
nvm_err 'nvm_install_binary_extract needs 5 parameters'
|
||||
nvm_error 'nvm_install_binary_extract needs 5 parameters'
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -2175,7 +2231,7 @@ nvm_install_binary_extract() {
|
||||
local VERSION_PATH
|
||||
|
||||
[ -n "${TMPDIR-}" ] && \
|
||||
command mkdir -p "${TMPDIR}" && \
|
||||
nvm_run_command mkdir -p "${TMPDIR}" && \
|
||||
VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")" || return 1
|
||||
|
||||
# For Windows system (GitBash with MSYS, Cygwin)
|
||||
@@ -2190,7 +2246,7 @@ nvm_install_binary_extract() {
|
||||
command mkdir -p "${VERSION_PATH}" || return 1
|
||||
|
||||
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}"/npm || return 1
|
||||
command chmod +x "${VERSION_PATH}"/npx 2>/dev/null
|
||||
@@ -2209,7 +2265,7 @@ nvm_install_binary() {
|
||||
case "${1-}" in
|
||||
node | iojs) FLAVOR="${1}" ;;
|
||||
*)
|
||||
nvm_err 'supported flavors: node, iojs'
|
||||
nvm_error 'supported flavors: node, iojs'
|
||||
return 4
|
||||
;;
|
||||
esac
|
||||
@@ -2220,7 +2276,7 @@ nvm_install_binary() {
|
||||
local PREFIXED_VERSION
|
||||
PREFIXED_VERSION="${3-}"
|
||||
if [ -z "${PREFIXED_VERSION}" ]; then
|
||||
nvm_err 'A version number is required.'
|
||||
nvm_error 'A version number is required.'
|
||||
return 3
|
||||
fi
|
||||
|
||||
@@ -2248,18 +2304,17 @@ nvm_install_binary() {
|
||||
NODE_OR_IOJS="io.js"
|
||||
fi
|
||||
if [ "${NVM_NO_PROGRESS-}" = "1" ]; then
|
||||
# --silent, --show-error, use short option as @samrocketman mentions the compatibility issue.
|
||||
PROGRESS_BAR="-sS"
|
||||
else
|
||||
PROGRESS_BAR="--progress-bar"
|
||||
fi
|
||||
nvm_echo "Downloading and installing ${NODE_OR_IOJS-} ${VERSION}..."
|
||||
nvm_info "Downloading and installing ${NODE_OR_IOJS-} ${VERSION}..."
|
||||
TARBALL="$(PROGRESS_BAR="${PROGRESS_BAR}" nvm_download_artifact "${FLAVOR}" binary "${TYPE-}" "${VERSION}" | command tail -1)"
|
||||
if [ -f "${TARBALL}" ]; then
|
||||
TMPDIR="$(dirname "${TARBALL}")/files"
|
||||
fi
|
||||
|
||||
if nvm_install_binary_extract "${NVM_OS}" "${PREFIXED_VERSION}" "${VERSION}" "${TARBALL}" "${TMPDIR}"; then
|
||||
if nvm_time_operation nvm_install_binary_extract "${NVM_OS}" "${PREFIXED_VERSION}" "${VERSION}" "${TARBALL}" "${TMPDIR}"; then
|
||||
if [ -n "${ALIAS-}" ]; then
|
||||
nvm alias "${ALIAS}" "${provided_version}"
|
||||
fi
|
||||
@@ -2269,11 +2324,11 @@ nvm_install_binary() {
|
||||
|
||||
# Read nosource from arguments
|
||||
if [ "${nosource-}" = '1' ]; then
|
||||
nvm_err 'Binary download failed. Download from source aborted.'
|
||||
nvm_error 'Binary download failed. Download from source aborted.'
|
||||
return 0
|
||||
fi
|
||||
|
||||
nvm_err 'Binary download failed, trying source.'
|
||||
nvm_warn 'Binary download failed, trying source.'
|
||||
if [ -n "${TMPDIR-}" ]; then
|
||||
command rm -rf "${TMPDIR}"
|
||||
fi
|
||||
@@ -2286,7 +2341,7 @@ nvm_get_download_slug() {
|
||||
case "${1-}" in
|
||||
node | iojs) FLAVOR="${1}" ;;
|
||||
*)
|
||||
nvm_err 'supported flavors: node, iojs'
|
||||
nvm_error 'supported flavors: node, iojs'
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
@@ -2295,7 +2350,7 @@ nvm_get_download_slug() {
|
||||
case "${2-}" in
|
||||
binary | source) KIND="${2}" ;;
|
||||
*)
|
||||
nvm_err 'supported kinds: binary, source'
|
||||
nvm_error 'supported kinds: binary, source'
|
||||
return 2
|
||||
;;
|
||||
esac
|
||||
@@ -2356,7 +2411,7 @@ nvm_download_artifact() {
|
||||
case "${1-}" in
|
||||
node | iojs) FLAVOR="${1}" ;;
|
||||
*)
|
||||
nvm_err 'supported flavors: node, iojs'
|
||||
nvm_error 'supported flavors: node, iojs'
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
@@ -2365,7 +2420,7 @@ nvm_download_artifact() {
|
||||
case "${2-}" in
|
||||
binary | source) KIND="${2}" ;;
|
||||
*)
|
||||
nvm_err 'supported kinds: binary, source'
|
||||
nvm_error 'supported kinds: binary, source'
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
@@ -2383,12 +2438,12 @@ nvm_download_artifact() {
|
||||
VERSION="${4}"
|
||||
|
||||
if [ -z "${VERSION}" ]; then
|
||||
nvm_err 'A version number is required.'
|
||||
nvm_error 'A version number is required.'
|
||||
return 3
|
||||
fi
|
||||
|
||||
if [ "${KIND}" = 'binary' ] && ! nvm_binary_available "${VERSION}"; then
|
||||
nvm_err "No precompiled binary available for ${VERSION}."
|
||||
nvm_error "No precompiled binary available for ${VERSION}."
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -2408,7 +2463,7 @@ nvm_download_artifact() {
|
||||
tmpdir="$(nvm_cache_dir)/src/${SLUG}"
|
||||
fi
|
||||
command mkdir -p "${tmpdir}/files" || (
|
||||
nvm_err "creating directory ${tmpdir}/files failed"
|
||||
nvm_error "creating directory ${tmpdir}/files failed"
|
||||
return 3
|
||||
)
|
||||
|
||||
@@ -2423,27 +2478,27 @@ nvm_download_artifact() {
|
||||
fi
|
||||
|
||||
if [ -r "${TARBALL}" ]; then
|
||||
nvm_err "Local cache found: $(nvm_sanitize_path "${TARBALL}")"
|
||||
nvm_error "Local cache found: $(nvm_sanitize_path "${TARBALL}")"
|
||||
if nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" >/dev/null 2>&1; then
|
||||
nvm_err "Checksums match! Using existing downloaded archive $(nvm_sanitize_path "${TARBALL}")"
|
||||
nvm_info "Checksums match! Using existing downloaded archive $(nvm_sanitize_path "${TARBALL}")"
|
||||
nvm_echo "${TARBALL}"
|
||||
return 0
|
||||
fi
|
||||
nvm_compare_checksum "${TARBALL}" "${CHECKSUM}"
|
||||
nvm_err "Checksum check failed!"
|
||||
nvm_err "Removing the broken local cache..."
|
||||
nvm_error "Checksum check failed!"
|
||||
nvm_error "Removing the broken local cache..."
|
||||
command rm -rf "${TARBALL}"
|
||||
fi
|
||||
nvm_err "Downloading ${TARBALL_URL}..."
|
||||
nvm_info "Downloading ${TARBALL_URL}..."
|
||||
nvm_download -L -C - "${PROGRESS_BAR}" "${TARBALL_URL}" -o "${TARBALL}" || (
|
||||
command rm -rf "${TARBALL}" "${tmpdir}"
|
||||
nvm_err "Binary download from ${TARBALL_URL} failed, trying source."
|
||||
nvm_error "download from ${TARBALL_URL} failed"
|
||||
return 4
|
||||
)
|
||||
|
||||
if nvm_grep '404 Not Found' "${TARBALL}" >/dev/null; then
|
||||
command rm -rf "${TARBALL}" "${tmpdir}"
|
||||
nvm_err "HTTP 404 at URL ${TARBALL_URL}"
|
||||
nvm_error "HTTP 404 at URL ${TARBALL_URL}"
|
||||
return 5
|
||||
fi
|
||||
|
||||
@@ -2458,7 +2513,7 @@ nvm_download_artifact() {
|
||||
# args: nvm_os, version, tarball, tmpdir
|
||||
nvm_extract_tarball() {
|
||||
if [ "$#" -ne 4 ]; then
|
||||
nvm_err 'nvm_extract_tarball requires exactly 4 arguments'
|
||||
nvm_error 'nvm_extract_tarball requires exactly 4 arguments'
|
||||
return 5
|
||||
fi
|
||||
|
||||
@@ -2504,7 +2559,7 @@ nvm_get_make_jobs() {
|
||||
return
|
||||
elif [ -n "${1-}" ]; then
|
||||
unset NVM_MAKE_JOBS
|
||||
nvm_err "$1 is invalid for number of \`make\` jobs, must be a natural number"
|
||||
nvm_error "$1 is invalid for number of \`make\` jobs, must be a natural number"
|
||||
fi
|
||||
local NVM_OS
|
||||
NVM_OS="$(nvm_get_os)"
|
||||
@@ -2524,8 +2579,8 @@ nvm_get_make_jobs() {
|
||||
;;
|
||||
esac
|
||||
if ! nvm_is_natural_num "${NVM_CPU_CORES}"; then
|
||||
nvm_err 'Can not determine how many core(s) are available, running in single-threaded mode.'
|
||||
nvm_err 'Please report an issue on GitHub to help us make nvm run faster on your computer!'
|
||||
nvm_error 'Can not determine how many core(s) are available, running in single-threaded mode.'
|
||||
nvm_error 'Please report an issue on GitHub to help us make nvm run faster on your computer!'
|
||||
NVM_MAKE_JOBS=1
|
||||
else
|
||||
nvm_echo "Detected that you have ${NVM_CPU_CORES} CPU core(s)"
|
||||
@@ -2545,7 +2600,7 @@ nvm_install_source() {
|
||||
case "${1-}" in
|
||||
node | iojs) FLAVOR="${1}" ;;
|
||||
*)
|
||||
nvm_err 'supported flavors: node, iojs'
|
||||
nvm_error 'supported flavors: node, iojs'
|
||||
return 4
|
||||
;;
|
||||
esac
|
||||
@@ -2556,7 +2611,7 @@ nvm_install_source() {
|
||||
local PREFIXED_VERSION
|
||||
PREFIXED_VERSION="${3-}"
|
||||
if [ -z "${PREFIXED_VERSION}" ]; then
|
||||
nvm_err 'A version number is required.'
|
||||
nvm_error 'A version number is required.'
|
||||
return 3
|
||||
fi
|
||||
|
||||
@@ -2636,7 +2691,7 @@ nvm_install_source() {
|
||||
command rm -f "${VERSION_PATH}" 2>/dev/null && \
|
||||
$make -j "${NVM_MAKE_JOBS}" ${MAKE_CXX-} install
|
||||
); then
|
||||
nvm_err "nvm: install ${VERSION} failed!"
|
||||
nvm_error "nvm: install ${VERSION} failed!"
|
||||
command rm -rf "${TMPDIR-}"
|
||||
return 1
|
||||
fi
|
||||
@@ -2655,10 +2710,10 @@ nvm_install_npm_if_needed() {
|
||||
if ! nvm_has "npm"; then
|
||||
nvm_echo 'Installing npm...'
|
||||
if nvm_version_greater 0.2.0 "${VERSION}"; then
|
||||
nvm_err 'npm requires node v0.2.3 or higher'
|
||||
nvm_error 'npm requires node v0.2.3 or higher'
|
||||
elif nvm_version_greater_than_or_equal_to "${VERSION}" 0.2.0; then
|
||||
if nvm_version_greater 0.2.3 "${VERSION}"; then
|
||||
nvm_err 'npm requires node v0.2.3 or higher'
|
||||
nvm_error 'npm requires node v0.2.3 or higher'
|
||||
else
|
||||
nvm_download -L https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh
|
||||
fi
|
||||
@@ -2717,7 +2772,7 @@ nvm_die_on_prefix() {
|
||||
case "${NVM_DELETE_PREFIX}" in
|
||||
0 | 1) ;;
|
||||
*)
|
||||
nvm_err 'First argument "delete the prefix" must be zero or one'
|
||||
nvm_error 'First argument "delete the prefix" must be zero or one'
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
@@ -2726,7 +2781,7 @@ nvm_die_on_prefix() {
|
||||
local NVM_VERSION_DIR
|
||||
NVM_VERSION_DIR="${3-}"
|
||||
if [ -z "${NVM_COMMAND}" ] || [ -z "${NVM_VERSION_DIR}" ]; then
|
||||
nvm_err 'Second argument "nvm command", and third argument "nvm version dir", must both be nonempty'
|
||||
nvm_error 'Second argument "nvm command", and third argument "nvm version dir", must both be nonempty'
|
||||
return 2
|
||||
fi
|
||||
|
||||
@@ -2735,8 +2790,8 @@ nvm_die_on_prefix() {
|
||||
# however, `npm exec` in npm v7.2+ sets $PREFIX; if set, inherit it
|
||||
if [ -n "${PREFIX-}" ] && [ "$(nvm_version_path "$(node -v)")" != "${PREFIX}" ]; then
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
nvm_err "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"${PREFIX}\""
|
||||
nvm_err 'Run `unset PREFIX` to unset it.'
|
||||
nvm_error "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"${PREFIX}\""
|
||||
nvm_error 'Run `unset PREFIX` to unset it.'
|
||||
return 3
|
||||
fi
|
||||
|
||||
@@ -2759,8 +2814,8 @@ nvm_die_on_prefix() {
|
||||
fi
|
||||
if [ -n "${NVM_CONFIG_VALUE-}" ] && ! nvm_tree_contains_path "${NVM_DIR}" "${NVM_CONFIG_VALUE}"; then
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
nvm_err "nvm is not compatible with the \"${NVM_NPM_CONFIG_x_PREFIX_ENV}\" environment variable: currently set to \"${NVM_CONFIG_VALUE}\""
|
||||
nvm_err "Run \`unset ${NVM_NPM_CONFIG_x_PREFIX_ENV}\` to unset it."
|
||||
nvm_error "nvm is not compatible with the \"${NVM_NPM_CONFIG_x_PREFIX_ENV}\" environment variable: currently set to \"${NVM_CONFIG_VALUE}\""
|
||||
nvm_error "Run \`unset ${NVM_NPM_CONFIG_x_PREFIX_ENV}\` to unset it."
|
||||
return 4
|
||||
fi
|
||||
fi
|
||||
@@ -2784,9 +2839,9 @@ nvm_die_on_prefix() {
|
||||
npm config --loglevel=warn delete prefix --userconfig="${NVM_NPM_BUILTIN_NPMRC}"
|
||||
npm config --loglevel=warn delete globalconfig --userconfig="${NVM_NPM_BUILTIN_NPMRC}"
|
||||
else
|
||||
nvm_err "Your builtin npmrc file ($(nvm_sanitize_path "${NVM_NPM_BUILTIN_NPMRC}"))"
|
||||
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
|
||||
nvm_err "Run \`${NVM_COMMAND}\` to unset it."
|
||||
nvm_error "Your builtin npmrc file ($(nvm_sanitize_path "${NVM_NPM_BUILTIN_NPMRC}"))"
|
||||
nvm_error 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
|
||||
nvm_error "Run \`${NVM_COMMAND}\` to unset it."
|
||||
return 10
|
||||
fi
|
||||
fi
|
||||
@@ -2798,9 +2853,9 @@ nvm_die_on_prefix() {
|
||||
npm config --global --loglevel=warn delete prefix
|
||||
npm config --global --loglevel=warn delete globalconfig
|
||||
else
|
||||
nvm_err "Your global npmrc file ($(nvm_sanitize_path "${NVM_NPM_GLOBAL_NPMRC}"))"
|
||||
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
|
||||
nvm_err "Run \`${NVM_COMMAND}\` to unset it."
|
||||
nvm_error "Your global npmrc file ($(nvm_sanitize_path "${NVM_NPM_GLOBAL_NPMRC}"))"
|
||||
nvm_error 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
|
||||
nvm_error "Run \`${NVM_COMMAND}\` to unset it."
|
||||
return 10
|
||||
fi
|
||||
fi
|
||||
@@ -2812,9 +2867,9 @@ nvm_die_on_prefix() {
|
||||
npm config --loglevel=warn delete prefix --userconfig="${NVM_NPM_USER_NPMRC}"
|
||||
npm config --loglevel=warn delete globalconfig --userconfig="${NVM_NPM_USER_NPMRC}"
|
||||
else
|
||||
nvm_err "Your user’s .npmrc file ($(nvm_sanitize_path "${NVM_NPM_USER_NPMRC}"))"
|
||||
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
|
||||
nvm_err "Run \`${NVM_COMMAND}\` to unset it."
|
||||
nvm_error "Your user's .npmrc file ($(nvm_sanitize_path "${NVM_NPM_USER_NPMRC}"))"
|
||||
nvm_error 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
|
||||
nvm_error "Run \`${NVM_COMMAND}\` to unset it."
|
||||
return 10
|
||||
fi
|
||||
fi
|
||||
@@ -2826,9 +2881,9 @@ nvm_die_on_prefix() {
|
||||
npm config --loglevel=warn delete prefix
|
||||
npm config --loglevel=warn delete globalconfig
|
||||
else
|
||||
nvm_err "Your project npmrc file ($(nvm_sanitize_path "${NVM_NPM_PROJECT_NPMRC}"))"
|
||||
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
|
||||
nvm_err "Run \`${NVM_COMMAND}\` to unset it."
|
||||
nvm_error "Your project npmrc file ($(nvm_sanitize_path "${NVM_NPM_PROJECT_NPMRC}"))"
|
||||
nvm_error 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
|
||||
nvm_error "Run \`${NVM_COMMAND}\` to unset it."
|
||||
return 10
|
||||
fi
|
||||
fi
|
||||
@@ -2913,13 +2968,13 @@ nvm_is_natural_num() {
|
||||
|
||||
nvm_write_nvmrc() {
|
||||
local VERSION_STRING
|
||||
VERSION_STRING=$(nvm_version "${1-$VERSION_STRING}")
|
||||
if [ "$VERSION_STRING" = '∞' ] || [ "$VERSION_STRING" = 'N/A' ]; then
|
||||
VERSION_STRING=$(nvm_version "${1-}")
|
||||
if [ "${VERSION_STRING}" = '∞' ] || [ "${VERSION_STRING}" = 'N/A' ]; then
|
||||
return 1
|
||||
fi
|
||||
echo "$VERSION_STRING" | tee "$PWD"/.nvmrc > /dev/null || {
|
||||
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"
|
||||
nvm_error "Warning: Unable to write version number ($VERSION_STRING) to .nvmrc"
|
||||
fi
|
||||
return 3
|
||||
}
|
||||
@@ -2934,13 +2989,13 @@ nvm_check_file_permissions() {
|
||||
for FILE in "$1"/* "$1"/.[!.]* "$1"/..?* ; do
|
||||
if [ -d "$FILE" ]; then
|
||||
if [ -n "${NVM_DEBUG-}" ]; then
|
||||
nvm_err "${FILE}"
|
||||
nvm_error "${FILE}"
|
||||
fi
|
||||
if [ ! -L "${FILE}" ] && ! nvm_check_file_permissions "${FILE}"; then
|
||||
return 2
|
||||
fi
|
||||
elif [ -e "$FILE" ] && [ ! -w "$FILE" ] && [ ! -O "$FILE" ]; then
|
||||
nvm_err "file is not writable or self-owned: $(nvm_sanitize_path "$FILE")"
|
||||
nvm_error "file is not writable or self-owned: $(nvm_sanitize_path "$FILE")"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
@@ -3356,6 +3411,10 @@ nvm() {
|
||||
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
|
||||
;;
|
||||
@@ -3404,9 +3463,11 @@ nvm() {
|
||||
;;
|
||||
esac
|
||||
|
||||
local EXIT_CODE
|
||||
VERSION="$(NVM_VERSION_ONLY=true NVM_LTS="${LTS-}" nvm_remote_version "${provided_version}")"
|
||||
EXIT_CODE="$?"
|
||||
|
||||
if [ "${VERSION}" = 'N/A' ]; then
|
||||
if [ "${VERSION}" = 'N/A' ] || [ $EXIT_CODE -ne 0 ]; then
|
||||
local LTS_MSG
|
||||
local REMOTE_CMD
|
||||
if [ "${LTS-}" = '*' ]; then
|
||||
@@ -3415,6 +3476,10 @@ nvm() {
|
||||
elif [ -n "${LTS-}" ]; then
|
||||
LTS_MSG="(with LTS filter '${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
|
||||
REMOTE_CMD='nvm ls-remote'
|
||||
fi
|
||||
@@ -3479,7 +3544,6 @@ nvm() {
|
||||
FLAVOR="$(nvm_node_prefix)"
|
||||
fi
|
||||
|
||||
local EXIT_CODE
|
||||
EXIT_CODE=0
|
||||
|
||||
if nvm_is_version_installed "${VERSION}"; then
|
||||
@@ -3507,6 +3571,11 @@ nvm() {
|
||||
nvm_ensure_default_set "${provided_version}"
|
||||
fi
|
||||
|
||||
if [ $NVM_WRITE_TO_NVMRC -eq 1 ]; then
|
||||
nvm_write_nvmrc "${VERSION}"
|
||||
EXIT_CODE=$?
|
||||
fi
|
||||
|
||||
if [ $EXIT_CODE -ne 0 ] && [ -n "${ALIAS-}" ]; then
|
||||
nvm alias "${ALIAS}" "${provided_version}"
|
||||
EXIT_CODE=$?
|
||||
@@ -3558,9 +3627,13 @@ nvm() {
|
||||
EXIT_CODE=$?
|
||||
else
|
||||
EXIT_CODE=-1
|
||||
if [ $nosource -eq 1 ]; then
|
||||
nvm_err "Binary download is not available for ${VERSION}"
|
||||
EXIT_CODE=3
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $EXIT_CODE -ne 0 ]; then
|
||||
if [ $EXIT_CODE -ne 0 ] && [ $nosource -ne 1 ]; then
|
||||
if [ -z "${NVM_MAKE_JOBS-}" ]; then
|
||||
nvm_get_make_jobs
|
||||
fi
|
||||
@@ -3575,7 +3648,8 @@ nvm() {
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ] && nvm_use_if_needed "${VERSION}" && nvm_install_npm_if_needed "${VERSION}"; then
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
if nvm_use_if_needed "${VERSION}" && nvm_install_npm_if_needed "${VERSION}"; then
|
||||
if [ -n "${LTS-}" ]; then
|
||||
nvm_ensure_default_set "lts/${LTS}"
|
||||
else
|
||||
@@ -3595,6 +3669,7 @@ nvm() {
|
||||
else
|
||||
EXIT_CODE=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
return $EXIT_CODE
|
||||
;;
|
||||
@@ -3736,6 +3811,8 @@ nvm() {
|
||||
local NVM_LTS
|
||||
local IS_VERSION_FROM_NVMRC
|
||||
IS_VERSION_FROM_NVMRC=0
|
||||
local NVM_WRITE_TO_NVMRC
|
||||
NVM_WRITE_TO_NVMRC=0
|
||||
|
||||
while [ $# -ne 0 ]; do
|
||||
case "$1" in
|
||||
@@ -3747,7 +3824,13 @@ nvm() {
|
||||
--) ;;
|
||||
--lts) NVM_LTS='*' ;;
|
||||
--lts=*) NVM_LTS="${1##--lts=}" ;;
|
||||
--save | -w) NVM_WRITE_TO_NVMRC=1 ;;
|
||||
--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
|
||||
@@ -3781,8 +3864,8 @@ nvm() {
|
||||
return 127
|
||||
fi
|
||||
|
||||
if [ "${NVM_WRITE_TO_NVMRC:-0}" -eq 1 ]; then
|
||||
nvm_write_nvmrc "$VERSION"
|
||||
if [ $NVM_WRITE_TO_NVMRC -eq 1 ]; then
|
||||
nvm_write_nvmrc "${VERSION}"
|
||||
fi
|
||||
|
||||
if [ "_${VERSION}" = '_system' ]; then
|
||||
@@ -3800,7 +3883,7 @@ nvm() {
|
||||
nvm_err 'System version of node not found.'
|
||||
fi
|
||||
return 127
|
||||
elif [ "_${VERSION}" = "_∞" ]; then
|
||||
elif [ "_${VERSION}" = '_∞' ]; then
|
||||
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
||||
nvm_err "The alias \"${PROVIDED_VERSION}\" leads to an infinite loop. Aborting."
|
||||
fi
|
||||
@@ -4364,7 +4447,7 @@ nvm() {
|
||||
NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}"
|
||||
;;
|
||||
"--version" | "-v")
|
||||
nvm_echo '0.40.0'
|
||||
nvm_echo '0.40.1'
|
||||
;;
|
||||
"unload")
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
@@ -4529,31 +4612,44 @@ nvm_supports_xz() {
|
||||
nvm_auto() {
|
||||
local NVM_MODE
|
||||
NVM_MODE="${1-}"
|
||||
|
||||
case "${NVM_MODE}" in
|
||||
none) return 0 ;;
|
||||
use)
|
||||
local VERSION
|
||||
local NVM_CURRENT
|
||||
if [ "_${NVM_MODE}" = '_install' ]; then
|
||||
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
|
||||
nvm install >/dev/null
|
||||
fi
|
||||
elif [ "_$NVM_MODE" = '_use' ]; then
|
||||
NVM_CURRENT="$(nvm_ls_current)"
|
||||
if [ "_${NVM_CURRENT}" = '_none' ] || [ "_${NVM_CURRENT}" = '_system' ]; then
|
||||
VERSION="$(nvm_resolve_local_alias default 2>/dev/null || nvm_echo)"
|
||||
if [ -n "${VERSION}" ] && ! [ "_${VERSION}" = '_N/A' ] && nvm_is_valid_version "${VERSION}"; then
|
||||
if [ -n "${VERSION}" ]; then
|
||||
if [ "_${VERSION}" != '_N/A' ] && nvm_is_valid_version "${VERSION}"; then
|
||||
nvm use --silent "${VERSION}" >/dev/null
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
elif nvm_rc_version >/dev/null 2>&1; then
|
||||
nvm use --silent >/dev/null
|
||||
fi
|
||||
else
|
||||
nvm use --silent "${NVM_CURRENT}" >/dev/null
|
||||
fi
|
||||
elif [ "_${NVM_MODE}" != '_none' ]; then
|
||||
;;
|
||||
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
|
||||
nvm install >/dev/null
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
nvm_err 'Invalid auto mode supplied.'
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
nvm_process_parameters() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "nvm",
|
||||
"version": "0.40.0",
|
||||
"version": "0.40.1",
|
||||
"description": "Node Version Manager - Simple bash script to manage multiple active node.js versions",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
@@ -14,6 +14,8 @@
|
||||
"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/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",
|
||||
"predoctoc:check": "cp README.md v-README.md.orig && npm run doctoc",
|
||||
"doctoc:check": "diff -q README.md v-README.md.orig",
|
||||
|
||||
36
test/fast/Unit tests/Running 'nvm install --save' works as expected'
Normal file → Executable file
36
test/fast/Unit tests/Running 'nvm install --save' works as expected'
Normal file → Executable file
@@ -4,7 +4,7 @@
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
TEST_VERSION='v0.2.4'
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
@@ -12,7 +12,7 @@ cleanup () {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v* .nvmrc
|
||||
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
|
||||
}
|
||||
@@ -23,21 +23,39 @@ die () {
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "$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() {
|
||||
cat "$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"
|
||||
make_fake_node "${TEST_VERSION}"
|
||||
|
||||
nvm install --save "$TEST_VERSION" || die "\`nvm install --save $TEST_VERSION\` failed"
|
||||
nvm install -w "${TEST_VERSION}" || die "\`nvm install -w ${TEST_VERSION}\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
||||
|| die "\`nvm install --save $TEST_VERSION\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
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
|
||||
|
||||
61
test/fast/Unit tests/Running 'nvm use --save' works as expected'
Executable file
61
test/fast/Unit tests/Running 'nvm use --save' works as expected'
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/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
|
||||
0
test/fast/Unit tests/Running 'nvm use --save' works with a .nvmrc in the parent dir
Normal file → Executable file
0
test/fast/Unit tests/Running 'nvm use --save' works with a .nvmrc in the parent dir
Normal file → Executable file
28
test/fast/Unit tests/Running 'nvm use --silent --save' doesn't output anything
Normal file → Executable file
28
test/fast/Unit tests/Running 'nvm use --silent --save' doesn't output anything
Normal file → Executable file
@@ -12,7 +12,7 @@ cleanup () {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v* .nvmrc
|
||||
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
|
||||
}
|
||||
@@ -23,21 +23,29 @@ die () {
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||
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() {
|
||||
cat "$REMOTE_IOJS"
|
||||
cat "${REMOTE_IOJS}"
|
||||
}
|
||||
|
||||
make_fake_node "$TEST_VERSION"
|
||||
make_fake_node "${TEST_VERSION}"
|
||||
|
||||
OUTPUT=$(nvm use --save --silent "$TEST_VERSION" || die "\`nvm use --save --silent $TEST_VERSION\` failed")
|
||||
EXPECTED_OUTPUT=""
|
||||
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'"
|
||||
[ "_${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
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
set -e
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
|
||||
cleanup () {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v* .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
|
||||
}
|
||||
|
||||
nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
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"
|
||||
|
||||
# 1. install
|
||||
|
||||
nvm install -w "$TEST_VERSION" || die "\`nvm install -w $TEST_VERSION\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
||||
|| die "\`nvm install -w $TEST_VERSION\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
|
||||
#
|
||||
|
||||
unset OUTPUT
|
||||
|
||||
# 2. use
|
||||
|
||||
nvm use -w "$TEST_VERSION" || die "\`nvm use -w $TEST_VERSION\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
||||
|| die "\`nvm use -w $TEST_VERSION\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
|
||||
#
|
||||
|
||||
cleanup
|
||||
20
test/fast/Unit tests/nvm install -b
Executable file
20
test/fast/Unit tests/nvm install -b
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/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}<"
|
||||
35
test/fast/Unit tests/nvm install with nonlowercase LTS name
Executable file
35
test/fast/Unit tests/nvm install with nonlowercase LTS name
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/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}<"
|
||||
@@ -1,19 +1,17 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
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
|
||||
fi
|
||||
unset TEMP_NVM_COLORS
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
if [ -n ${NVM_COLORS} ]; then
|
||||
if [ -n "${NVM_COLORS-}" ]; then
|
||||
export TEMP_NVM_COLORS=NVM_COLORS
|
||||
unset NVM_COLORS
|
||||
fi
|
||||
@@ -22,11 +20,11 @@ nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
MOCKS_DIR="$PWD/mocks"
|
||||
MOCKS_DIR="${PWD}/mocks"
|
||||
|
||||
nvm_download() {
|
||||
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
|
||||
fi
|
||||
return 42
|
||||
@@ -34,15 +32,15 @@ nvm_download() {
|
||||
|
||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
||||
OUTPUT="$(nvm ls-remote --lts | 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 $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
||||
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}<"
|
||||
|
||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
||||
OUTPUT="$(nvm ls-remote "lts/*" | 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 $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
||||
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}<"
|
||||
|
||||
MOCKS_DIR="$PWD/mocks"
|
||||
MOCKS_DIR="${PWD}/mocks"
|
||||
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
||||
LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)"
|
||||
|
||||
@@ -56,18 +54,26 @@ printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
|
||||
INDEX=$(($INDEX + 1))
|
||||
done
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
OUTPUT="$(nvm ls-remote lts/ARGON 2>&1)"
|
||||
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() {
|
||||
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() {
|
||||
cat "$REMOTE_IOJS"
|
||||
cat "${REMOTE_IOJS}"
|
||||
}
|
||||
|
||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt"
|
||||
OUTPUT="$(nvm ls-remote | 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 $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
||||
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}<"
|
||||
|
||||
cleanup
|
||||
|
||||
8
test/fast/Unit tests/nvm_download
Normal file → Executable file
8
test/fast/Unit tests/nvm_download
Normal file → Executable file
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
cleanup () {
|
||||
unset -f die cleanup NVM_AUTH_HEADER
|
||||
unset -f die cleanup
|
||||
docker stop httpbin && docker rm httpbin
|
||||
}
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
@@ -17,12 +17,14 @@ nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/de
|
||||
! 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 && docker run --shell=bash -d --name httpbin -p 80:80 kennethreitz/httpbin
|
||||
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'
|
||||
docker stop httpbin && docker rm httpbin
|
||||
|
||||
# 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
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
# Save the PATH as it was when the test started to restore it when it
|
||||
# finishes
|
||||
ORIG_PATH=$PATH
|
||||
ORIG_PATH="${PATH}"
|
||||
|
||||
cleanup() {
|
||||
# Restore the PATH as it was when the test started
|
||||
export PATH=ORIG_PATH
|
||||
export PATH="${ORIG_PATH}"
|
||||
}
|
||||
|
||||
die () { cleanup; echo "$@" ; exit 1; }
|
||||
@@ -15,20 +15,23 @@ die () { cleanup; echo "$@" ; exit 1; }
|
||||
|
||||
# Directory where mocked binaries used by nvm_get_arch for each OS/arch are
|
||||
# located
|
||||
MOCKS_DIR=`pwd`/../../mocks
|
||||
MOCKS_DIR="$(pwd)/../../mocks"
|
||||
# Sets the PATH for these tests to include the symlinks to the mocked
|
||||
# binaries
|
||||
export PATH=.:${PATH}
|
||||
export PATH=".:${PATH}"
|
||||
|
||||
# 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 architecture of a given system.
|
||||
setup_mock_arch() {
|
||||
local OS=$1
|
||||
local ARCH=$2
|
||||
local OPT=$3
|
||||
local OS
|
||||
OS=$1
|
||||
local ARCH
|
||||
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
|
||||
if [ "_$OPT" != "_no_pkg_info" ]; then
|
||||
ln -sf "${MOCKS_DIR}/pkg_info_${ARCH}" ./pkg_info
|
||||
@@ -42,10 +45,12 @@ setup_mock_arch() {
|
||||
|
||||
# Cleans up the setup done by setup_mock_arch.
|
||||
cleanup_mock_arch() {
|
||||
local OS=$1
|
||||
local ARCH=$2
|
||||
local OS
|
||||
OS=$1
|
||||
local ARCH
|
||||
ARCH=$2
|
||||
|
||||
if [ "_$OS" = "_solaris" ] || [ "_$OS" = "_smartos" ]; then
|
||||
if [ "_${OS}" = '_solaris' ] || [ "_${OS}" = '_smartos' ]; then
|
||||
rm -f ./isainfo
|
||||
rm -f ./pkg_info
|
||||
fi
|
||||
@@ -57,17 +62,22 @@ cleanup_mock_arch() {
|
||||
# expected output $EXPECTED_OUTPUT with the actual output. Does nothing
|
||||
# and exits cleanly if they match, dies otherwise.
|
||||
run_test() {
|
||||
local ARCH=$1
|
||||
local OS=$2
|
||||
local EXPECTED_OUTPUT=$3
|
||||
local OPT=$4
|
||||
local ARCH
|
||||
ARCH=$1
|
||||
local OS
|
||||
OS=$2
|
||||
local EXPECTED_OUTPUT
|
||||
EXPECTED_OUTPUT=$3
|
||||
local OPT
|
||||
OPT=$4
|
||||
|
||||
setup_mock_arch $OS $ARCH $OPT
|
||||
local OUTPUT="$(nvm_get_arch)"
|
||||
cleanup_mock_arch $OS $ARCH
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] ||
|
||||
die "nvm_get_arch for OS \"$OS\" and arch \"$ARCH\" with OPT \"$OPT\" did
|
||||
not return \"$EXPECTED_OUTPUT\"; got \"$OUTPUT\""
|
||||
setup_mock_arch "${OS}" "${ARCH}" "${OPT}"
|
||||
local OUTPUT
|
||||
OUTPUT="$(nvm_get_arch)"
|
||||
cleanup_mock_arch "${OS}" "${ARCH}"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] ||
|
||||
die "nvm_get_arch for OS \"${OS}\" and arch \"${ARCH}\" with OPT \"${OPT}\" did
|
||||
not return \"${EXPECTED_OUTPUT}\"; got \"${OUTPUT}\""
|
||||
}
|
||||
|
||||
run_test x86 smartos x86
|
||||
|
||||
@@ -2,27 +2,29 @@
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
FILE="$NVM_DIR/default-packages"
|
||||
FILE="${NVM_DIR}/default-packages"
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
setup () {
|
||||
if [ -f $FILE ]; then
|
||||
ORIG_DEFAULT_PACKAGES=$(cat $FILE)
|
||||
if [ -f "${FILE}" ]; then
|
||||
ORIG_DEFAULT_PACKAGES=$(cat "${FILE}")
|
||||
mkdir -p ./tmp/ ||:
|
||||
mv $FILE ./tmp/default-packages ||:
|
||||
mv "${FILE}" ./tmp/default-packages ||:
|
||||
fi
|
||||
touch $FILE
|
||||
touch "${FILE}"
|
||||
}
|
||||
cleanup () {
|
||||
if [ "$ORIG_DEFAULT_PACKAGES" != "" ]; then
|
||||
if [ "${ORIG_DEFAULT_PACKAGES}" != "" ]; then
|
||||
rm -rf ./tmp/
|
||||
echo "$ORIG_DEFAULT_PACKAGES" > $FILE
|
||||
echo "${ORIG_DEFAULT_PACKAGES}" > "${FILE}"
|
||||
else
|
||||
rm "${FILE}"
|
||||
fi
|
||||
}
|
||||
|
||||
setup
|
||||
|
||||
cat > $FILE << EOF
|
||||
cat > "${FILE}" << EOF
|
||||
rimraf
|
||||
object-inspect@1.0.2
|
||||
|
||||
@@ -39,7 +41,7 @@ cleanup
|
||||
|
||||
setup
|
||||
|
||||
cat > $FILE << EOF
|
||||
cat > "${FILE}" << EOF
|
||||
rimraf
|
||||
not~a~package~name
|
||||
mkdirp
|
||||
@@ -53,12 +55,12 @@ cleanup
|
||||
|
||||
setup
|
||||
|
||||
cat > $FILE << EOF
|
||||
cat > "${FILE}" << EOF
|
||||
rimraf
|
||||
not~a~package~name
|
||||
mkdirp
|
||||
EOF
|
||||
printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline
|
||||
printf %s "$(cat "${FILE}")" > "${FILE}" # strip trailing newline
|
||||
|
||||
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
||||
EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
|
||||
@@ -68,7 +70,7 @@ cleanup
|
||||
|
||||
setup
|
||||
|
||||
cat > $FILE << EOF
|
||||
cat > "${FILE}" << EOF
|
||||
object-inspect @ 1.0.2
|
||||
rimraf
|
||||
EOF
|
||||
@@ -81,12 +83,12 @@ cleanup
|
||||
|
||||
setup
|
||||
|
||||
rm -rf $FILE
|
||||
rm -rf "${FILE}"
|
||||
|
||||
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
||||
EXPECTED_PKGS=''
|
||||
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
||||
|
||||
touch $FILE
|
||||
touch "${FILE}"
|
||||
|
||||
cleanup
|
||||
|
||||
47
test/fast/Unit tests/nvm_install_binary_extract
Normal file → Executable file
47
test/fast/Unit tests/nvm_install_binary_extract
Normal file → Executable file
@@ -1,8 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
cleanup() {
|
||||
[ -d "$tmp_dir" ] && rm -rf "$tmp_dir"
|
||||
[ -d "$NVM_DIR" ] && rm -rf "$NVM_DIR"
|
||||
[ -d "${tmp_dir}" ] && rm -rf "${tmp_dir}"
|
||||
[ -d "${NVM_DIR}" ] && rm -rf "${NVM_DIR}"
|
||||
unset -f die cleanup test_archi nvm_supports_xz
|
||||
unset NVM_DIR tmp_dir version archi
|
||||
}
|
||||
@@ -10,24 +10,34 @@ cleanup () {
|
||||
die() { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
test_archi() {
|
||||
local os="$1"
|
||||
local version="$2"
|
||||
local archi="$os-$3"
|
||||
local node="$4"
|
||||
local ext="$5"
|
||||
local command="$6"
|
||||
local command_option="$7"
|
||||
local node_path="$tmp_dir/node-$version-$archi/$node"
|
||||
local os
|
||||
os="$1"
|
||||
local version
|
||||
version="$2"
|
||||
local archi
|
||||
archi="$os-$3"
|
||||
local node
|
||||
node="$4"
|
||||
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
|
||||
mkdir -p "$(dirname "$node_path")"
|
||||
echo "node $version" > "$node_path"
|
||||
(cd "$tmp_dir" && "$command" "$command_option" "$tmp_dir/node-$version-$archi.$ext" "node-$version-$archi" && rm -rf "$tmp_dir/node-$version-$archi")
|
||||
[ -f "$tmp_dir/node-$version-$archi.$ext" ] || die "Unable to create fake $ext file"
|
||||
mkdir -p "$(dirname "${node_path}")"
|
||||
echo "node ${version}" > "${node_path}"
|
||||
(cd "${tmp_dir}" && "${command}" "${command_option}" "${node_dir}.${ext}" "node-${version}-${archi}")
|
||||
[ -f "${node_dir}.${ext}" ] || die "Unable to create fake ${ext} file"
|
||||
|
||||
# Extract it
|
||||
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"
|
||||
nvm_install_binary_extract "$os" "$version" "$(expr "${version}" : '.\(.*\)')" "${node_dir}.$ext" "${tmp_dir}/files"
|
||||
[ "$(cat "${NVM_DIR}/versions/node/${version}/bin/node")" = "node ${version}" ] || die "Unable to extract ${ext} file"
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
@@ -39,12 +49,13 @@ type nvm_install_binary_extract > /dev/null 2>&1 || die 'nvm_install_binary_extr
|
||||
|
||||
NVM_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'
|
||||
fi
|
||||
|
||||
# Test windows zip
|
||||
test_archi 'win' 'v15.6.0' 'x64' 'node' 'zip' 'zip' '-qr'
|
||||
# TODO: enable this
|
||||
# test_archi 'win' 'v15.6.0' 'x64' 'node' 'zip' 'zip' '-qr'
|
||||
|
||||
# Test linux tar.xz
|
||||
test_archi 'linux' 'v14.15.4' 'x64' 'bin/node' 'tar.xz' 'tar' '-cJf'
|
||||
|
||||
58
test/fast/Unit tests/nvm_install_no_progress_bar
Normal file → Executable file
58
test/fast/Unit tests/nvm_install_no_progress_bar
Normal file → Executable file
@@ -6,18 +6,16 @@ cleanup () {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
rm -rf ${NVM_DIR}/v*
|
||||
nvm unalias default
|
||||
nvm unalias default || true
|
||||
}
|
||||
|
||||
die () { >&2 echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
nvm_has_colors() { return 1 ; }
|
||||
|
||||
cleanup
|
||||
|
||||
OUTPUT="$(2>&1 nvm install --no-progress v0.12.18)"
|
||||
OUTPUT="$(TERM=dumb 2>&1 nvm install --no-progress 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...
|
||||
Computing checksum with sha256sum
|
||||
@@ -25,19 +23,63 @@ Checksums matched!
|
||||
Now using node v0.12.18 (npm v2.15.11)
|
||||
Creating default alias: default -> v0.12.18 *"
|
||||
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "1: expected >
|
||||
${EXPECTED_OUTPUT}<, got >
|
||||
${OUTPUT}<"
|
||||
|
||||
cleanup
|
||||
|
||||
OUTPUT="$(2>&1 nvm install v0.12.18)"
|
||||
OUTPUT="$(TERM=dumb 2>&1 nvm install 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...
|
||||
######################################################################## 100.0%
|
||||
######################################################################### 100.0%
|
||||
Computing checksum with sha256sum
|
||||
Checksums matched!
|
||||
Now using node v0.12.18 (npm v2.15.11)
|
||||
Creating default alias: default -> v0.12.18 *"
|
||||
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "$(echo "${OUTPUT}" | wc -l)" = "$(echo "${EXPECTED_OUTPUT}" | wc -l)" ] || die "2: expected 7 lines, got $(echo "${OUTPUT}" | wc -l)"
|
||||
|
||||
# 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
|
||||
|
||||
0
test/fast/Unit tests/nvm_is_version_installed
Normal file → Executable file
0
test/fast/Unit tests/nvm_is_version_installed
Normal file → Executable file
@@ -16,6 +16,9 @@ ACTUAL="$(nvm_normalize_lts "lts/*")"
|
||||
EXPECTED='lts/*'
|
||||
[ "${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"
|
||||
STAR="$(cat "$MOCKS_DIR/lts-star.txt")"
|
||||
|
||||
0
test/fast/Unit tests/nvm_write_nvmrc
Normal file → Executable file
0
test/fast/Unit tests/nvm_write_nvmrc
Normal file → Executable file
0
test/fast/nvm should remove the last trailing slash in $NVM_DIR
Normal file → Executable file
0
test/fast/nvm should remove the last trailing slash in $NVM_DIR
Normal file → Executable file
@@ -27,15 +27,15 @@ setup () {
|
||||
mkdir -p "$npm_config_prefix/lib"
|
||||
}
|
||||
|
||||
|
||||
setup
|
||||
|
||||
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)
|
||||
[ ! -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}" ]; then
|
||||
if [ -n "${ORIGINAL_NVM_DIR}" ] && [ -z "${GITHUB_ACTIONS}" ]; then
|
||||
# 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)
|
||||
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm is managed by nvm; got:\n${message}"
|
||||
fi
|
||||
|
||||
2
test/install_script/nvm_download
Normal file → Executable file
2
test/install_script/nvm_download
Normal file → Executable 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
|
||||
if nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" &>/dev/null; then
|
||||
die "nvm_download should fail to download no existing file"
|
||||
die "nvm_download should fail to download nonexistent file"
|
||||
fi
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -9,20 +9,20 @@ die () { echo "$@" ; exit 1; }
|
||||
nvm unalias default >/dev/null 2>&1 || die 'unable to unalias default'
|
||||
|
||||
set +ex # needed for stderr
|
||||
OUTPUT="$(nvm install --lts 3 2>&1)"
|
||||
OUTPUT="$(nvm install --lts 0.12 2>&1)"
|
||||
EXIT_CODE="$?"
|
||||
set -ex
|
||||
EXIT_CODE="$(nvm install --lts 3 >/dev/null 2>&1 && echo $? || echo $?)"
|
||||
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}<"
|
||||
EXPECTED_OUTPUT="Version '0.12' (with LTS filter) not found - try \`nvm ls-remote --lts\` to browse available versions."
|
||||
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts 0.12\` did not exit with 3, got >${EXIT_CODE}<"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts 3\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
|
||||
|
||||
set +ex # needed for stderr
|
||||
OUTPUT="$(nvm install --lts=argon 3 2>&1)"
|
||||
set -ex
|
||||
EXIT_CODE="$(nvm install --lts=argon 3 >/dev/null 2>&1 && echo $? || echo $?)"
|
||||
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 3\` did not exit with 3, got >${EXIT_CODE}<"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts=argon 3\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
|
||||
OUTPUT="$(nvm install --lts=argon 0.12 2>&1)"
|
||||
EXIT_CODE="$?"
|
||||
set -x
|
||||
EXPECTED_OUTPUT="Version '0.12' (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}<"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts=argon 0.12\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
|
||||
|
||||
nvm install --lts 4.2.2 || die 'nvm install --lts 4.2.2 failed'
|
||||
|
||||
|
||||
34
test/installation_node/install from binary with binary flag set
Normal file → Executable file
34
test/installation_node/install from binary with binary flag set
Normal file → Executable file
@@ -1,6 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
die () {
|
||||
unset -f nvm_install_binary nvm_install_source
|
||||
echo "$@"
|
||||
exit 1
|
||||
}
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
@@ -22,16 +26,28 @@ nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || die "'nvm run $N
|
||||
NVM_CURRENT_DEFAULT="$(nvm_alias default)"
|
||||
[ "$NVM_CURRENT_DEFAULT" = "$NVM_TEST_VERSION" ] || die "wrong default alias: $(nvm alias)"
|
||||
|
||||
# Falls back to source but if -b is set fails binary download.
|
||||
nvm_install_binary() {
|
||||
>&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)"
|
||||
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
|
||||
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" = "${OUTPUT}" ]; then
|
||||
EXPECTED_OUTPUT='binary failed'
|
||||
if [ "${OUTPUT#*"${EXPECTED_OUTPUT}"}" = "${OUTPUT}" ]; then
|
||||
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
|
||||
fi
|
||||
|
||||
# Falls back to source but if -b is not set.
|
||||
nvm_install_source() {
|
||||
>&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)"
|
||||
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
|
||||
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" != "${OUTPUT}" ]; then
|
||||
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
|
||||
fi
|
||||
EXPECTED_OUTPUT="binary failed
|
||||
Detected that you have 2 CPU core(s)
|
||||
Number of CPU core(s) less than or equal to 2, running in single-threaded mode
|
||||
source intentionally failed"
|
||||
|
||||
[ "${EXPECTED_OUTPUT}" = "${OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
|
||||
0
test/slow/nvm reinstall-packages/test-npmlink/index.js
Executable file → Normal file
0
test/slow/nvm reinstall-packages/test-npmlink/index.js
Executable file → Normal file
19
test/slow/nvm use/Running 'nvm use lts' shows actionable error
Executable file
19
test/slow/nvm use/Running 'nvm use lts' shows actionable error
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
# Deactivate any active node version
|
||||
nvm deactivate >/dev/null 2>&1 || die 'deactivate failed'
|
||||
|
||||
# Attempt to use 'lts' without '--' and capture the error message
|
||||
ERROR_OUTPUT=$(nvm use lts 2>&1) || true
|
||||
|
||||
EXPECTED_ERROR='`lts` is not an alias - you may need to run `nvm install --lts` to install and `nvm use --lts` to use it.'
|
||||
|
||||
# Check if the error message matches the expected output
|
||||
echo "$ERROR_OUTPUT" | grep -q "$EXPECTED_ERROR" \
|
||||
|| die "Expected error message not found. Got: $ERROR_OUTPUT"
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
die () { echo "$*" ; echo "|${NVM_DIR}|"; exit 1; }
|
||||
|
||||
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_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_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"
|
||||
|
||||
@@ -8,21 +8,21 @@ die () { echo "$@" ; exit 1; }
|
||||
# despite being unloaded in setup, the inherited PATH still contains
|
||||
# an nvm-installed node version. We have to reset NVM_DIR after the unload.
|
||||
\. ../../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_DIR="$NVM_DIR_CACHED"
|
||||
NVM_DIR="${NVM_DIR_CACHED}"
|
||||
|
||||
echo '0.10.1' > ../../alias/default || die 'creation of default alias failed'
|
||||
echo '0.10.1' > "${NVM_DIR}/alias/default" || die 'creation of default alias failed'
|
||||
|
||||
# Now to begin the real test
|
||||
\. ../../nvm.sh || die 'sourcing returned nonzero exit code'
|
||||
|
||||
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" = '_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_ALIAS_DEFAULT="$(nvm alias default | strip_colors)"
|
||||
[ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.1 (-> v0.10.1)" ] \
|
||||
|| die "'nvm alias default did not return 'default -> 0.10.1 (-> v0.10.1)', got '$NVM_ALIAS_DEFAULT'"
|
||||
[ "_${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}'"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
die () { echo "$*" ; echo "|${NVM_DIR}|"; exit 1; }
|
||||
|
||||
supports_source_options () {
|
||||
[ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ]
|
||||
}
|
||||
@@ -10,18 +11,23 @@ if ! supports_source_options; then
|
||||
exit 0;
|
||||
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
|
||||
EXIT_CODE="$(echo $?)"
|
||||
EXIT_CODE="$?"
|
||||
|
||||
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)"
|
||||
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE"
|
||||
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}"
|
||||
|
||||
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' `nvm ls`"
|
||||
[ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got >${NVM_LS_CURRENT}<\n$(nvm_ls)"
|
||||
|
||||
rm .nvmrc
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
\. ../common.sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
supports_source_options () {
|
||||
[ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ]
|
||||
}
|
||||
@@ -11,22 +12,26 @@ if ! supports_source_options; then
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
rm .nvmrc
|
||||
export NVM_DIR="${PWD}/../.."
|
||||
echo '0.10.2' > ../../alias/default || die 'creation of default alias failed'
|
||||
|
||||
echo 'sourcing nvm with --install...'
|
||||
|
||||
\. ../../nvm.sh --install
|
||||
EXIT_CODE="$(echo $?)"
|
||||
EXIT_CODE="$?"
|
||||
|
||||
echo 'sourcing complete.'
|
||||
|
||||
nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: $(nvm ls)"
|
||||
[ "$(nvm_alias default)" = '0.10.2' ] || die "nvm_alias default did not return '0.10.2', got >$(nvm_alias default)<"
|
||||
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE"
|
||||
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}"
|
||||
|
||||
NVM_LS_CURRENT="$(nvm ls current | strip_colors | command grep -o v0.10.2)"
|
||||
[ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got '$NVM_LS_CURRENT'"
|
||||
[ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', >${NVM_LS_CURRENT}<\n$(nvm_ls)"
|
||||
|
||||
NVM_ALIAS_DEFAULT="$(nvm alias default | strip_colors)"
|
||||
[ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.2 (-> v0.10.2)" ] \
|
||||
|| die "'nvm alias default did not return 'default -> 0.10.2 (-> v0.10.2)', got '$NVM_ALIAS_DEFAULT'"
|
||||
|| die "'nvm alias default did not return 'default -> 0.10.2 (-> v0.10.2)', got >${NVM_ALIAS_DEFAULT}<\n$(nvm_ls)"
|
||||
|
||||
@@ -4,4 +4,5 @@ rm -rf ../../alias
|
||||
rm -rf ../../v0.10.1
|
||||
rm -rf ../../v0.10.2
|
||||
rm -rf ../../v0.10.3
|
||||
rm -rf ../../versions/node/v4.1.0
|
||||
rm -f ../../.nvmrc
|
||||
Reference in New Issue
Block a user