Compare commits

..

13 Commits

Author SHA1 Message Date
Jordan Harband
c80b89720f fixup 2024-08-20 22:47:56 -07:00
Jordan Harband
4792d122b1 [Fix] nvm_download: ensure all args are quoted 2024-08-20 22:33:38 -07:00
Jordan Harband
c31a867c46 [Fix] --save: avoid a conflict with set -e
Fixes #3405.
2024-08-10 15:52:24 +12:00
Jordan Harband
a8c418558a [Refactor] --save: clean up some usage 2024-08-20 16:21:45 -07:00
Jordan Harband
d5e2c92a25 [Fix] nvm_has_colors: avoid an aliased tput
Fixes #3413
2024-08-20 09:23:45 -07:00
Jordan Harband
81f18bc445 [patch] install.sh: fix node capitalization 2024-08-09 13:46:16 +12:00
Jordan Harband
4beab63631 [Fix] declare an unbound variable
Fixes #3402
2024-08-07 17:38:37 +12:00
Jordan Harband
14acd3dcdd [Fix] nvm install -b: do not attempt to download source on a failed binary download with -b
Fixes #3399
2024-08-01 10:35:37 -07:00
Jordan Harband
271720ebfc [Fix] nvm install -b: when no binary is available, fail and output a clear message 2024-08-01 13:57:22 -07:00
Jordan Harband
423ee82b4c [Tests] fix nvm ls-remote unit test 2024-08-01 10:22:28 -07:00
Jordan Harband
deac4e0932 v0.40.0 2024-07-30 12:50:18 -07:00
Jordan Harband
b5118ac365 [Dev Deps] update semver 2024-07-30 11:35:15 -07:00
Jordan Harband
24deac7ac5 [readme] add OpenJS Ecosystem Sustainability Program partner
- https://openjsf.org/ecosystem-sustainability-program
2024-07-30 10:08:48 -07:00
16 changed files with 304 additions and 131 deletions

104
.github/workflows/nvm-install-test.yml vendored Normal file
View 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

View File

@@ -6,7 +6,7 @@
</a> </a>
# Node Version Manager [![Build Status](https://app.travis-ci.com/nvm-sh/nvm.svg?branch=master)][3] [![nvm version](https://img.shields.io/badge/version-v0.39.7-yellow.svg)][4] [![CII Best Practices](https://bestpractices.dev/projects/684/badge)](https://bestpractices.dev/projects/684) # Node Version Manager [![Build Status](https://app.travis-ci.com/nvm-sh/nvm.svg?branch=master)][3] [![nvm version](https://img.shields.io/badge/version-v0.40.0-yellow.svg)][4] [![CII Best Practices](https://bestpractices.dev/projects/684/badge)](https://bestpractices.dev/projects/684)
<!-- To update this table of contents, ensure you have run `npm install` then `npm run doctoc` --> <!-- To update this table of contents, ensure you have run `npm install` then `npm run doctoc` -->
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- START doctoc generated TOC please keep comment here to allow auto update -->
@@ -61,6 +61,8 @@
- [macOS Troubleshooting](#macos-troubleshooting) - [macOS Troubleshooting](#macos-troubleshooting)
- [WSL Troubleshooting](#wsl-troubleshooting) - [WSL Troubleshooting](#wsl-troubleshooting)
- [Maintainers](#maintainers) - [Maintainers](#maintainers)
- [Project Support](#project-support)
- [Enterprise Support](#enterprise-support)
- [License](#license) - [License](#license)
- [Copyright notice](#copyright-notice) - [Copyright notice](#copyright-notice)
@@ -100,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: To **install** or **update** nvm, you should run the [install script][2]. To do that, you may either download and run the script manually, or use the following cURL or Wget command:
```sh ```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
``` ```
```sh ```sh
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
``` ```
Running either of the above commands downloads a script and runs it. The script clones the nvm repository to `~/.nvm`, and attempts to add the source lines from the snippet below to the correct profile file (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`). Running either of the above commands downloads a script and runs it. The script clones the nvm repository to `~/.nvm`, and attempts to add the source lines from the snippet below to the correct profile file (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`).
@@ -125,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. - 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.39.7/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.0/install.sh | bash'`
#### Troubleshooting on Linux #### Troubleshooting on Linux
@@ -173,7 +175,7 @@ You can use a task:
```yaml ```yaml
- name: Install nvm - name: Install nvm
ansible.builtin.shell: > ansible.builtin.shell: >
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
args: args:
creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh" creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"
``` ```
@@ -235,7 +237,7 @@ If you have `git` installed (requires git v1.7.10+):
1. clone this repo in the root of your user profile 1. clone this repo in the root of your user profile
- `cd ~/` from anywhere then `git clone https://github.com/nvm-sh/nvm.git .nvm` - `cd ~/` from anywhere then `git clone https://github.com/nvm-sh/nvm.git .nvm`
1. `cd ~/.nvm` and check out the latest version with `git checkout v0.39.7` 1. `cd ~/.nvm` and check out the latest version with `git checkout v0.40.0`
1. activate `nvm` by sourcing it from your shell: `. ./nvm.sh` 1. activate `nvm` by sourcing it from your shell: `. ./nvm.sh`
Now add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login: Now add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login:
@@ -841,13 +843,13 @@ If installing nvm on Alpine Linux *is* still what you want or need to do, you sh
### Alpine Linux 3.13+ ### Alpine Linux 3.13+
```sh ```sh
apk add -U curl bash ca-certificates openssl ncurses coreutils python3 make gcc g++ libgcc linux-headers grep util-linux binutils findutils apk add -U curl bash ca-certificates openssl ncurses coreutils python3 make gcc g++ libgcc linux-headers grep util-linux binutils findutils
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
``` ```
### Alpine Linux 3.5 - 3.12 ### Alpine Linux 3.5 - 3.12
```sh ```sh
apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
``` ```
_Note: Alpine 3.5 can only install NodeJS versions up to v6.9.5, Alpine 3.6 can only install versions up to v6.10.3, Alpine 3.7 installs versions up to v8.9.3, Alpine 3.8 installs versions up to v8.14.0, Alpine 3.9 installs versions up to v10.19.0, Alpine 3.10 installs versions up to v10.24.1, Alpine 3.11 installs versions up to v12.22.6, Alpine 3.12 installs versions up to v12.22.12, Alpine 3.13 & 3.14 install versions up to v14.20.0, Alpine 3.15 & 3.16 install versions up to v16.16.0 (**These are all versions on the main branch**). Alpine 3.5 - 3.12 required the package `python2` to build NodeJS, as they are older versions to build. Alpine 3.13+ requires `python3` to successfully build newer NodeJS versions, but you can use `python2` with Alpine 3.13+ if you need to build versions of node supported in Alpine 3.5 - 3.15, you just need to specify what version of NodeJS you need to install in the package install script._ _Note: Alpine 3.5 can only install NodeJS versions up to v6.9.5, Alpine 3.6 can only install versions up to v6.10.3, Alpine 3.7 installs versions up to v8.9.3, Alpine 3.8 installs versions up to v8.14.0, Alpine 3.9 installs versions up to v10.19.0, Alpine 3.10 installs versions up to v10.24.1, Alpine 3.11 installs versions up to v12.22.6, Alpine 3.12 installs versions up to v12.22.12, Alpine 3.13 & 3.14 install versions up to v14.20.0, Alpine 3.15 & 3.16 install versions up to v16.16.0 (**These are all versions on the main branch**). Alpine 3.5 - 3.12 required the package `python2` to build NodeJS, as they are older versions to build. Alpine 3.13+ requires `python3` to successfully build newer NodeJS versions, but you can use `python2` with Alpine 3.13+ if you need to build versions of node supported in Alpine 3.5 - 3.15, you just need to specify what version of NodeJS you need to install in the package install script._
@@ -950,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) To change the user directory and/or account name follow the instructions [here](https://support.apple.com/en-us/HT201548)
[1]: https://github.com/nvm-sh/nvm.git [1]: https://github.com/nvm-sh/nvm.git
[2]: https://github.com/nvm-sh/nvm/blob/v0.39.7/install.sh [2]: https://github.com/nvm-sh/nvm/blob/v0.40.0/install.sh
[3]: https://app.travis-ci.com/nvm-sh/nvm [3]: https://app.travis-ci.com/nvm-sh/nvm
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.7 [4]: https://github.com/nvm-sh/nvm/releases/tag/v0.40.0
[Urchin]: https://git.sdf.org/tlevine/urchin [Urchin]: https://git.sdf.org/tlevine/urchin
[Fish]: https://fishshell.com [Fish]: https://fishshell.com
@@ -1010,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. If one of these broken versions is installed on your system, the above step will likely still succeed even if you didn't include the `--shared-zlib` flag.
However, later, when you attempt to `npm install` something using your old version of node.js, you will see `incorrect data check` errors. However, later, when you attempt to `npm install` something using your old version of node.js, you will see `incorrect data check` errors.
If you want to avoid the possible hassle of dealing with this, include that flag. If you want to avoid the possible hassle of dealing with this, include that flag.
For more details, see [this issue](https://github.com/nodejs/node/issues/39313) and [this comment](https://github.com/nodejs/node/issues/39313#issuecomment-90.39.776) 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)
- Exit back to your native shell. - Exit back to your native shell.
@@ -1037,7 +1039,7 @@ Now you should be able to use node as usual.
If you've encountered this error on WSL-2: If you've encountered this error on WSL-2:
```sh ```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com 0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com
@@ -1070,6 +1072,16 @@ You can check the contents of the file by running:
Currently, the sole maintainer is [@ljharb](https://github.com/ljharb) - more maintainers are quite welcome, and we hope to add folks to the team over time. [Governance](./GOVERNANCE.md) will be re-evaluated as the project evolves. Currently, the sole maintainer is [@ljharb](https://github.com/ljharb) - more maintainers are quite welcome, and we hope to add folks to the team over time. [Governance](./GOVERNANCE.md) will be re-evaluated as the project evolves.
## Project Support
Only the latest version (v0.40.0 at this time) is supported.
## Enterprise Support
If you are unable to update to the latest version of `nvm`, our [partners](https://openjsf.org/ecosystem-sustainability-program) provide commercial security fixes for all unsupported versions:
- [HeroDevs Never-Ending Support](https://www.herodevs.com/support?utm_source=OpenJS&utm_medium=Link&utm_campaign=nvm_openjs)
## License ## License
See [LICENSE.md](./LICENSE.md). See [LICENSE.md](./LICENSE.md).

View File

@@ -33,7 +33,7 @@ nvm_install_dir() {
} }
nvm_latest_version() { nvm_latest_version() {
nvm_echo "v0.39.7" nvm_echo "v0.40.0"
} }
nvm_profile_is_bash_or_zsh() { nvm_profile_is_bash_or_zsh() {
@@ -358,7 +358,7 @@ nvm_check_global_modules() {
command printf %s\\n "$NPM_GLOBAL_MODULES" command printf %s\\n "$NPM_GLOBAL_MODULES"
nvm_echo '=> If you wish to uninstall them at a later point (or re-install them under your' nvm_echo '=> If you wish to uninstall them at a later point (or re-install them under your'
# shellcheck disable=SC2016 # shellcheck disable=SC2016
nvm_echo '=> `nvm` 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_echo ' $ nvm use system' nvm_echo ' $ nvm use system'
nvm_echo ' $ npm uninstall -g a_module' nvm_echo ' $ npm uninstall -g a_module'

92
nvm.sh
View File

@@ -81,7 +81,7 @@ nvm_command_info() {
nvm_has_colors() { nvm_has_colors() {
local NVM_NUM_COLORS local NVM_NUM_COLORS
if nvm_has tput; then if nvm_has tput; then
NVM_NUM_COLORS="$(tput -T "${TERM:-vt100}" colors)" NVM_NUM_COLORS="$(command tput -T "${TERM:-vt100}" colors)"
fi fi
[ "${NVM_NUM_COLORS:--1}" -ge 8 ] && [ "${NVM_NO_COLORS-}" != '--no-colors' ] [ "${NVM_NUM_COLORS:--1}" -ge 8 ] && [ "${NVM_NO_COLORS-}" != '--no-colors' ]
} }
@@ -128,7 +128,12 @@ nvm_download() {
if nvm_curl_use_compression; then if nvm_curl_use_compression; then
CURL_COMPRESSED_FLAG="--compressed" CURL_COMPRESSED_FLAG="--compressed"
fi 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 elif nvm_has "wget"; then
# Emulate curl with wget # Emulate curl with wget
ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \ ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \
@@ -503,9 +508,9 @@ $(nvm_wrap_with_color_code 'y' "${warn_text}")"
} }
nvm_process_nvmrc() { nvm_process_nvmrc() {
local NVMRC_PATH="$1" local NVMRC_PATH
NVMRC_PATH="$1"
local lines local lines
local unpaired_line
lines=$(command sed 's/#.*//' "$NVMRC_PATH" | command sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | nvm_grep -v '^$') lines=$(command sed 's/#.*//' "$NVMRC_PATH" | command sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | nvm_grep -v '^$')
@@ -515,8 +520,12 @@ nvm_process_nvmrc() {
fi fi
# Initialize key-value storage # Initialize key-value storage
local keys='' local keys
local values='' keys=''
local values
values=''
local unpaired_line
unpaired_line=''
while IFS= read -r line; do while IFS= read -r line; do
if [ -z "${line}" ]; then if [ -z "${line}" ]; then
@@ -2437,7 +2446,7 @@ nvm_download_artifact() {
nvm_err "Downloading ${TARBALL_URL}..." nvm_err "Downloading ${TARBALL_URL}..."
nvm_download -L -C - "${PROGRESS_BAR}" "${TARBALL_URL}" -o "${TARBALL}" || ( nvm_download -L -C - "${PROGRESS_BAR}" "${TARBALL_URL}" -o "${TARBALL}" || (
command rm -rf "${TARBALL}" "${tmpdir}" command rm -rf "${TARBALL}" "${tmpdir}"
nvm_err "Binary download from ${TARBALL_URL} failed, trying source." nvm_err "download from ${TARBALL_URL} failed"
return 4 return 4
) )
@@ -3356,6 +3365,10 @@ nvm() {
shift shift
;; ;;
--save | -w) --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 NVM_WRITE_TO_NVMRC=1
shift shift
;; ;;
@@ -3507,6 +3520,11 @@ nvm() {
nvm_ensure_default_set "${provided_version}" nvm_ensure_default_set "${provided_version}"
fi fi
if [ $NVM_WRITE_TO_NVMRC -eq 1 ]; then
nvm_write_nvmrc "${VERSION}"
EXIT_CODE=$?
fi
if [ $EXIT_CODE -ne 0 ] && [ -n "${ALIAS-}" ]; then if [ $EXIT_CODE -ne 0 ] && [ -n "${ALIAS-}" ]; then
nvm alias "${ALIAS}" "${provided_version}" nvm alias "${ALIAS}" "${provided_version}"
EXIT_CODE=$? EXIT_CODE=$?
@@ -3558,9 +3576,13 @@ nvm() {
EXIT_CODE=$? EXIT_CODE=$?
else else
EXIT_CODE=-1 EXIT_CODE=-1
if [ $nosource -eq 1 ]; then
nvm_err "Binary download is not available for ${VERSION}"
EXIT_CODE=3
fi
fi fi
if [ $EXIT_CODE -ne 0 ]; then if [ $EXIT_CODE -ne 0 ] && [ $nosource -ne 1 ]; then
if [ -z "${NVM_MAKE_JOBS-}" ]; then if [ -z "${NVM_MAKE_JOBS-}" ]; then
nvm_get_make_jobs nvm_get_make_jobs
fi fi
@@ -3575,7 +3597,8 @@ nvm() {
fi fi
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 if [ -n "${LTS-}" ]; then
nvm_ensure_default_set "lts/${LTS}" nvm_ensure_default_set "lts/${LTS}"
else else
@@ -3595,6 +3618,7 @@ nvm() {
else else
EXIT_CODE=$? EXIT_CODE=$?
fi fi
fi
return $EXIT_CODE return $EXIT_CODE
;; ;;
@@ -3736,6 +3760,8 @@ nvm() {
local NVM_LTS local NVM_LTS
local IS_VERSION_FROM_NVMRC local IS_VERSION_FROM_NVMRC
IS_VERSION_FROM_NVMRC=0 IS_VERSION_FROM_NVMRC=0
local NVM_WRITE_TO_NVMRC
NVM_WRITE_TO_NVMRC=0
while [ $# -ne 0 ]; do while [ $# -ne 0 ]; do
case "$1" in case "$1" in
@@ -3747,7 +3773,13 @@ nvm() {
--) ;; --) ;;
--lts) NVM_LTS='*' ;; --lts) NVM_LTS='*' ;;
--lts=*) NVM_LTS="${1##--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 if [ -n "${1-}" ]; then
@@ -3781,8 +3813,8 @@ nvm() {
return 127 return 127
fi fi
if [ "${NVM_WRITE_TO_NVMRC:-0}" -eq 1 ]; then if [ $NVM_WRITE_TO_NVMRC -eq 1 ]; then
nvm_write_nvmrc "$VERSION" nvm_write_nvmrc "${VERSION}"
fi fi
if [ "_${VERSION}" = '_system' ]; then if [ "_${VERSION}" = '_system' ]; then
@@ -3800,7 +3832,7 @@ nvm() {
nvm_err 'System version of node not found.' nvm_err 'System version of node not found.'
fi fi
return 127 return 127
elif [ "_${VERSION}" = "_∞" ]; then elif [ "_${VERSION}" = '_∞' ]; then
if [ "${NVM_SILENT:-0}" -ne 1 ]; then if [ "${NVM_SILENT:-0}" -ne 1 ]; then
nvm_err "The alias \"${PROVIDED_VERSION}\" leads to an infinite loop. Aborting." nvm_err "The alias \"${PROVIDED_VERSION}\" leads to an infinite loop. Aborting."
fi fi
@@ -4364,7 +4396,7 @@ nvm() {
NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}" NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}"
;; ;;
"--version" | "-v") "--version" | "-v")
nvm_echo '0.39.7' nvm_echo '0.40.0'
;; ;;
"unload") "unload")
nvm deactivate >/dev/null 2>&1 nvm deactivate >/dev/null 2>&1
@@ -4529,31 +4561,41 @@ nvm_supports_xz() {
nvm_auto() { nvm_auto() {
local NVM_MODE local NVM_MODE
NVM_MODE="${1-}" NVM_MODE="${1-}"
case "${NVM_MODE}" in
none) return 0 ;;
use | install)
local VERSION local VERSION
local NVM_CURRENT 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)" NVM_CURRENT="$(nvm_ls_current)"
if [ "_${NVM_CURRENT}" = '_none' ] || [ "_${NVM_CURRENT}" = '_system' ]; then if [ "_${NVM_CURRENT}" = '_none' ] || [ "_${NVM_CURRENT}" = '_system' ]; then
VERSION="$(nvm_resolve_local_alias default 2>/dev/null || nvm_echo)" 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
if [ "_${NVM_MODE}" = '_install' ]; then
nvm install "${VERSION}" >/dev/null
else
nvm use --silent "${VERSION}" >/dev/null nvm use --silent "${VERSION}" >/dev/null
fi
else
return 0
fi
elif nvm_rc_version >/dev/null 2>&1; then elif nvm_rc_version >/dev/null 2>&1; then
if [ "_${NVM_MODE}" = '_install' ]; then
nvm install >/dev/null
else
nvm use --silent >/dev/null nvm use --silent >/dev/null
fi fi
fi
else else
nvm use --silent "${NVM_CURRENT}" >/dev/null nvm use --silent "${NVM_CURRENT}" >/dev/null
fi fi
elif [ "_${NVM_MODE}" != '_none' ]; then ;;
*)
nvm_err 'Invalid auto mode supplied.' nvm_err 'Invalid auto mode supplied.'
return 1 return 1
fi ;;
esac
} }
nvm_process_parameters() { nvm_process_parameters() {

View File

@@ -1,6 +1,6 @@
{ {
"name": "nvm", "name": "nvm",
"version": "0.39.7", "version": "0.40.0",
"description": "Node Version Manager - Simple bash script to manage multiple active node.js versions", "description": "Node Version Manager - Simple bash script to manage multiple active node.js versions",
"directories": { "directories": {
"test": "test" "test": "test"
@@ -45,7 +45,7 @@
"eclint": "^2.8.1", "eclint": "^2.8.1",
"markdown-link-check": "^3.12.2", "markdown-link-check": "^3.12.2",
"replace": "^1.2.2", "replace": "^1.2.2",
"semver": "^7.6.2", "semver": "^7.6.3",
"urchin": "^0.0.5" "urchin": "^0.0.5"
} }
} }

View File

@@ -245,8 +245,3 @@ _json_parse() {
nvm_json_extract() { nvm_json_extract() {
nvm_json_tokenize | _json_parse | grep -e "${1}" | awk '{print $2 $3}' nvm_json_tokenize | _json_parse | grep -e "${1}" | awk '{print $2 $3}'
} }
# ensures that commands are run as if in a terminal
run_in_terminal() {
script -q -a /dev/null sh -c "\. ../nvm.sh ; $*"
}

View File

@@ -5,20 +5,20 @@
die () { echo "$@" ; exit 1; } die () { echo "$@" ; exit 1; }
if [ -n "${ZSH_VERSION}" ]; then if [ -n "$ZSH_VERSION" ]; then
# set clobber option in order to test that this does not produce any # set clobber option in order to test that this does not produce any
# incompatibilities # incompatibilities
setopt noclobber setopt noclobber
fi fi
nvm alias test-stable-1 0.0.2 || die "\`nvm alias test-stable-1 0.0.2\` failed" nvm alias test-stable-1 0.0.2 || die '`nvm alias test-stable-1 0.0.2` failed'
OUTPUT="$(run_in_terminal nvm alias test-stable-1 | strip_colors)" OUTPUT="$(nvm alias test-stable-1 | strip_colors)"
EXPECTED_OUTPUT='test-stable-1 -> 0.0.2 (-> v0.0.2)' EXPECTED_OUTPUT='test-stable-1 -> 0.0.2 (-> v0.0.2)'
echo "${OUTPUT}" | \grep -F "${EXPECTED_OUTPUT}" || die "nvm alias test-stable-1 0.0.2 did not set test-stable-1 to 0.0.2: got '${OUTPUT}'" echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.2 did not set test-stable-1 to 0.0.2: got '$OUTPUT'"
nvm alias test-stable-1 0.0.1 || die "\`nvm alias test-stable-1 0.0.1\` failed" nvm alias test-stable-1 0.0.1 || die '`nvm alias test-stable-1 0.0.1` failed'
OUTPUT="$(run_in_terminal nvm alias test-stable-1 | strip_colors)" OUTPUT="$(nvm alias test-stable-1 | strip_colors)"
EXPECTED_OUTPUT='test-stable-1 -> 0.0.1 (-> v0.0.1)' EXPECTED_OUTPUT='test-stable-1 -> 0.0.1 (-> v0.0.1)'
echo "$OUTPUT" | \grep -F "${EXPECTED_OUTPUT}" || die "nvm alias test-stable-1 0.0.1 did not set test-stable-1 to 0.0.1: got '${OUTPUT}'" echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.1 did not set test-stable-1 to 0.0.1: got '$OUTPUT'"

View File

@@ -5,7 +5,7 @@
die () { echo "$@" ; exit 1; } die () { echo "$@" ; exit 1; }
NVM_ALIAS_OUTPUT=$(run_in_terminal nvm alias | strip_colors) NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors)
EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)" EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)"
STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")" STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")"

View File

@@ -19,31 +19,31 @@ make_fake_node v0.9.1
make_fake_iojs v0.2.1 make_fake_iojs v0.2.1
EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)" EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)"
STABLE_VERSION="$(nvm_version "${EXPECTED_STABLE}")" STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")"
EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)" EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)"
UNSTABLE_VERSION="$(nvm_version "${EXPECTED_UNSTABLE}")" UNSTABLE_VERSION="$(nvm_version "$EXPECTED_UNSTABLE")"
[ "_${STABLE_VERSION}" != "_${UNSTABLE_VERSION}" ] \ [ "_$STABLE_VERSION" != "_$UNSTABLE_VERSION" ] \
|| die "stable and unstable versions are the same!" || die "stable and unstable versions are the same!"
nvm alias stable "${EXPECTED_UNSTABLE}" nvm alias stable "$EXPECTED_UNSTABLE"
nvm alias unstable "${EXPECTED_STABLE}" nvm alias unstable "$EXPECTED_STABLE"
nvm alias node stable nvm alias node stable
nvm alias iojs unstable nvm alias iojs unstable
NVM_ALIAS_OUTPUT=$(run_in_terminal nvm alias | strip_colors) NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors)
echo "${NVM_ALIAS_OUTPUT}" | command grep -F "stable -> ${EXPECTED_UNSTABLE} (-> ${UNSTABLE_VERSION})" \ echo "$NVM_ALIAS_OUTPUT" | command grep -F "stable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION)" \
|| die "nvm alias did not contain the overridden 'stable' alias; got '${NVM_ALIAS_OUTPUT}'" || die "nvm alias did not contain the overridden 'stable' alias; got '$NVM_ALIAS_OUTPUT'"
echo "${NVM_ALIAS_OUTPUT}" | command grep -F "unstable -> ${EXPECTED_STABLE} (-> ${STABLE_VERSION})" \ echo "$NVM_ALIAS_OUTPUT" | command grep -F "unstable -> $EXPECTED_STABLE (-> $STABLE_VERSION)" \
|| die "nvm alias did not contain the overridden 'unstable' alias; got '${NVM_ALIAS_OUTPUT}'" || die "nvm alias did not contain the overridden 'unstable' alias; got '$NVM_ALIAS_OUTPUT'"
echo "${NVM_ALIAS_OUTPUT}" | command grep -F "node -> stable (-> ${UNSTABLE_VERSION})" \ echo "$NVM_ALIAS_OUTPUT" | command grep -F "node -> stable (-> $UNSTABLE_VERSION)" \
|| die "nvm alias did not contain the overridden 'node' alias; got '${NVM_ALIAS_OUTPUT}'" || die "nvm alias did not contain the overridden 'node' alias; got '$NVM_ALIAS_OUTPUT'"
echo "${NVM_ALIAS_OUTPUT}" | command grep -F "iojs -> unstable (-> ${STABLE_VERSION})" \ echo "$NVM_ALIAS_OUTPUT" | command grep -F "iojs -> unstable (-> $STABLE_VERSION)" \
|| die "nvm alias did not contain the overridden 'iojs' alias; got '${NVM_ALIAS_OUTPUT}'" || die "nvm alias did not contain the overridden 'iojs' alias; got '$NVM_ALIAS_OUTPUT'"
cleanup cleanup

View File

@@ -5,7 +5,7 @@
die () { echo "$@" ; exit 1; } die () { echo "$@" ; exit 1; }
NVM_ALIAS_OUTPUT="$(run_in_terminal nvm alias | strip_colors)" NVM_ALIAS_OUTPUT="$(nvm alias | strip_colors)"
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-1 -> 0.0.1 (-> v0.0.1)' \ echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-1 -> 0.0.1 (-> v0.0.1)' \
|| die "did not find test-stable-1 alias; got '$NVM_ALIAS_OUTPUT'" || die "did not find test-stable-1 alias; got '$NVM_ALIAS_OUTPUT'"
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-2 -> 0.0.2 (-> v0.0.2)' \ echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-2 -> 0.0.2 (-> v0.0.2)' \

View File

@@ -12,9 +12,9 @@ nvm_ensure_default_set 0.3 || die "'nvm_ensure_default_set' with an existing def
nvm unalias default || die "'nvm unalias default' failed" nvm unalias default || die "'nvm unalias default' failed"
OUTPUT="$(run_in_terminal nvm_ensure_default_set 0.2)" OUTPUT="$(nvm_ensure_default_set 0.2)"
EXPECTED_OUTPUT="Creating default alias: default -> 0.2 (-> iojs-v0.2.10)" EXPECTED_OUTPUT="Creating default alias: default -> 0.2 (-> iojs-v0.2.10)"
EXIT_CODE="$?" EXIT_CODE="$?"
[ "_$(echo "${OUTPUT}" | strip_colors)" = "_${EXPECTED_OUTPUT}" ] || die "'nvm_ensure_default_set 0.2' did not output '${EXPECTED_OUTPUT}', got '${OUTPUT}'" [ "_$(echo "$OUTPUT" | strip_colors)" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set 0.2' did not output '$EXPECTED_OUTPUT', got '$OUTPUT'"
[ "_${EXIT_CODE}" = "_0" ] || die "'nvm_ensure_default_set 0.2' did not exit with 0, got ${EXIT_CODE}" [ "_$EXIT_CODE" = "_0" ] || die "'nvm_ensure_default_set 0.2' did not exit with 0, got $EXIT_CODE"

View 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}<"

View File

@@ -6,26 +6,24 @@ die() { echo "$@" ; cleanup ; exit 1; }
cleanup() { cleanup() {
unset -f nvm_download nvm_ls_remote nvm_ls_remote_iojs unset -f nvm_download nvm_ls_remote nvm_ls_remote_iojs
if [ -n "${TEMP_NVM_COLORS}" ]; then if [ -n "${TEMP_NVM_COLORS-}" ]; then
export NVM_COLORS="${TEMP_NVM_COLORS}" export NVM_COLORS=TEMP_NVM_COLORS
fi fi
unset TEMP_NVM_COLORS unset TEMP_NVM_COLORS
} }
\. ../../../nvm.sh \. ../../../nvm.sh
if [ -n "${NVM_COLORS-}" ]; then
if [ -n "${NVM_COLORS}" ]; then export TEMP_NVM_COLORS=NVM_COLORS
export TEMP_NVM_COLORS="${NVM_COLORS}"
unset NVM_COLORS unset NVM_COLORS
fi fi
nvm deactivate 2>/dev/null || die '1: unable to deactivate' nvm deactivate 2>/dev/null || die 'unable to deactivate'
\. ../../common.sh \. ../../common.sh
MOCKS_DIR="${PWD}/mocks" MOCKS_DIR="$PWD/mocks"
# shellcheck disable=SC2317
nvm_download() { nvm_download() {
if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then
cat "$MOCKS_DIR/nodejs.org-dist-index.tab" cat "$MOCKS_DIR/nodejs.org-dist-index.tab"
@@ -35,14 +33,14 @@ nvm_download() {
} }
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt" EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
OUTPUT="$(run_in_terminal nvm ls-remote --lts | sed 's/[ \t]*$//')" OUTPUT="$(nvm ls-remote --lts | sed 's/[ \t]*$//')"
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )" EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
[ "_$OUTPUT" = "_${EXPECTED_OUTPUT}" ] || die "2: nvm ls-remote --lts did not output expected sorted versions; got >${OUTPUT}< expected 1 >${EXPECTED_OUTPUT}<" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote --lts did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt" EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
OUTPUT="$(run_in_terminal nvm ls-remote 'lts/*' | sed 's/[ \t]*$//')" OUTPUT="$(nvm ls-remote "lts/*" | sed 's/[ \t]*$//')"
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )" EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
[ "_$OUTPUT" = "_${EXPECTED_OUTPUT}" ] || die "3: nvm ls-remote lts/* did not output expected sorted versions; got >${OUTPUT}< expected 2 >${EXPECTED_OUTPUT}<" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
MOCKS_DIR="$PWD/mocks" MOCKS_DIR="$PWD/mocks"
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt" LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
@@ -50,26 +48,26 @@ LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)"
INDEX=1 INDEX=1
printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
ACTUAL="$(run_in_terminal nvm ls-remote "lts/-${INDEX}" | sed 's/[ \t]*$//')" ACTUAL="$(nvm ls-remote "lts/-${INDEX}" | sed 's/[ \t]*$//')"
MESSAGE="for lts/-${INDEX} (${LTS})" MESSAGE="for lts/-${INDEX} (${LTS})"
EXPECTED="$(run_in_terminal nvm ls-remote "lts/${LTS}" | sed 's/[ \t]*$//')" EXPECTED="$(nvm ls-remote "lts/${LTS}" | sed 's/[ \t]*$//')"
[ "${ACTUAL}" = "${EXPECTED}" ] || die "4: ${MESSAGE}: expected >${EXPECTED}<, got >${ACTUAL}<" [ "${ACTUAL}" = "${EXPECTED}" ] || die "${MESSAGE}: expected >${EXPECTED}<, got >${ACTUAL}<"
INDEX=$(($INDEX + 1)) INDEX=$(($INDEX + 1))
done done
REMOTE="${PWD}/mocks/nvm_ls_remote.txt" REMOTE="$PWD/mocks/nvm_ls_remote.txt"
nvm_ls_remote() { nvm_ls_remote() {
cat "${REMOTE}" cat "$REMOTE"
} }
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt" REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
nvm_ls_remote_iojs() { nvm_ls_remote_iojs() {
cat "${REMOTE_IOJS}" cat "$REMOTE_IOJS"
} }
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt" EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt"
OUTPUT="$(run_in_terminal nvm ls-remote | sed 's/[ \t]*$//')" OUTPUT="$(nvm ls-remote | sed 's/[ \t]*$//')"
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )" EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "5: bare nvm ls-remote did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<" [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm ls-remote did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
cleanup cleanup

View File

@@ -7,9 +7,9 @@ die () { echo "$@" ; exit 1; }
\. ../../../nvm.sh \. ../../../nvm.sh
EXPECTED_OUTPUT="nvm_ensure_default_set: a version is required" EXPECTED_OUTPUT="nvm_ensure_default_set: a version is required"
OUTPUT="$(run_in_terminal nvm_ensure_default_set 2>&1 >/dev/null | strip_colors)" OUTPUT="$(nvm_ensure_default_set 2>&1 >/dev/null)"
EXIT_CODE="$?" EXIT_CODE="$?"
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "'nvm_ensure_default_set' did not output >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" [ "_$(echo "$OUTPUT" | strip_colors)" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set' did not output "$EXPECTED_OUTPUT", got "$OUTPUT""
[ "_$EXIT_CODE" = "_1" ] || die "'nvm_ensure_default_set' did not exit with 1, got >${EXIT_CODE}<" [ "_$EXIT_CODE" = "_1" ] || die "'nvm_ensure_default_set' did not exit with 1, got "$EXIT_CODE""
# see test/fast/Aliases for remaining nvm_ensure_default_set tests # see test/fast/Aliases for remaining nvm_ensure_default_set tests

View File

@@ -8,12 +8,12 @@ cleanup() {
\. ../../../nvm.sh \. ../../../nvm.sh
MOCKS_DIR="${PWD}/mocks" MOCKS_DIR="$PWD/mocks"
# sample output at the time the test was written # sample output at the time the test was written
TAB_PATH="${MOCKS_DIR}/nodejs.org-dist-index.tab" TAB_PATH="$MOCKS_DIR/nodejs.org-dist-index.tab"
nvm_download() { nvm_download() {
cat "${TAB_PATH}" cat "$TAB_PATH"
} }
EXPECTED_OUTPUT_PATH="$MOCKS_DIR/nvm_ls_remote.txt" EXPECTED_OUTPUT_PATH="$MOCKS_DIR/nvm_ls_remote.txt"

View File

@@ -15,4 +15,6 @@ if nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install
die "nvm_download should fail to download no existing file" die "nvm_download should fail to download no existing file"
fi fi
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" -o "; die quoted-command-not-quoted"
cleanup cleanup