mirror of
https://github.com/nvm-sh/nvm.git
synced 2026-04-03 11:34:50 +08:00
Compare commits
7 Commits
master
...
4ba96c5974
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ba96c5974 | ||
|
|
b07eb5051a | ||
|
|
7827187fc0 | ||
|
|
1d29998546 | ||
|
|
faa8585c6f | ||
|
|
92e0ec2ac2 | ||
|
|
f05be89217 |
32
AGENTS.md → .github/copilot-instructions.md
vendored
32
AGENTS.md → .github/copilot-instructions.md
vendored
@@ -1,6 +1,6 @@
|
||||
# nvm Coding Agent Instructions
|
||||
# nvm Copilot Instructions
|
||||
|
||||
This document provides guidance for AI coding agents when working with the Node Version Manager (nvm) codebase.
|
||||
This document provides guidance for GitHub Copilot when working with the Node Version Manager (nvm) codebase.
|
||||
|
||||
## Overview
|
||||
|
||||
@@ -186,24 +186,17 @@ npm install # Installs urchin, semver, and replace tools
|
||||
|
||||
#### Run All Tests
|
||||
```bash
|
||||
npm test # Runs tests in the current shell only (sh, bash, dash, zsh)
|
||||
make test # Runs tests in default shells (sh, bash, dash, zsh)
|
||||
npm test # Runs tests in current shell (sh, bash, dash, zsh, ksh)
|
||||
make test # Runs tests in all supported shells (sh, bash, dash, zsh, ksh)
|
||||
make test-sh # Runs tests only in sh
|
||||
make test-bash # Runs tests only in bash
|
||||
make test-dash # Runs tests only in dash
|
||||
make test-zsh # Runs tests only in zsh
|
||||
make SHELLS=ksh test # Runs tests only in ksh (experimental, see issue #574)
|
||||
make test-ksh # Runs tests only in ksh
|
||||
```
|
||||
|
||||
#### Run Specific Test Suites
|
||||
```bash
|
||||
npm run test/fast # Runs fast tests in the current shell
|
||||
npm run test/slow # Runs slow tests in the current shell
|
||||
npm run test/sourcing # Runs sourcing tests in the current shell
|
||||
npm run test/install_script # Runs install script tests in the current shell
|
||||
npm run test/installation # Runs installation tests (node + iojs) in the current shell
|
||||
npm run test/installation/node # Runs Node installation tests in the current shell
|
||||
npm run test/installation/iojs # Runs io.js installation tests in the current shell
|
||||
make TEST_SUITE=fast test # Only fast tests
|
||||
make TEST_SUITE=slow test # Only slow tests
|
||||
make SHELLS=bash test # Only bash shell
|
||||
@@ -216,19 +209,6 @@ make SHELLS=bash test # Only bash shell
|
||||
./node_modules/.bin/urchin 'test/fast/Unit tests/nvm_get_arch' # Run single test safely without shell termination
|
||||
./node_modules/.bin/urchin test/slow/ # Run slow test suite
|
||||
./node_modules/.bin/urchin test/sourcing/ # Run sourcing test suite
|
||||
./node_modules/.bin/urchin test/install_script/ # Run install script test suite
|
||||
./node_modules/.bin/urchin test/installation_node/ # Run Node installation test suite
|
||||
./node_modules/.bin/urchin test/installation_iojs/ # Run io.js installation test suite
|
||||
```
|
||||
|
||||
#### Linting and Docs Checks
|
||||
```bash
|
||||
npm run eclint # Checks EditorConfig compliance
|
||||
npm run doctoc:check # Verifies README table of contents
|
||||
npm run dockerfile_lint # Lints the Dockerfile
|
||||
npm run test:check-exec # Checks test files have executable permission
|
||||
npm run test:check-nonexec # Checks non-test files don't have executable permission
|
||||
npm run markdown-link-check # Validates markdown links (requires markdown-link-check)
|
||||
```
|
||||
|
||||
### Test Writing Guidelines
|
||||
@@ -444,4 +424,4 @@ nvm works on Windows via several compatibility layers:
|
||||
2. Include bash, curl, git, tar, and wget packages during installation
|
||||
3. Run nvm installation in Cygwin terminal
|
||||
|
||||
This guide should help AI coding agents understand the nvm codebase structure, testing procedures, and development environment setup requirements.
|
||||
This guide should help GitHub Copilot understand the nvm codebase structure, testing procedures, and development environment setup requirements.
|
||||
9
.github/workflows/lint.yml
vendored
9
.github/workflows/lint.yml
vendored
@@ -70,12 +70,3 @@ jobs:
|
||||
- uses: actions/checkout@v6
|
||||
- name: check tests filenames
|
||||
run: ./rename_test.sh --check
|
||||
|
||||
all:
|
||||
permissions:
|
||||
contents: none
|
||||
name: 'all linting'
|
||||
needs: [eclint, dockerfile_lint, doctoc, test_naming]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: true
|
||||
|
||||
164
.github/workflows/nodejs-org.yml
vendored
164
.github/workflows/nodejs-org.yml
vendored
@@ -1,164 +0,0 @@
|
||||
name: 'Update nodejs.org'
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'nvm version tag (e.g., v0.40.4). Defaults to latest release.'
|
||||
required: false
|
||||
default: ''
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
update-nodejs-org:
|
||||
if: github.repository == 'nvm-sh/nvm' && github.actor == 'ljharb'
|
||||
permissions:
|
||||
contents: none
|
||||
name: 'Create PR to nodejs/nodejs.org'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@v2
|
||||
with:
|
||||
allowed-endpoints:
|
||||
github.com:443
|
||||
api.github.com:443
|
||||
|
||||
- name: Extract and validate version
|
||||
id: version
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
INPUT_VERSION="${{ inputs.version }}"
|
||||
|
||||
if [ -n "${INPUT_VERSION}" ]; then
|
||||
TAG="${INPUT_VERSION}"
|
||||
elif [ "${GITHUB_REF_TYPE}" = "tag" ]; then
|
||||
TAG="${GITHUB_REF#refs/tags/}"
|
||||
else
|
||||
TAG="$(gh api "repos/${GITHUB_REPOSITORY}/releases/latest" --jq '.tag_name')"
|
||||
fi
|
||||
|
||||
if ! printf '%s\n' "${TAG}" | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+$'; then
|
||||
echo "::notice::Tag '${TAG}' does not match expected format vX.Y.Z, skipping"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
printf 'tag=%s\n' "${TAG}" >> "${GITHUB_OUTPUT}"
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
|
||||
- name: Set up fork and branch
|
||||
if: steps.version.outputs.tag
|
||||
id: fork
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
BRANCH="nvm-${{ steps.version.outputs.tag }}"
|
||||
|
||||
gh repo fork nodejs/nodejs.org --clone=false 2>&1 || true
|
||||
FORK_OWNER="$(gh api user --jq '.login')"
|
||||
|
||||
DEFAULT_BRANCH="$(gh api repos/nodejs/nodejs.org --jq '.default_branch')"
|
||||
UPSTREAM_SHA="$(gh api "repos/nodejs/nodejs.org/git/ref/heads/${DEFAULT_BRANCH}" --jq '.object.sha')"
|
||||
|
||||
# Create or reset branch on fork to upstream HEAD
|
||||
if ! gh api "repos/${FORK_OWNER}/nodejs.org/git/refs" \
|
||||
-f "ref=refs/heads/${BRANCH}" \
|
||||
-f "sha=${UPSTREAM_SHA}" > /dev/null 2>&1; then
|
||||
gh api "repos/${FORK_OWNER}/nodejs.org/git/refs/heads/${BRANCH}" \
|
||||
-X PATCH \
|
||||
-f "sha=${UPSTREAM_SHA}" \
|
||||
-f "force=true" > /dev/null
|
||||
fi
|
||||
|
||||
printf 'fork_owner=%s\n' "${FORK_OWNER}" >> "${GITHUB_OUTPUT}"
|
||||
printf 'branch=%s\n' "${BRANCH}" >> "${GITHUB_OUTPUT}"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.NODEJS_ORG_TOKEN }}
|
||||
|
||||
- name: Update nvm version in English snippet
|
||||
if: steps.version.outputs.tag
|
||||
id: update
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
NEW_VERSION="${{ steps.version.outputs.tag }}"
|
||||
FORK_OWNER="${{ steps.fork.outputs.fork_owner }}"
|
||||
BRANCH="${{ steps.fork.outputs.branch }}"
|
||||
FILE_PATH="apps/site/snippets/en/download/nvm.bash"
|
||||
PATTERN='nvm-sh/nvm/v[0-9]+\.[0-9]+\.[0-9]+/install\.sh'
|
||||
REPLACEMENT="nvm-sh/nvm/${NEW_VERSION}/install.sh"
|
||||
|
||||
# Get file content via API
|
||||
FILE_RESPONSE="$(gh api "repos/${FORK_OWNER}/nodejs.org/contents/${FILE_PATH}?ref=${BRANCH}")"
|
||||
FILE_SHA="$(printf '%s' "${FILE_RESPONSE}" | jq -r '.sha')"
|
||||
printf '%s' "${FILE_RESPONSE}" | jq -r '.content' | base64 -d > "${RUNNER_TEMP}/nvm.bash"
|
||||
|
||||
# Validate exactly 1 match
|
||||
MATCH_COUNT="$(grep -cE "${PATTERN}" "${RUNNER_TEMP}/nvm.bash" || true)"
|
||||
|
||||
if [ "${MATCH_COUNT}" -eq 0 ]; then
|
||||
echo "::error::No nvm version pattern found in ${FILE_PATH}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${MATCH_COUNT}" -ne 1 ]; then
|
||||
echo "::error::Expected exactly 1 nvm version match in ${FILE_PATH}, found ${MATCH_COUNT}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Replace and check for changes
|
||||
cp "${RUNNER_TEMP}/nvm.bash" "${RUNNER_TEMP}/nvm.bash.orig"
|
||||
sed -i -E "s|${PATTERN}|${REPLACEMENT}|g" "${RUNNER_TEMP}/nvm.bash"
|
||||
|
||||
if cmp -s "${RUNNER_TEMP}/nvm.bash" "${RUNNER_TEMP}/nvm.bash.orig"; then
|
||||
echo "::notice::English snippet already has version ${NEW_VERSION}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! grep -qF "${REPLACEMENT}" "${RUNNER_TEMP}/nvm.bash"; then
|
||||
echo "::error::Replacement verification failed in ${FILE_PATH}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Update file via GitHub API (avoids git push workflow scope requirement)
|
||||
NEW_CONTENT_B64="$(base64 -w 0 < "${RUNNER_TEMP}/nvm.bash")"
|
||||
gh api "repos/${FORK_OWNER}/nodejs.org/contents/${FILE_PATH}" \
|
||||
-X PUT \
|
||||
-f "message=meta: bump nvm to ${NEW_VERSION}" \
|
||||
-f "content=${NEW_CONTENT_B64}" \
|
||||
-f "sha=${FILE_SHA}" \
|
||||
-f "branch=${BRANCH}" \
|
||||
-f "committer[name]=github-actions[bot]" \
|
||||
-f "committer[email]=41898282+github-actions[bot]@users.noreply.github.com" > /dev/null
|
||||
|
||||
printf 'updated=true\n' >> "${GITHUB_OUTPUT}"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.NODEJS_ORG_TOKEN }}
|
||||
|
||||
- name: Create pull request
|
||||
if: steps.update.outputs.updated
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
NEW_VERSION="${{ steps.version.outputs.tag }}"
|
||||
FORK_OWNER="${{ steps.fork.outputs.fork_owner }}"
|
||||
BRANCH="${{ steps.fork.outputs.branch }}"
|
||||
|
||||
BODY="Updates the English nvm install snippet to [\`${NEW_VERSION}\`](https://github.com/nvm-sh/nvm/releases/tag/${NEW_VERSION}). The translation system handles other locales.
|
||||
|
||||
Ref: https://github.com/nodejs/nodejs.org/issues/8628"
|
||||
|
||||
gh pr create \
|
||||
--repo nodejs/nodejs.org \
|
||||
--head "${FORK_OWNER}:${BRANCH}" \
|
||||
--title "meta: bump nvm to ${NEW_VERSION}" \
|
||||
--body "${BODY}"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.NODEJS_ORG_TOKEN }}
|
||||
3
.github/workflows/nvm-install-test.yml
vendored
3
.github/workflows/nvm-install-test.yml
vendored
@@ -10,9 +10,6 @@ on:
|
||||
required: false
|
||||
default: 'HEAD'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
matrix:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
2
.github/workflows/tests-fast.yml
vendored
2
.github/workflows/tests-fast.yml
vendored
@@ -82,7 +82,7 @@ jobs:
|
||||
unset NVM_CD_FLAGS NVM_BIN NVM_INC
|
||||
export NVM_DIR="${{ github.workspace }}"
|
||||
export PATH="$(echo "$PATH" | tr ':' '\n' | grep -v '\.nvm' | grep -v 'toolcache' | tr '\n' ':')"
|
||||
make TERM=xterm-256color TEST_SUITE="fast" SHELL="${{ matrix.shell }}" URCHIN="$URCHIN_PATH" test-${{ matrix.shell }}
|
||||
make TEST_SUITE="fast" SHELL="${{ matrix.shell }}" URCHIN="$URCHIN_PATH" test-${{ matrix.shell }}
|
||||
- name: Restore system node
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -76,7 +76,7 @@ jobs:
|
||||
unset NVM_CD_FLAGS NVM_BIN NVM_INC
|
||||
export NVM_DIR="${{ github.workspace }}"
|
||||
export PATH="$(echo "$PATH" | tr ':' '\n' | grep -v '\.nvm' | grep -v 'toolcache' | tr '\n' ':')"
|
||||
make TERM=xterm-256color TEST_SUITE="installation_iojs" SHELL="${{ matrix.shell }}" URCHIN="$URCHIN_PATH" test-${{ matrix.shell }}
|
||||
make TEST_SUITE="installation_iojs" SHELL="${{ matrix.shell }}" URCHIN="$URCHIN_PATH" test-${{ matrix.shell }}
|
||||
- name: Restore system node
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
15
.github/workflows/tests.yml
vendored
15
.github/workflows/tests.yml
vendored
@@ -12,7 +12,6 @@ jobs:
|
||||
|
||||
name: "tests"
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
defaults:
|
||||
run:
|
||||
shell: 'script -q -e -c "${{ matrix.shell }} {0}"'
|
||||
@@ -69,19 +68,7 @@ jobs:
|
||||
- run: npm ls urchin
|
||||
- run: npx which urchin
|
||||
- run: env
|
||||
- name: Run tests
|
||||
shell: bash
|
||||
run: |
|
||||
for attempt in 1 2 3; do
|
||||
timeout 600 make TERM=xterm-256color TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }} && exit 0
|
||||
EXIT_CODE=$?
|
||||
if [ $EXIT_CODE -ne 124 ]; then
|
||||
exit $EXIT_CODE
|
||||
fi
|
||||
echo "Attempt ${attempt} timed out; retrying..."
|
||||
done
|
||||
echo "All 3 attempts timed out."
|
||||
exit 1
|
||||
- run: make TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }}
|
||||
|
||||
nvm:
|
||||
permissions:
|
||||
|
||||
6
.github/workflows/windows-npm.yml
vendored
6
.github/workflows/windows-npm.yml
vendored
@@ -136,7 +136,7 @@ jobs:
|
||||
steps:
|
||||
# For Ubuntu: install with packages directly
|
||||
- if: matrix.wsl-distrib != 'Debian'
|
||||
uses: Vampire/setup-wsl@v6
|
||||
uses: Vampire/setup-wsl@v3
|
||||
with:
|
||||
distribution: ${{ matrix.wsl-distrib }}
|
||||
additional-packages: bash git curl ca-certificates wget
|
||||
@@ -144,7 +144,7 @@ jobs:
|
||||
# For Debian: install without packages first (apt-get update fails due to stale sources.list)
|
||||
# see https://github.com/Vampire/setup-wsl/issues/76
|
||||
- if: matrix.wsl-distrib == 'Debian'
|
||||
uses: Vampire/setup-wsl@v6
|
||||
uses: Vampire/setup-wsl@v3
|
||||
with:
|
||||
distribution: ${{ matrix.wsl-distrib }}
|
||||
- if: matrix.wsl-distrib == 'Debian'
|
||||
@@ -214,7 +214,7 @@ jobs:
|
||||
- ''
|
||||
- 'script'
|
||||
steps:
|
||||
- uses: Vampire/setup-wsl@v6
|
||||
- uses: Vampire/setup-wsl@v3
|
||||
with:
|
||||
distribution: ${{ matrix.wsl-distrib }}
|
||||
additional-packages: bash git curl ca-certificates wget
|
||||
|
||||
@@ -23,10 +23,10 @@ Explain the problem and include additional details to help maintainers reproduce
|
||||
* **Use a clear and descriptive title** for the issue to identify the problem.
|
||||
|
||||
* **Describe the exact steps which reproduce the problem** in as many details as possible. For example, start by explaining which command exactly you used in the terminal. When listing steps, **don't just say what you did, but explain how you did it**. For example, if you moved the cursor to the end of a line, explain if you used the mouse, or a keyboard shortcut or a command, and if so which one?
|
||||
* **Provide specific examples to demonstrate the steps**. Include links to files or GitHub projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines).
|
||||
* **Provide specific examples to demonstrate the steps**. Include links to files or Github projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines).
|
||||
* **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior.
|
||||
* **Explain which behavior you expected to see instead and why.**
|
||||
* **Provide as much context as possible** in order to help others verify and ultimately fix the issue. This includes giving us as many details as possible about your environment, so we can more easily confirm the problem.
|
||||
* **Provide as much context as possible** in order to help others verify and ultimately fix the issue. This includes giving us as much details as possible about your environment, so we can more easily confirm the problem.
|
||||
|
||||
## Documentation
|
||||
|
||||
|
||||
75
README.md
75
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 -->
|
||||
@@ -31,7 +31,6 @@
|
||||
- [Usage](#usage)
|
||||
- [Long-term Support](#long-term-support)
|
||||
- [Migrating Global Packages While Installing](#migrating-global-packages-while-installing)
|
||||
- [Offline Install](#offline-install)
|
||||
- [Default Global Packages From File While Installing](#default-global-packages-from-file-while-installing)
|
||||
- [io.js](#iojs)
|
||||
- [System Version of Node](#system-version-of-node)
|
||||
@@ -77,25 +76,25 @@
|
||||
|
||||
**Example:**
|
||||
```sh
|
||||
$ nvm install 24
|
||||
Now using node v24.14.0 (npm v11.9.0)
|
||||
$ nvm use 16
|
||||
Now using node v16.9.1 (npm v7.21.1)
|
||||
$ node -v
|
||||
v24.14.0
|
||||
$ nvm use 22
|
||||
Now using node v22.22.1 (npm v10.9.4)
|
||||
v16.9.1
|
||||
$ nvm use 14
|
||||
Now using node v14.18.0 (npm v6.14.15)
|
||||
$ node -v
|
||||
v22.22.1
|
||||
$ nvm use 20
|
||||
Now using node v20.20.1 (npm v10.8.2)
|
||||
v14.18.0
|
||||
$ nvm install 12
|
||||
Now using node v12.22.6 (npm v6.14.5)
|
||||
$ node -v
|
||||
v20.20.1
|
||||
v12.22.6
|
||||
```
|
||||
|
||||
Simple as that!
|
||||
|
||||
|
||||
## About
|
||||
nvm is a version manager for [node.js](https://nodejs.org/en/), designed to be installed per-user, and invoked per-shell. `nvm` works on any POSIX-compliant shell (sh, dash, ksh, zsh, bash), in particular on these platforms: unix, macOS, and [Windows WSL](https://github.com/nvm-sh/nvm#important-notes).
|
||||
nvm is a version manager for [node.js](https://nodejs.org/en/), designed to be installed per-user, and invoked per-shell. `nvm` works on any POSIX-compliant shell (sh, dash, ksh, zsh, bash), in particular on these platforms: unix, macOS, and [windows WSL](https://github.com/nvm-sh/nvm#important-notes).
|
||||
|
||||
<a id="installation-and-update"></a>
|
||||
<a id="install-script"></a>
|
||||
@@ -105,10 +104,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.4/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
||||
```
|
||||
```sh
|
||||
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
|
||||
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/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 (`~/.bashrc`, `~/.bash_profile`, `~/.zshrc`, or `~/.profile`). If you find the install script is updating the wrong profile file, set the `$PROFILE` env var to the profile file’s path, and then rerun the installation script.
|
||||
@@ -135,7 +134,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.4/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.3/install.sh | bash'`
|
||||
|
||||
#### Installing in Docker
|
||||
|
||||
@@ -146,12 +145,12 @@ When invoking bash as a non-interactive shell, like in a Docker container, none
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
# Create a script file sourced by both interactive and non-interactive bash shells
|
||||
ENV BASH_ENV ~/.bash_env
|
||||
ENV BASH_ENV /home/user/.bash_env
|
||||
RUN touch "${BASH_ENV}"
|
||||
RUN echo '. "${BASH_ENV}"' >> ~/.bashrc
|
||||
|
||||
# Download and install nvm
|
||||
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | PROFILE="${BASH_ENV}" bash
|
||||
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | PROFILE="${BASH_ENV}" bash
|
||||
RUN echo node > .nvmrc
|
||||
RUN nvm install
|
||||
```
|
||||
@@ -169,7 +168,7 @@ ARG NODE_VERSION=20
|
||||
RUN apt update && apt install curl -y
|
||||
|
||||
# install nvm
|
||||
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
|
||||
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
||||
|
||||
# set env
|
||||
ENV NVM_DIR=/root/.nvm
|
||||
@@ -195,7 +194,7 @@ After creation of the image you can start container interactively and run comman
|
||||
docker run --rm -it nvmimage
|
||||
|
||||
root@0a6b5a237c14:/# nvm -v
|
||||
0.40.4
|
||||
0.40.3
|
||||
|
||||
root@0a6b5a237c14:/# node -v
|
||||
v19.9.0
|
||||
@@ -258,7 +257,7 @@ You can use a task:
|
||||
```yaml
|
||||
- name: Install nvm
|
||||
ansible.builtin.shell: >
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
||||
args:
|
||||
creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"
|
||||
```
|
||||
@@ -279,7 +278,7 @@ which should output `nvm` if the installation was successful. Please note that `
|
||||
|
||||
If you're running a system without prepackaged binary available, which means you're going to install node or io.js from its source code, you need to make sure your system has a C++ compiler. For OS X, Xcode will work, for Debian/Ubuntu based GNU/Linux, the `build-essential` and `libssl-dev` packages work.
|
||||
|
||||
**Note:** `nvm` also supports Windows in some cases. It should work through WSL (Windows Subsystem for Linux) depending on the version of WSL. It should also work with [Git Bash](https://gitforwindows.org/) (MSYS) or [Cygwin](https://cygwin.com). Otherwise, for Windows, a few alternatives exist, which are neither supported nor developed by us:
|
||||
**Note:** `nvm` also supports Windows in some cases. It should work through WSL (Windows Subsystem for Linux) depending on the version of WSL. It should also work with [GitBash](https://gitforwindows.org/) (MSYS) or [Cygwin](https://cygwin.com). Otherwise, for Windows, a few alternatives exist, which are neither supported nor developed by us:
|
||||
|
||||
- [nvm-windows](https://github.com/coreybutler/nvm-windows)
|
||||
- [nodist](https://github.com/marcelklehr/nodist)
|
||||
@@ -320,7 +319,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.4`
|
||||
1. `cd ~/.nvm` and check out the latest version with `git checkout v0.40.3`
|
||||
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:
|
||||
@@ -483,22 +482,6 @@ nvm install-latest-npm
|
||||
If you've already gotten an error to the effect of "npm does not support Node.js", you'll need to (1) revert to a previous node version (`nvm ls` & `nvm use <your latest _working_ version from the ls>`), (2) delete the newly created node version (`nvm uninstall <your _broken_ version of node from the ls>`), then (3) rerun your `nvm install` with the `--latest-npm` flag.
|
||||
|
||||
|
||||
### Offline Install
|
||||
|
||||
If you've previously downloaded a node version (or it's still in the cache), you can install it without any network access using the `--offline` flag:
|
||||
|
||||
```sh
|
||||
nvm install --offline 14.7.0
|
||||
```
|
||||
|
||||
This resolves versions using only locally installed versions and cached downloads. It will not attempt to download anything. This is useful in air-gapped environments, on planes, or when you want to avoid network latency.
|
||||
|
||||
You can combine `--offline` with `--lts` to install the latest cached LTS version (as long as LTS aliases have been populated by a prior `nvm ls-remote --lts`):
|
||||
|
||||
```sh
|
||||
nvm install --offline --lts
|
||||
```
|
||||
|
||||
### Default Global Packages From File While Installing
|
||||
|
||||
If you have a list of default packages you want installed every time you install a new version, we support that too -- just add the package names, one per line, to the file `$NVM_DIR/default-packages`. You can add anything npm would accept as a package argument on the command line.
|
||||
@@ -940,18 +923,18 @@ Alpine Linux, unlike mainstream/traditional Linux distributions, is based on [Bu
|
||||
|
||||
There is a `-s` flag for `nvm install` which requests nvm download Node source and compile it locally.
|
||||
|
||||
If installing nvm on Alpine Linux *is* still what you want or need to do, you should be able to achieve this by running the following from your Alpine Linux shell, depending on which version you are using:
|
||||
If installing nvm on Alpine Linux *is* still what you want or need to do, you should be able to achieve this by running the following from you Alpine Linux shell, depending on which version you are using:
|
||||
|
||||
### 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.4/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/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.4/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/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._
|
||||
@@ -1054,9 +1037,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.4/install.sh
|
||||
[2]: https://github.com/nvm-sh/nvm/blob/v0.40.3/install.sh
|
||||
[3]: https://github.com/nvm-sh/nvm/actions/workflows/tests-fast.yml
|
||||
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.40.4
|
||||
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.40.3
|
||||
[Urchin]: https://git.sdf.org/tlevine/urchin
|
||||
[Fish]: https://fishshell.com
|
||||
|
||||
@@ -1114,7 +1097,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.476)
|
||||
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.376)
|
||||
|
||||
- Exit back to your native shell.
|
||||
|
||||
@@ -1141,7 +1124,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.4/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/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
|
||||
@@ -1176,7 +1159,7 @@ Currently, the sole maintainer is [@ljharb](https://github.com/ljharb) - more ma
|
||||
|
||||
## Project Support
|
||||
|
||||
Only the latest version (v0.40.4 at this time) is supported.
|
||||
Only the latest version (v0.40.3 at this time) is supported.
|
||||
|
||||
## Enterprise Support
|
||||
|
||||
|
||||
31
install.sh
31
install.sh
@@ -33,7 +33,7 @@ nvm_install_dir() {
|
||||
}
|
||||
|
||||
nvm_latest_version() {
|
||||
nvm_echo "v0.40.4"
|
||||
nvm_echo "v0.40.3"
|
||||
}
|
||||
|
||||
nvm_profile_is_bash_or_zsh() {
|
||||
@@ -67,7 +67,7 @@ nvm_source() {
|
||||
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
|
||||
|
||||
The default repository for this install is \`nvm-sh/nvm\`,
|
||||
but the environment variable \`\$NVM_INSTALL_GITHUB_REPO\` is
|
||||
but the environment variables \`\$NVM_INSTALL_GITHUB_REPO\` is
|
||||
currently set to \`${NVM_GITHUB_REPO}\`.
|
||||
|
||||
If this is not intentional, interrupt this installation and
|
||||
@@ -149,10 +149,7 @@ install_nvm_from_git() {
|
||||
fetch_error="Failed to fetch origin with $NVM_VERSION. Please report this!"
|
||||
nvm_echo "=> Downloading nvm from git to '$INSTALL_DIR'"
|
||||
command printf '\r=> '
|
||||
mkdir -p "${INSTALL_DIR}" || {
|
||||
nvm_echo >&2 "Failed to create directory '${INSTALL_DIR}'"
|
||||
exit 2
|
||||
}
|
||||
mkdir -p "${INSTALL_DIR}"
|
||||
if [ "$(ls -A "${INSTALL_DIR}")" ]; then
|
||||
# Initializing repo
|
||||
command git init "${INSTALL_DIR}" || {
|
||||
@@ -219,7 +216,7 @@ nvm_install_node() {
|
||||
local CURRENT_NVM_NODE
|
||||
|
||||
CURRENT_NVM_NODE="$(nvm_version current)"
|
||||
if [ "$(nvm_version "$NODE_VERSION_LOCAL")" = "$CURRENT_NVM_NODE" ]; then
|
||||
if [ "$(nvm_version "$NODE_VERSION_LOCAL")" == "$CURRENT_NVM_NODE" ]; then
|
||||
nvm_echo "=> Node.js version $NODE_VERSION_LOCAL has been successfully installed"
|
||||
else
|
||||
nvm_echo >&2 "Failed to install Node.js $NODE_VERSION_LOCAL"
|
||||
@@ -237,10 +234,7 @@ install_nvm_as_script() {
|
||||
NVM_BASH_COMPLETION_SOURCE="$(nvm_source script-nvm-bash-completion)"
|
||||
|
||||
# Downloading to $INSTALL_DIR
|
||||
mkdir -p "$INSTALL_DIR" || {
|
||||
nvm_echo >&2 "Failed to create directory '$INSTALL_DIR'"
|
||||
return 1
|
||||
}
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
if [ -f "$INSTALL_DIR/nvm.sh" ]; then
|
||||
nvm_echo "=> nvm is already installed in $INSTALL_DIR, trying to update the script"
|
||||
else
|
||||
@@ -380,10 +374,7 @@ nvm_do_install() {
|
||||
fi
|
||||
|
||||
if [ "${NVM_DIR}" = "$(nvm_default_install_dir)" ]; then
|
||||
mkdir "${NVM_DIR}" || {
|
||||
nvm_echo >&2 "Failed to create directory '${NVM_DIR}'"
|
||||
exit 2
|
||||
}
|
||||
mkdir "${NVM_DIR}"
|
||||
else
|
||||
nvm_echo >&2 "You have \$NVM_DIR set to \"${NVM_DIR}\", but that directory does not exist. Check your profile files and environment."
|
||||
exit 1
|
||||
@@ -443,13 +434,13 @@ nvm_do_install() {
|
||||
elif [ -z "${NVM_PROFILE-}" ] ; then
|
||||
local TRIED_PROFILE
|
||||
if [ -n "${PROFILE}" ]; then
|
||||
TRIED_PROFILE="${PROFILE} (as defined in \$PROFILE), "
|
||||
TRIED_PROFILE="${NVM_PROFILE} (as defined in \$PROFILE), "
|
||||
fi
|
||||
nvm_echo "=> Profile not found. Tried ${TRIED_PROFILE-}~/.bashrc, ~/.bash_profile, ~/.zprofile, ~/.zshrc, and ~/.profile."
|
||||
nvm_echo "=> Create one of them and run this script again"
|
||||
nvm_echo " OR"
|
||||
nvm_echo "=> Append the following lines to the correct file yourself:"
|
||||
command printf '%b' "${SOURCE_STR}"
|
||||
command printf "${SOURCE_STR}"
|
||||
nvm_echo
|
||||
else
|
||||
if nvm_profile_is_bash_or_zsh "${NVM_PROFILE-}"; then
|
||||
@@ -457,14 +448,14 @@ nvm_do_install() {
|
||||
fi
|
||||
if ! command grep -qc '/nvm.sh' "$NVM_PROFILE"; then
|
||||
nvm_echo "=> Appending nvm source string to $NVM_PROFILE"
|
||||
command printf '%b' "${SOURCE_STR}" >> "$NVM_PROFILE"
|
||||
command printf "${SOURCE_STR}" >> "$NVM_PROFILE"
|
||||
else
|
||||
nvm_echo "=> nvm source string already in ${NVM_PROFILE}"
|
||||
fi
|
||||
# shellcheck disable=SC2016
|
||||
if ${BASH_OR_ZSH} && ! command grep -qc '$NVM_DIR/bash_completion' "$NVM_PROFILE"; then
|
||||
nvm_echo "=> Appending bash_completion source string to $NVM_PROFILE"
|
||||
command printf '%b' "$COMPLETION_STR" >> "$NVM_PROFILE"
|
||||
command printf "$COMPLETION_STR" >> "$NVM_PROFILE"
|
||||
else
|
||||
nvm_echo "=> bash_completion source string already in ${NVM_PROFILE}"
|
||||
fi
|
||||
@@ -485,7 +476,7 @@ nvm_do_install() {
|
||||
nvm_reset
|
||||
|
||||
nvm_echo "=> Close and reopen your terminal to start using nvm or run the following to use it now:"
|
||||
command printf '%b' "${SOURCE_STR}"
|
||||
command printf "${SOURCE_STR}"
|
||||
if ${BASH_OR_ZSH} ; then
|
||||
command printf "${COMPLETION_STR}"
|
||||
fi
|
||||
|
||||
2
nvm-exec
2
nvm-exec
@@ -10,7 +10,7 @@ unset NVM_CD_FLAGS
|
||||
if [ -n "$NODE_VERSION" ]; then
|
||||
nvm use "$NODE_VERSION" > /dev/null || exit 127
|
||||
else
|
||||
{ NVM_RC_VERSION="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1 && nvm_ensure_version_installed "$NVM_RC_VERSION";
|
||||
nvm_rc_version > /dev/null && nvm_ensure_version_installed "$NVM_RC_VERSION";
|
||||
if ! nvm use >/dev/null 2>&1; then
|
||||
echo "No NODE_VERSION provided; no .nvmrc file found" >&2
|
||||
exit 127
|
||||
|
||||
292
nvm.sh
292
nvm.sh
@@ -83,7 +83,7 @@ nvm_has_colors() {
|
||||
if nvm_has tput; then
|
||||
NVM_NUM_COLORS="$(command tput -T "${TERM:-vt100}" colors)"
|
||||
fi
|
||||
[ -t 1 ] && [ "${NVM_NUM_COLORS:--1}" -ge 8 ] && [ "${NVM_NO_COLORS-}" != '--no-colors' ]
|
||||
[ "${NVM_NUM_COLORS:--1}" -ge 8 ] && [ "${NVM_NO_COLORS-}" != '--no-colors' ]
|
||||
}
|
||||
|
||||
nvm_curl_libz_support() {
|
||||
@@ -149,8 +149,7 @@ nvm_download() {
|
||||
")
|
||||
|
||||
if [ -n "${NVM_AUTH_HEADER:-}" ]; then
|
||||
sanitized_header=$(nvm_sanitize_auth_header "${NVM_AUTH_HEADER}")
|
||||
ARGS="${ARGS} --header \"${sanitized_header}\""
|
||||
ARGS="${ARGS} --header \"${NVM_AUTH_HEADER}\""
|
||||
fi
|
||||
# shellcheck disable=SC2086
|
||||
eval wget $ARGS
|
||||
@@ -602,6 +601,7 @@ EOF
|
||||
}
|
||||
|
||||
nvm_rc_version() {
|
||||
export NVM_RC_VERSION=''
|
||||
local NVMRC_PATH
|
||||
NVMRC_PATH="$(nvm_find_nvmrc)"
|
||||
if [ ! -e "${NVMRC_PATH}" ]; then
|
||||
@@ -611,7 +611,7 @@ nvm_rc_version() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
local NVM_RC_VERSION
|
||||
|
||||
if ! NVM_RC_VERSION="$(nvm_process_nvmrc "${NVMRC_PATH}")"; then
|
||||
return 1
|
||||
fi
|
||||
@@ -625,7 +625,6 @@ nvm_rc_version() {
|
||||
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
||||
nvm_echo "Found '${NVMRC_PATH}' with version <${NVM_RC_VERSION}>"
|
||||
fi
|
||||
nvm_echo "${NVM_RC_VERSION}" >&3
|
||||
}
|
||||
|
||||
nvm_clang_version() {
|
||||
@@ -759,11 +758,6 @@ nvm_version() {
|
||||
;;
|
||||
esac
|
||||
VERSION="$(nvm_ls "${PATTERN}" | command tail -1)"
|
||||
case "${VERSION}" in
|
||||
system[[:blank:]]*)
|
||||
VERSION='system'
|
||||
;;
|
||||
esac
|
||||
if [ -z "${VERSION}" ] || [ "_${VERSION}" = "_N/A" ]; then
|
||||
nvm_echo "N/A"
|
||||
return 3
|
||||
@@ -878,10 +872,7 @@ ${NVM_LS_REMOTE_POST_MERGED_OUTPUT}" | nvm_grep -v "N/A" | command sed '/^ *$/d'
|
||||
# the `sed` is to remove trailing whitespaces (see "weird behavior" ~25 lines up)
|
||||
nvm_echo "${VERSIONS}" | command sed 's/ *$//g'
|
||||
# shellcheck disable=SC2317
|
||||
if [ "${NVM_LS_REMOTE_EXIT_CODE}" != '0' ]; then
|
||||
return "${NVM_LS_REMOTE_EXIT_CODE}"
|
||||
fi
|
||||
return "${NVM_LS_REMOTE_IOJS_EXIT_CODE}"
|
||||
return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE
|
||||
}
|
||||
|
||||
nvm_is_valid_version() {
|
||||
@@ -1156,7 +1147,7 @@ nvm_print_formatted_alias() {
|
||||
fi
|
||||
local ARROW
|
||||
ARROW='->'
|
||||
if [ "${NVM_HAS_COLORS-}" = 1 ] || nvm_has_colors; then
|
||||
if nvm_has_colors; then
|
||||
ARROW='\033[0;90m->\033[0m'
|
||||
if [ "_${DEFAULT}" = '_true' ]; then
|
||||
NEWLINE=" \033[${DEFAULT_COLOR}(default)\033[0m\n"
|
||||
@@ -1257,17 +1248,11 @@ nvm_list_aliases() {
|
||||
return $?
|
||||
fi
|
||||
|
||||
local NVM_HAS_COLORS
|
||||
NVM_HAS_COLORS=0
|
||||
if nvm_has_colors; then
|
||||
NVM_HAS_COLORS=1
|
||||
fi
|
||||
|
||||
nvm_is_zsh && unsetopt local_options nomatch
|
||||
(
|
||||
local ALIAS_PATH
|
||||
for ALIAS_PATH in "${NVM_ALIAS_DIR}/${ALIAS}"*; do
|
||||
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_HAS_COLORS="${NVM_HAS_COLORS}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}" &
|
||||
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}" &
|
||||
done
|
||||
wait
|
||||
) | command sort
|
||||
@@ -1278,7 +1263,7 @@ nvm_list_aliases() {
|
||||
{
|
||||
# shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
|
||||
if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ]; }; then
|
||||
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_HAS_COLORS="${NVM_HAS_COLORS}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "${ALIAS_NAME}"
|
||||
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "${ALIAS_NAME}"
|
||||
fi
|
||||
} &
|
||||
done
|
||||
@@ -1290,7 +1275,7 @@ nvm_list_aliases() {
|
||||
# shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
|
||||
for ALIAS_PATH in "${NVM_ALIAS_DIR}/lts/${ALIAS}"*; do
|
||||
{
|
||||
LTS_ALIAS="$(NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_HAS_COLORS="${NVM_HAS_COLORS}" NVM_LTS=true nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}")"
|
||||
LTS_ALIAS="$(NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_LTS=true nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}")"
|
||||
if [ -n "${LTS_ALIAS}" ]; then
|
||||
nvm_echo "${LTS_ALIAS}"
|
||||
fi
|
||||
@@ -1368,7 +1353,7 @@ nvm_resolve_alias() {
|
||||
break
|
||||
fi
|
||||
|
||||
if command printf '%b' "${SEEN_ALIASES}" | nvm_grep -q -e "^${ALIAS_TEMP}$"; then
|
||||
if command printf "${SEEN_ALIASES}" | nvm_grep -q -e "^${ALIAS_TEMP}$"; then
|
||||
ALIAS="∞"
|
||||
break
|
||||
fi
|
||||
@@ -1477,18 +1462,6 @@ nvm_ls() {
|
||||
PATTERN="${PATTERN}-"
|
||||
;;
|
||||
*)
|
||||
local ALIAS_TARGET
|
||||
ALIAS_TARGET="$(nvm_resolve_alias "${PATTERN}" 2>/dev/null || nvm_echo)"
|
||||
if [ "_${ALIAS_TARGET}" = '_system' ] && (nvm_has_system_iojs || nvm_has_system_node); then
|
||||
local SYSTEM_VERSION
|
||||
SYSTEM_VERSION="$(nvm deactivate >/dev/null 2>&1 && node -v 2>/dev/null)"
|
||||
if [ -n "${SYSTEM_VERSION}" ]; then
|
||||
nvm_echo "system ${SYSTEM_VERSION}"
|
||||
else
|
||||
nvm_echo "system"
|
||||
fi
|
||||
return
|
||||
fi
|
||||
if nvm_resolve_local_alias "${PATTERN}"; then
|
||||
return
|
||||
fi
|
||||
@@ -1592,24 +1565,13 @@ nvm_ls() {
|
||||
fi
|
||||
|
||||
if [ "${NVM_ADD_SYSTEM-}" = true ]; then
|
||||
local SYSTEM_VERSION
|
||||
SYSTEM_VERSION="$(nvm deactivate >/dev/null 2>&1 && node -v 2>/dev/null)"
|
||||
case "${PATTERN}" in
|
||||
'' | v)
|
||||
if [ -n "${SYSTEM_VERSION}" ]; then
|
||||
VERSIONS="${VERSIONS}
|
||||
system ${SYSTEM_VERSION}"
|
||||
else
|
||||
VERSIONS="${VERSIONS}
|
||||
VERSIONS="${VERSIONS}
|
||||
system"
|
||||
fi
|
||||
;;
|
||||
system)
|
||||
if [ -n "${SYSTEM_VERSION}" ]; then
|
||||
VERSIONS="system ${SYSTEM_VERSION}"
|
||||
else
|
||||
VERSIONS="system"
|
||||
fi
|
||||
VERSIONS="system"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -1951,7 +1913,6 @@ BEGIN {
|
||||
|
||||
fmt_latest_lts = has_colors && latest_lts_color ? ("\033[" latest_lts_color " (Latest LTS: %s)\033[0m") : " (Latest LTS: %s)";
|
||||
fmt_old_lts = has_colors && old_lts_color ? ("\033[" old_lts_color " (LTS: %s)\033[0m") : " (LTS: %s)";
|
||||
fmt_system_target = has_colors && system_color ? (" (\033[" system_color "-> %s\033[0m)") : " (-> %s)";
|
||||
|
||||
split(remote_versions, lines, "|");
|
||||
split(installed_versions, installed, "|");
|
||||
@@ -1983,8 +1944,6 @@ BEGIN {
|
||||
|
||||
if (cols == 1) {
|
||||
formatted = sprintf(fmt_version, version);
|
||||
} else if (version == "system" && cols >= 2) {
|
||||
formatted = sprintf((fmt_version fmt_system_target), version, fields[2]);
|
||||
} else if (cols == 2) {
|
||||
formatted = sprintf((fmt_version padding fmt_old_lts), version, fields[2]);
|
||||
} else if (cols == 3 && fields[3] == "*") {
|
||||
@@ -2162,7 +2121,7 @@ nvm_get_arch() {
|
||||
|
||||
# If running a 64bit ARM kernel but a 32bit ARM userland,
|
||||
# change ARCH to 32bit ARM (armv7l) if /sbin/init is 32bit executable
|
||||
if [ "$(command uname)" = "Linux" ] \
|
||||
if [ "$(uname)" = "Linux" ] \
|
||||
&& [ "${NVM_ARCH}" = arm64 ] \
|
||||
&& [ "$(command od -An -t x1 -j 4 -N 1 "/sbin/init" 2>/dev/null)" = ' 01' ]\
|
||||
; then
|
||||
@@ -2171,10 +2130,7 @@ nvm_get_arch() {
|
||||
fi
|
||||
|
||||
if [ -f "/etc/alpine-release" ]; then
|
||||
# Alpine Linux uses musl libc; only x64-musl binaries are available
|
||||
case "${NVM_ARCH}" in
|
||||
x64) NVM_ARCH=x64-musl ;;
|
||||
esac
|
||||
NVM_ARCH=x64-musl
|
||||
fi
|
||||
|
||||
nvm_echo "${NVM_ARCH}"
|
||||
@@ -2250,7 +2206,7 @@ nvm_get_mirror() {
|
||||
esac
|
||||
|
||||
|
||||
if ! nvm_echo "${NVM_MIRROR}" | command awk '{ if ($0 !~ /^https?:\/\/[a-zA-Z0-9.\/_-]+$/) exit 1 }'; then
|
||||
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'
|
||||
return 2
|
||||
fi
|
||||
@@ -2282,7 +2238,7 @@ nvm_install_binary_extract() {
|
||||
command mkdir -p "${TMPDIR}" && \
|
||||
VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")" || return 1
|
||||
|
||||
# For Windows system (Git Bash with MSYS, Cygwin)
|
||||
# For Windows system (GitBash with MSYS, Cygwin)
|
||||
if [ "${NVM_OS}" = 'win' ]; then
|
||||
VERSION_PATH="${VERSION_PATH}/bin"
|
||||
command unzip -q "${TARBALL}" -d "${TMPDIR}" || return 1
|
||||
@@ -2374,7 +2330,7 @@ nvm_install_binary() {
|
||||
# Read nosource from arguments
|
||||
if [ "${nosource-}" = '1' ]; then
|
||||
nvm_err 'Binary download failed. Download from source aborted.'
|
||||
return 2
|
||||
return 0
|
||||
fi
|
||||
|
||||
nvm_err 'Binary download failed, trying source.'
|
||||
@@ -2502,35 +2458,22 @@ nvm_download_artifact() {
|
||||
local COMPRESSION
|
||||
COMPRESSION="$(nvm_get_artifact_compression "${VERSION}")"
|
||||
|
||||
local CHECKSUM
|
||||
CHECKSUM="$(nvm_get_checksum "${FLAVOR}" "${TYPE}" "${VERSION}" "${SLUG}" "${COMPRESSION}")"
|
||||
|
||||
local tmpdir
|
||||
if [ "${KIND}" = 'binary' ]; then
|
||||
tmpdir="$(nvm_cache_dir)/bin/${SLUG}"
|
||||
else
|
||||
tmpdir="$(nvm_cache_dir)/src/${SLUG}"
|
||||
fi
|
||||
command mkdir -p "${tmpdir}/files" || (
|
||||
nvm_err "creating directory ${tmpdir}/files failed"
|
||||
return 3
|
||||
)
|
||||
|
||||
local TARBALL
|
||||
TARBALL="${tmpdir}/${SLUG}.${COMPRESSION}"
|
||||
|
||||
if [ "${NVM_OFFLINE-}" = 1 ]; then
|
||||
# In offline mode, use cached tarball without checksum or download
|
||||
if [ -r "${TARBALL}" ]; then
|
||||
nvm_err "Offline: using cached archive $(nvm_sanitize_path "${TARBALL}")"
|
||||
nvm_echo "${TARBALL}"
|
||||
return 0
|
||||
fi
|
||||
nvm_err "Offline: no cached archive found for ${SLUG}"
|
||||
return 4
|
||||
fi
|
||||
|
||||
local CHECKSUM
|
||||
CHECKSUM="$(nvm_get_checksum "${FLAVOR}" "${TYPE}" "${VERSION}" "${SLUG}" "${COMPRESSION}")"
|
||||
|
||||
command mkdir -p "${tmpdir}/files" || {
|
||||
nvm_err "creating directory ${tmpdir}/files failed"
|
||||
return 3
|
||||
}
|
||||
|
||||
local TARBALL_URL
|
||||
if nvm_version_greater_than_or_equal_to "${VERSION}" 0.1.14; then
|
||||
TARBALL_URL="${MIRROR}/${VERSION}/${SLUG}.${COMPRESSION}"
|
||||
@@ -2552,11 +2495,11 @@ nvm_download_artifact() {
|
||||
command rm -rf "${TARBALL}"
|
||||
fi
|
||||
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}"
|
||||
nvm_err "download from ${TARBALL_URL} failed"
|
||||
return 4
|
||||
}
|
||||
)
|
||||
|
||||
if nvm_grep '404 Not Found' "${TARBALL}" >/dev/null; then
|
||||
command rm -rf "${TARBALL}" "${tmpdir}"
|
||||
@@ -2564,10 +2507,10 @@ nvm_download_artifact() {
|
||||
return 5
|
||||
fi
|
||||
|
||||
nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" || {
|
||||
nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" || (
|
||||
command rm -rf "${tmpdir}/files"
|
||||
return 6
|
||||
}
|
||||
)
|
||||
|
||||
nvm_echo "${TARBALL}"
|
||||
}
|
||||
@@ -2967,7 +2910,7 @@ nvm_iojs_version_has_solaris_binary() {
|
||||
IOJS_VERSION="$1"
|
||||
local STRIPPED_IOJS_VERSION
|
||||
STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "${IOJS_VERSION}")"
|
||||
if [ "_${STRIPPED_IOJS_VERSION}" = "_${IOJS_VERSION}" ]; then
|
||||
if [ "_${STRIPPED_IOJS_VERSION}" = "${IOJS_VERSION}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -3075,57 +3018,6 @@ nvm_cache_dir() {
|
||||
nvm_echo "${NVM_DIR}/.cache"
|
||||
}
|
||||
|
||||
# args: pattern
|
||||
# Lists versions available in the local cache (not yet installed).
|
||||
# Returns version numbers like "v18.20.4", one per line, sorted.
|
||||
nvm_ls_cached() {
|
||||
local PATTERN
|
||||
PATTERN="${1-}"
|
||||
local CACHE_BIN_DIR
|
||||
CACHE_BIN_DIR="$(nvm_cache_dir)/bin"
|
||||
if [ ! -d "${CACHE_BIN_DIR}" ]; then
|
||||
return
|
||||
fi
|
||||
local NVM_OS
|
||||
NVM_OS="$(nvm_get_os)"
|
||||
local NVM_ARCH
|
||||
NVM_ARCH="$(nvm_get_arch)"
|
||||
local SUFFIX
|
||||
SUFFIX="${NVM_OS}-${NVM_ARCH}"
|
||||
# shellcheck disable=SC2010
|
||||
command ls -1 "${CACHE_BIN_DIR}" \
|
||||
| nvm_grep "^node-v.*-${SUFFIX}\$" \
|
||||
| command sed "s/^node-\\(v[0-9][0-9.]*\\)-${SUFFIX}\$/\\1/" \
|
||||
| nvm_grep "$(nvm_ensure_version_prefix "${PATTERN}")" \
|
||||
| command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n
|
||||
}
|
||||
|
||||
# args: pattern
|
||||
# Resolves a version pattern to a single version using only locally
|
||||
# installed versions and cached downloads. No network access.
|
||||
nvm_offline_version() {
|
||||
local PATTERN
|
||||
PATTERN="${1-}"
|
||||
|
||||
# First try locally installed versions
|
||||
local VERSION
|
||||
VERSION="$(nvm_version "${PATTERN}")"
|
||||
if [ "_${VERSION}" != '_N/A' ]; then
|
||||
nvm_echo "${VERSION}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Then try cached downloads
|
||||
VERSION="$(nvm_ls_cached "${PATTERN}" | command tail -1)"
|
||||
if [ -n "${VERSION}" ]; then
|
||||
nvm_echo "${VERSION}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
nvm_echo 'N/A'
|
||||
return 3
|
||||
}
|
||||
|
||||
nvm() {
|
||||
if [ "$#" -lt 1 ]; then
|
||||
nvm --help
|
||||
@@ -3206,7 +3098,6 @@ nvm() {
|
||||
nvm_echo ' --skip-default-packages When installing, skip the default-packages file if it exists'
|
||||
nvm_echo ' --latest-npm After installing, attempt to upgrade to the latest working npm on the given node version'
|
||||
nvm_echo ' --no-progress Disable the progress bar on any downloads'
|
||||
nvm_echo ' --offline Install from cache only, without downloading anything'
|
||||
nvm_echo ' --alias=<name> After installing, set the alias specified to the version specified. (same as: nvm alias <name> <version>)'
|
||||
nvm_echo ' --default After installing, set default alias to the version specified. (same as: nvm alias default <version>)'
|
||||
nvm_echo ' --save After installing, write the specified version to .nvmrc'
|
||||
@@ -3332,10 +3223,10 @@ nvm() {
|
||||
nvm_err "\${HOME}: ${HOME}"
|
||||
nvm_err "\${NVM_DIR}: '$(nvm_sanitize_path "${NVM_DIR}")'"
|
||||
nvm_err "\${PATH}: $(nvm_sanitize_path "${PATH}")"
|
||||
nvm_err "\$PREFIX: '$(nvm_sanitize_path "${PREFIX-}")'"
|
||||
nvm_err "\${NPM_CONFIG_PREFIX}: '$(nvm_sanitize_path "${NPM_CONFIG_PREFIX-}")'"
|
||||
nvm_err "\$NVM_NODEJS_ORG_MIRROR: '${NVM_NODEJS_ORG_MIRROR-}'"
|
||||
nvm_err "\$NVM_IOJS_ORG_MIRROR: '${NVM_IOJS_ORG_MIRROR-}'"
|
||||
nvm_err "\$PREFIX: '$(nvm_sanitize_path "${PREFIX}")'"
|
||||
nvm_err "\${NPM_CONFIG_PREFIX}: '$(nvm_sanitize_path "${NPM_CONFIG_PREFIX}")'"
|
||||
nvm_err "\$NVM_NODEJS_ORG_MIRROR: '${NVM_NODEJS_ORG_MIRROR}'"
|
||||
nvm_err "\$NVM_IOJS_ORG_MIRROR: '${NVM_IOJS_ORG_MIRROR}'"
|
||||
nvm_err "shell version: '$(${SHELL} --version | command head -n 1)'"
|
||||
nvm_err "uname -a: '$(command uname -a | command awk '{$2=""; print}' | command xargs)'"
|
||||
nvm_err "checksum binary: '$(nvm_get_checksum_binary 2>/dev/null)'"
|
||||
@@ -3412,6 +3303,11 @@ nvm() {
|
||||
local NVM_OS
|
||||
NVM_OS="$(nvm_get_os)"
|
||||
|
||||
if ! nvm_has "curl" && ! nvm_has "wget"; then
|
||||
nvm_err 'nvm needs curl or wget to proceed.'
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
version_not_provided=1
|
||||
fi
|
||||
@@ -3419,11 +3315,9 @@ nvm() {
|
||||
local nobinary
|
||||
local nosource
|
||||
local noprogress
|
||||
local NVM_OFFLINE
|
||||
nobinary=0
|
||||
noprogress=0
|
||||
nosource=0
|
||||
NVM_OFFLINE=0
|
||||
local LTS
|
||||
local ALIAS
|
||||
local NVM_UPGRADE_NPM
|
||||
@@ -3445,7 +3339,7 @@ nvm() {
|
||||
shift # consume "-s"
|
||||
nobinary=1
|
||||
if [ $nosource -eq 1 ]; then
|
||||
nvm_err '-s and -b cannot be set together since they would skip install from both binary and source'
|
||||
nvm err '-s and -b cannot be set together since they would skip install from both binary and source'
|
||||
return 6
|
||||
fi
|
||||
;;
|
||||
@@ -3453,7 +3347,7 @@ nvm() {
|
||||
shift # consume "-b"
|
||||
nosource=1
|
||||
if [ $nobinary -eq 1 ]; then
|
||||
nvm_err '-s and -b cannot be set together since they would skip install from both binary and source'
|
||||
nvm err '-s and -b cannot be set together since they would skip install from both binary and source'
|
||||
return 6
|
||||
fi
|
||||
;;
|
||||
@@ -3466,10 +3360,6 @@ nvm() {
|
||||
noprogress=1
|
||||
shift
|
||||
;;
|
||||
--offline)
|
||||
NVM_OFFLINE=1
|
||||
shift
|
||||
;;
|
||||
--lts)
|
||||
LTS='*'
|
||||
shift
|
||||
@@ -3546,11 +3436,6 @@ nvm() {
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "${NVM_OFFLINE}" != 1 ] && ! nvm_has "curl" && ! nvm_has "wget"; then
|
||||
nvm_err 'nvm needs curl or wget to proceed.'
|
||||
return 1
|
||||
fi
|
||||
|
||||
local provided_version
|
||||
provided_version="${1-}"
|
||||
|
||||
@@ -3566,11 +3451,14 @@ nvm() {
|
||||
shift
|
||||
fi
|
||||
else
|
||||
{ provided_version="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1
|
||||
if [ $version_not_provided -eq 1 ] && [ -z "${provided_version}" ]; then
|
||||
nvm_rc_version
|
||||
if [ $version_not_provided -eq 1 ] && [ -z "${NVM_RC_VERSION}" ]; then
|
||||
unset NVM_RC_VERSION
|
||||
>&2 nvm --help
|
||||
return 127
|
||||
fi
|
||||
provided_version="${NVM_RC_VERSION}"
|
||||
unset NVM_RC_VERSION
|
||||
fi
|
||||
elif [ $# -gt 0 ]; then
|
||||
shift
|
||||
@@ -3588,27 +3476,8 @@ nvm() {
|
||||
esac
|
||||
|
||||
local EXIT_CODE
|
||||
|
||||
if [ "${NVM_OFFLINE}" = 1 ]; then
|
||||
local OFFLINE_PATTERN
|
||||
OFFLINE_PATTERN="${provided_version}"
|
||||
if [ -n "${LTS-}" ]; then
|
||||
if [ "${LTS}" = '*' ]; then
|
||||
OFFLINE_PATTERN="$(nvm_resolve_alias 'lts/*' 2>/dev/null || nvm_echo)"
|
||||
else
|
||||
OFFLINE_PATTERN="$(nvm_resolve_alias "lts/${LTS}" 2>/dev/null || nvm_echo)"
|
||||
fi
|
||||
if [ -z "${OFFLINE_PATTERN}" ]; then
|
||||
nvm_err "LTS alias '${LTS}' not found locally. Run \`nvm ls-remote --lts\` first to populate LTS aliases."
|
||||
return 3
|
||||
fi
|
||||
fi
|
||||
VERSION="$(nvm_offline_version "${OFFLINE_PATTERN}")"
|
||||
EXIT_CODE="$?"
|
||||
else
|
||||
VERSION="$(NVM_VERSION_ONLY=true NVM_LTS="${LTS-}" nvm_remote_version "${provided_version}")"
|
||||
EXIT_CODE="$?"
|
||||
fi
|
||||
VERSION="$(NVM_VERSION_ONLY=true NVM_LTS="${LTS-}" nvm_remote_version "${provided_version}")"
|
||||
EXIT_CODE="$?"
|
||||
|
||||
if [ "${VERSION}" = 'N/A' ] || [ $EXIT_CODE -ne 0 ]; then
|
||||
local LTS_MSG
|
||||
@@ -3624,17 +3493,9 @@ nvm() {
|
||||
return 3
|
||||
fi
|
||||
else
|
||||
if [ "${NVM_OFFLINE}" = 1 ]; then
|
||||
REMOTE_CMD='nvm ls'
|
||||
else
|
||||
REMOTE_CMD='nvm ls-remote'
|
||||
fi
|
||||
fi
|
||||
if [ "${NVM_OFFLINE}" = 1 ]; then
|
||||
nvm_err "Version '${provided_version}' ${LTS_MSG-}not found locally or in cache - try \`${REMOTE_CMD}\` to browse available versions."
|
||||
else
|
||||
nvm_err "Version '${provided_version}' ${LTS_MSG-}not found - try \`${REMOTE_CMD}\` to browse available versions."
|
||||
REMOTE_CMD='nvm ls-remote'
|
||||
fi
|
||||
nvm_err "Version '${provided_version}' ${LTS_MSG-}not found - try \`${REMOTE_CMD}\` to browse available versions."
|
||||
return 3
|
||||
fi
|
||||
|
||||
@@ -3774,7 +3635,7 @@ nvm() {
|
||||
|
||||
# skip binary install if "nobinary" option specified.
|
||||
if [ $nobinary -ne 1 ] && nvm_binary_available "${VERSION}"; then
|
||||
NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" NVM_OFFLINE="${NVM_OFFLINE}" nvm_install_binary "${FLAVOR}" std "${VERSION}" "${nosource}"
|
||||
NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" nvm_install_binary "${FLAVOR}" std "${VERSION}" "${nosource}"
|
||||
EXIT_CODE=$?
|
||||
else
|
||||
EXIT_CODE=-1
|
||||
@@ -3793,7 +3654,7 @@ nvm() {
|
||||
nvm_err 'Installing from source on non-WSL Windows is not supported'
|
||||
EXIT_CODE=87
|
||||
else
|
||||
NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" NVM_OFFLINE="${NVM_OFFLINE}" nvm_install_source "${FLAVOR}" std "${VERSION}" "${NVM_MAKE_JOBS}" "${ADDITIONAL_PARAMETERS}"
|
||||
NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" nvm_install_source "${FLAVOR}" std "${VERSION}" "${NVM_MAKE_JOBS}" "${ADDITIONAL_PARAMETERS}"
|
||||
EXIT_CODE=$?
|
||||
fi
|
||||
fi
|
||||
@@ -3858,13 +3719,7 @@ nvm() {
|
||||
fi
|
||||
|
||||
if ! nvm_is_version_installed "${VERSION}"; then
|
||||
local REQUESTED_VERSION
|
||||
REQUESTED_VERSION="${PATTERN}"
|
||||
if [ "_${VERSION}" != "_N/A" ] && [ "_${VERSION}" != "_${PATTERN}" ]; then
|
||||
nvm_err "Version '${VERSION}' (inferred from ${PATTERN}) is not installed."
|
||||
else
|
||||
nvm_err "Version '${REQUESTED_VERSION}' is not installed."
|
||||
fi
|
||||
nvm_err "${VERSION} version is not installed..."
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -3906,7 +3761,7 @@ nvm() {
|
||||
nvm_echo "${NVM_SUCCESS_MSG}"
|
||||
|
||||
# rm any aliases that point to uninstalled version.
|
||||
for ALIAS in $(nvm_grep -l "${VERSION}" "$(nvm_alias_path)"/* 2>/dev/null); do
|
||||
for ALIAS in $(nvm_grep -l "${VERSION}" "$(nvm_alias_path)/*" 2>/dev/null); do
|
||||
nvm unalias "$(command basename "${ALIAS}")"
|
||||
done
|
||||
;;
|
||||
@@ -4001,11 +3856,13 @@ nvm() {
|
||||
if [ -n "${NVM_LTS-}" ]; then
|
||||
VERSION="$(nvm_match_version "lts/${NVM_LTS:-*}")"
|
||||
elif [ -z "${PROVIDED_VERSION-}" ]; then
|
||||
{ PROVIDED_VERSION="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1
|
||||
if [ -n "${PROVIDED_VERSION}" ]; then
|
||||
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version
|
||||
if [ -n "${NVM_RC_VERSION-}" ]; then
|
||||
PROVIDED_VERSION="${NVM_RC_VERSION}"
|
||||
IS_VERSION_FROM_NVMRC=1
|
||||
VERSION="$(nvm_version "${PROVIDED_VERSION}")"
|
||||
fi
|
||||
unset NVM_RC_VERSION
|
||||
if [ -z "${VERSION}" ]; then
|
||||
nvm_err 'Please see `nvm --help` or https://github.com/nvm-sh/nvm#nvmrc for more information.'
|
||||
return 127
|
||||
@@ -4133,11 +3990,11 @@ nvm() {
|
||||
done
|
||||
|
||||
if [ $# -lt 1 ] && [ -z "${NVM_LTS-}" ]; then
|
||||
local NVM_RC_VERSION
|
||||
{ NVM_RC_VERSION="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1 && has_checked_nvmrc=1
|
||||
if [ -n "${NVM_RC_VERSION}" ]; then
|
||||
VERSION="$(nvm_version "${NVM_RC_VERSION}")" ||:
|
||||
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version && has_checked_nvmrc=1
|
||||
if [ -n "${NVM_RC_VERSION-}" ]; then
|
||||
VERSION="$(nvm_version "${NVM_RC_VERSION-}")" ||:
|
||||
fi
|
||||
unset NVM_RC_VERSION
|
||||
if [ "${VERSION:-N/A}" = 'N/A' ]; then
|
||||
>&2 nvm --help
|
||||
return 127
|
||||
@@ -4151,11 +4008,12 @@ nvm() {
|
||||
if [ "_${VERSION:-N/A}" = '_N/A' ] && ! nvm_is_valid_version "${provided_version}"; then
|
||||
provided_version=''
|
||||
if [ $has_checked_nvmrc -ne 1 ]; then
|
||||
{ NVM_RC_VERSION="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1 && has_checked_nvmrc=1
|
||||
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version && has_checked_nvmrc=1
|
||||
fi
|
||||
provided_version="${NVM_RC_VERSION}"
|
||||
IS_VERSION_FROM_NVMRC=1
|
||||
VERSION="$(nvm_version "${NVM_RC_VERSION}")" ||:
|
||||
unset NVM_RC_VERSION
|
||||
else
|
||||
shift
|
||||
fi
|
||||
@@ -4216,7 +4074,9 @@ nvm() {
|
||||
elif [ -n "${provided_version}" ]; then
|
||||
VERSION="$(nvm_version "${provided_version}")" ||:
|
||||
if [ "_${VERSION}" = '_N/A' ] && ! nvm_is_valid_version "${provided_version}"; then
|
||||
{ provided_version="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1 && has_checked_nvmrc=1
|
||||
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version && has_checked_nvmrc=1
|
||||
provided_version="${NVM_RC_VERSION}"
|
||||
unset NVM_RC_VERSION
|
||||
VERSION="$(nvm_version "${provided_version}")" ||:
|
||||
else
|
||||
shift
|
||||
@@ -4347,10 +4207,12 @@ nvm() {
|
||||
shift
|
||||
done
|
||||
if [ -z "${provided_version-}" ]; then
|
||||
{ provided_version="$(NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version 3>&1 1>&4)"; } 4>&1
|
||||
if [ -n "${provided_version}" ]; then
|
||||
VERSION=$(nvm_version "${provided_version}") ||:
|
||||
NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version
|
||||
if [ -n "${NVM_RC_VERSION}" ]; then
|
||||
provided_version="${NVM_RC_VERSION}"
|
||||
VERSION=$(nvm_version "${NVM_RC_VERSION}") ||:
|
||||
fi
|
||||
unset NVM_RC_VERSION
|
||||
elif [ "${provided_version}" != 'system' ]; then
|
||||
VERSION="$(nvm_version "${provided_version}")" ||:
|
||||
else
|
||||
@@ -4374,7 +4236,7 @@ nvm() {
|
||||
nvm_err 'System version of node not found.'
|
||||
return 127
|
||||
elif [ "${VERSION}" = '∞' ]; then
|
||||
nvm_err "The alias \"${provided_version}\" leads to an infinite loop. Aborting."
|
||||
nvm_err "The alias \"${2}\" leads to an infinite loop. Aborting."
|
||||
return 8
|
||||
fi
|
||||
|
||||
@@ -4597,7 +4459,7 @@ nvm() {
|
||||
NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}"
|
||||
;;
|
||||
"--version" | "-v")
|
||||
nvm_echo '0.40.4'
|
||||
nvm_echo '0.40.3'
|
||||
;;
|
||||
"unload")
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
@@ -4620,7 +4482,7 @@ nvm() {
|
||||
nvm_binary_available nvm_change_path nvm_strip_path \
|
||||
nvm_num_version_groups nvm_format_version nvm_ensure_version_prefix \
|
||||
nvm_normalize_version nvm_is_valid_version nvm_normalize_lts \
|
||||
nvm_ensure_version_installed nvm_cache_dir nvm_ls_cached nvm_offline_version \
|
||||
nvm_ensure_version_installed nvm_cache_dir \
|
||||
nvm_version_path nvm_alias_path nvm_version_dir \
|
||||
nvm_find_nvmrc nvm_find_up nvm_find_project_dir nvm_tree_contains_path \
|
||||
nvm_version_greater nvm_version_greater_than_or_equal_to \
|
||||
@@ -4645,7 +4507,7 @@ nvm() {
|
||||
nvm_process_nvmrc nvm_nvmrc_invalid_msg \
|
||||
nvm_write_nvmrc \
|
||||
>/dev/null 2>&1
|
||||
unset NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
|
||||
unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
|
||||
NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \
|
||||
NVM_COLORS INSTALLED_COLOR SYSTEM_COLOR \
|
||||
CURRENT_COLOR NOT_INSTALLED_COLOR DEFAULT_COLOR LTS_COLOR \
|
||||
@@ -4777,7 +4639,7 @@ nvm_auto() {
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
elif nvm_rc_version 3>/dev/null >/dev/null 2>&1; then
|
||||
elif nvm_rc_version >/dev/null 2>&1; then
|
||||
nvm use --silent >/dev/null
|
||||
fi
|
||||
else
|
||||
@@ -4789,7 +4651,7 @@ nvm_auto() {
|
||||
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 3>/dev/null >/dev/null 2>&1; then
|
||||
elif nvm_rc_version >/dev/null 2>&1; then
|
||||
nvm install >/dev/null
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "nvm",
|
||||
"version": "0.40.4",
|
||||
"version": "0.40.3",
|
||||
"description": "Node Version Manager - Simple bash script to manage multiple active node.js versions",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
|
||||
@@ -1,29 +1,3 @@
|
||||
# Runs a command once and captures stdout and exit code.
|
||||
# Suppresses xtrace in the subshell. Discards stderr.
|
||||
#
|
||||
# Sets: CAPTURED_STDOUT, CAPTURED_EXIT_CODE
|
||||
#
|
||||
# Usage:
|
||||
# try nvm_version current
|
||||
# [ "$CAPTURED_STDOUT" = "v20.0.0" ] || die "wrong output"
|
||||
# [ "$CAPTURED_EXIT_CODE" = 0 ] || die "wrong exit code"
|
||||
try() {
|
||||
CAPTURED_STDOUT="$(set +x; "$@" 2>/dev/null)" && CAPTURED_EXIT_CODE=0 || CAPTURED_EXIT_CODE=$?
|
||||
}
|
||||
|
||||
# Runs a command once and captures stderr and exit code.
|
||||
# Suppresses xtrace in the subshell. Discards stdout.
|
||||
#
|
||||
# Sets: CAPTURED_STDERR, CAPTURED_EXIT_CODE
|
||||
#
|
||||
# Usage:
|
||||
# try_err nvm_alias
|
||||
# [ "$CAPTURED_STDERR" = "An alias is required." ] || die "wrong error"
|
||||
# [ "$CAPTURED_EXIT_CODE" = 1 ] || die "wrong exit code"
|
||||
try_err() {
|
||||
CAPTURED_STDERR="$(set +x; "$@" 2>&1 >/dev/null)" && CAPTURED_EXIT_CODE=0 || CAPTURED_EXIT_CODE=$?
|
||||
}
|
||||
|
||||
assert_ok() {
|
||||
local FUNCTION=$1
|
||||
shift
|
||||
|
||||
@@ -3,21 +3,25 @@
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
try_err nvm alias foo#bar baz
|
||||
OUTPUT="$(nvm alias foo#bar baz 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||
[ "$CAPTURED_STDERR" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias with a hash should fail with '$EXPECTED_OUTPUT', got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" = "1" ] || die "trying to create an alias with a hash should fail with code 1, got '$CAPTURED_EXIT_CODE'"
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias with a hash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
try_err nvm alias foo# baz
|
||||
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||
[ "$CAPTURED_STDERR" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias ending with a hash should fail with '$EXPECTED_OUTPUT', got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" = "1" ] || die "trying to create an alias ending with a hash should fail with code 1, got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm alias foo#bar baz >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias with a hash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
try_err nvm alias \#bar baz
|
||||
OUTPUT="$(nvm alias foo# baz 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||
[ "$CAPTURED_STDERR" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias starting with a hash should fail with '$EXPECTED_OUTPUT', got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" = "1" ] || die "trying to create an alias starting with a hash should fail with code 1, got '$CAPTURED_EXIT_CODE'"
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias ending with a hash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm alias foo# baz >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias ending with a hash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
OUTPUT="$(nvm alias \#bar baz 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias starting with a hash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm alias \#bar baz >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias starting with a hash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
@@ -3,21 +3,25 @@
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
try_err nvm alias foo/bar baz
|
||||
OUTPUT="$(nvm alias foo/bar baz 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases in subdirectories are not supported."
|
||||
[ "$CAPTURED_STDERR" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias with a slash should fail with '$EXPECTED_OUTPUT', got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" = "1" ] || die "trying to create an alias with a slash should fail with code 1, got '$CAPTURED_EXIT_CODE'"
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
try_err nvm alias foo/ baz
|
||||
EXPECTED_OUTPUT="Aliases in subdirectories are not supported."
|
||||
[ "$CAPTURED_STDERR" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias ending with a slash should fail with '$EXPECTED_OUTPUT', got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" = "1" ] || die "trying to create an alias ending with a slash should fail with code 1, got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm alias foo/bar baz >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias with a slash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
try_err nvm alias /bar baz
|
||||
OUTPUT="$(nvm alias foo/ baz 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases in subdirectories are not supported."
|
||||
[ "$CAPTURED_STDERR" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias starting with a slash should fail with '$EXPECTED_OUTPUT', got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" = "1" ] || die "trying to create an alias starting with a slash should fail with code 1, got '$CAPTURED_EXIT_CODE'"
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias ending with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm alias foo/ baz >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias ending with a slash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
OUTPUT="$(nvm alias /bar baz 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases in subdirectories are not supported."
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias starting with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm alias /bar baz >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias starting with a slash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
@@ -3,21 +3,25 @@
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
try_err nvm unalias foo/bar
|
||||
OUTPUT="$(nvm unalias foo/bar 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases in subdirectories are not supported."
|
||||
[ "$CAPTURED_STDERR" = "$EXPECTED_OUTPUT" ] || die "trying to remove an alias with a slash should fail with '$EXPECTED_OUTPUT', got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" = "1" ] || die "trying to remove an alias with a slash should fail with code 1, got '$CAPTURED_EXIT_CODE'"
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to remove an alias with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
try_err nvm unalias foo/
|
||||
EXPECTED_OUTPUT="Aliases in subdirectories are not supported."
|
||||
[ "$CAPTURED_STDERR" = "$EXPECTED_OUTPUT" ] || die "trying to remove an alias ending with a slash should fail with '$EXPECTED_OUTPUT', got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" = "1" ] || die "trying to remove an alias ending with a slash should fail with code 1, got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm unalias foo/bar >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to remove an alias with a slash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
try_err nvm unalias /bar
|
||||
OUTPUT="$(nvm unalias foo/ 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases in subdirectories are not supported."
|
||||
[ "$CAPTURED_STDERR" = "$EXPECTED_OUTPUT" ] || die "trying to remove an alias starting with a slash should fail with '$EXPECTED_OUTPUT', got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" = "1" ] || die "trying to remove an alias starting with a slash should fail with code 1, got '$CAPTURED_EXIT_CODE'"
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to remove an alias ending with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm unalias foo/ >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to remove an alias ending with a slash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
OUTPUT="$(nvm unalias /bar 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases in subdirectories are not supported."
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to remove an alias starting with a slash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm unalias /bar >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to remove an alias starting with a slash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
@@ -15,11 +15,11 @@ fi
|
||||
nvm alias test-stable-1 0.0.2 || die '`nvm alias test-stable-1 0.0.2` failed'
|
||||
|
||||
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'"
|
||||
|
||||
nvm alias test-stable-1 0.0.1 || die '`nvm alias test-stable-1 0.0.1` failed'
|
||||
|
||||
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'"
|
||||
|
||||
@@ -10,18 +10,18 @@ NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors)
|
||||
|
||||
EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)"
|
||||
STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "stable -> $EXPECTED_STABLE (-> $STABLE_VERSION *) (default)" \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "stable -> $EXPECTED_STABLE (-> $STABLE_VERSION) (default)" \
|
||||
|| die "nvm alias did not contain the default local stable node version; got '$NVM_ALIAS_OUTPUT'"
|
||||
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "node -> stable (-> $STABLE_VERSION *) (default)" \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "node -> stable (-> $STABLE_VERSION) (default)" \
|
||||
|| die "nvm alias did not contain the default local stable node version under 'node'; got '$NVM_ALIAS_OUTPUT'"
|
||||
|
||||
EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)"
|
||||
UNSTABLE_VERSION="$(nvm_version "$EXPECTED_UNSTABLE")"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "unstable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION *) (default)" \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "unstable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION) (default)" \
|
||||
|| die "nvm alias did not contain the default local unstable node version; got '$NVM_ALIAS_OUTPUT'"
|
||||
|
||||
EXPECTED_IOJS="$(nvm_print_implicit_alias local iojs)"
|
||||
IOJS_VERSION="$(nvm_version "$EXPECTED_IOJS")"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "iojs -> $EXPECTED_IOJS (-> $IOJS_VERSION *) (default)" \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "iojs -> $EXPECTED_IOJS (-> $IOJS_VERSION) (default)" \
|
||||
|| die "nvm alias did not contain the default local iojs version; got '$NVM_ALIAS_OUTPUT'"
|
||||
|
||||
@@ -35,16 +35,16 @@ nvm alias iojs unstable
|
||||
|
||||
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'"
|
||||
|
||||
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'"
|
||||
|
||||
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'"
|
||||
|
||||
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'"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -7,43 +7,43 @@
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
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'"
|
||||
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)' \
|
||||
|| die "did not find test-stable-2 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-3 -> 0.0.3 (-> v0.0.3 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-3 -> 0.0.3 (-> v0.0.3)' \
|
||||
|| die "did not find test-stable-3 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-4 -> 0.0.4 (-> v0.0.4 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-4 -> 0.0.4 (-> v0.0.4)' \
|
||||
|| die "did not find test-stable-4 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-5 -> 0.0.5 (-> v0.0.5 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-5 -> 0.0.5 (-> v0.0.5)' \
|
||||
|| die "did not find test-stable-5 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-6 -> 0.0.6 (-> v0.0.6 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-6 -> 0.0.6 (-> v0.0.6)' \
|
||||
|| die "did not find test-stable-6 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-7 -> 0.0.7 (-> v0.0.7 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-7 -> 0.0.7 (-> v0.0.7)' \
|
||||
|| die "did not find test-stable-7 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-8 -> 0.0.8 (-> v0.0.8 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-8 -> 0.0.8 (-> v0.0.8)' \
|
||||
|| die "did not find test-stable-8 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-9 -> 0.0.9 (-> v0.0.9 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-9 -> 0.0.9 (-> v0.0.9)' \
|
||||
|| die "did not find test-stable-9 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-10 -> 0.0.10 (-> v0.0.10 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-10 -> 0.0.10 (-> v0.0.10)' \
|
||||
|| die "did not find test-stable-10 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-1 -> 0.1.1 (-> v0.1.1 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-1 -> 0.1.1 (-> v0.1.1)' \
|
||||
|| die "did not find test-unstable-1 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-2 -> 0.1.2 (-> v0.1.2 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-2 -> 0.1.2 (-> v0.1.2)' \
|
||||
|| die "did not find test-unstable-2 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-3 -> 0.1.3 (-> v0.1.3 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-3 -> 0.1.3 (-> v0.1.3)' \
|
||||
|| die "did not find test-unstable-3 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-4 -> 0.1.4 (-> v0.1.4 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-4 -> 0.1.4 (-> v0.1.4)' \
|
||||
|| die "did not find test-unstable-4 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-5 -> 0.1.5 (-> v0.1.5 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-5 -> 0.1.5 (-> v0.1.5)' \
|
||||
|| die "did not find test-unstable-5 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-6 -> 0.1.6 (-> v0.1.6 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-6 -> 0.1.6 (-> v0.1.6)' \
|
||||
|| die "did not find test-unstable-6 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-7 -> 0.1.7 (-> v0.1.7 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-7 -> 0.1.7 (-> v0.1.7)' \
|
||||
|| die "did not find test-unstable-7 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-8 -> 0.1.8 (-> v0.1.8 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-8 -> 0.1.8 (-> v0.1.8)' \
|
||||
|| die "did not find test-unstable-8 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-9 -> 0.1.9 (-> v0.1.9 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-9 -> 0.1.9 (-> v0.1.9)' \
|
||||
|| die "did not find test-unstable-9 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-10 -> 0.1.10 (-> v0.1.10 *)' \
|
||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-10 -> 0.1.10 (-> v0.1.10)' \
|
||||
|| die "did not find test-unstable-10 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
|
||||
@@ -14,7 +14,7 @@ nvm_ensure_default_set 0.3 || die "'nvm_ensure_default_set' with an existing def
|
||||
nvm unalias default || die "'nvm unalias default' failed"
|
||||
|
||||
OUTPUT="$(nvm_ensure_default_set 0.2)"
|
||||
EXPECTED_OUTPUT="Creating default alias: default -> 0.2 (-> iojs-v0.2.10 *)"
|
||||
EXPECTED_OUTPUT="Creating default alias: default -> 0.2 (-> iojs-v0.2.10)"
|
||||
EXIT_CODE="$?"
|
||||
|
||||
[ "_$(echo "$OUTPUT" | strip_colors)" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set 0.2' did not output '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
@@ -7,8 +7,6 @@ die () { echo "$@" ; exit 1; }
|
||||
|
||||
set -e
|
||||
|
||||
nvm_has_colors() { return 0; }
|
||||
|
||||
nvm_get_colors(){
|
||||
echo "0;95m"
|
||||
}
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
set -e
|
||||
|
||||
# Force nvm_has_colors to return true so nvm_list_aliases sets NVM_HAS_COLORS=1
|
||||
nvm_has_colors() { return 0; }
|
||||
|
||||
nvm_alias_path() {
|
||||
nvm_echo "../../../alias"
|
||||
}
|
||||
|
||||
# nvm_list_aliases pipes through `sort`, which makes [ -t 1 ] false.
|
||||
# Before the fix in 2eb8bbd0, colors were lost inside the pipeline.
|
||||
# With the fix, NVM_HAS_COLORS is evaluated before the pipe and propagated.
|
||||
OUTPUT=$(nvm_list_aliases test-stable-1)
|
||||
COLORED_ARROW="$(command printf %b '\033[0;90m->\033[0m')"
|
||||
|
||||
case "${OUTPUT}" in
|
||||
*"${COLORED_ARROW}"*) : ;; # pass - colored arrow survived the pipeline
|
||||
*) die "Expected colored arrow in nvm_list_aliases output through pipeline, got >${OUTPUT}<" ;;
|
||||
esac
|
||||
@@ -11,8 +11,6 @@ die () {
|
||||
|
||||
set -e
|
||||
|
||||
nvm_has_colors() { return 0; }
|
||||
|
||||
nvm_get_colors(){
|
||||
echo "0;95m"
|
||||
}
|
||||
|
||||
@@ -9,9 +9,6 @@ die () {
|
||||
}
|
||||
|
||||
set -e
|
||||
|
||||
nvm_has_colors() { return 0; }
|
||||
|
||||
# # # expecting in red and two grays:
|
||||
OUTPUT=$(echo $(nvm_print_formatted_alias fakealias fakedest) | awk '{ print substr($0, 1, 21); }')
|
||||
EXPECTED_OUTPUT="$(command printf %b "\033[0;31mfakealias\033[0m ")"
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
die () {
|
||||
echo "$@"
|
||||
exit 1
|
||||
}
|
||||
|
||||
set -e
|
||||
|
||||
# Override nvm_has_colors to always return false, simulating a pipeline context
|
||||
# where [ -t 1 ] is false (the bug condition from 2eb8bbd0)
|
||||
nvm_has_colors() { return 1; }
|
||||
|
||||
# Without NVM_HAS_COLORS, output should have no color codes (plain arrow)
|
||||
OUTPUT="$(nvm_print_formatted_alias fakealias fakedest)"
|
||||
case "${OUTPUT}" in
|
||||
*'\033['*) die "Expected no color codes without NVM_HAS_COLORS, got >${OUTPUT}<" ;;
|
||||
esac
|
||||
|
||||
# With NVM_HAS_COLORS=1, output should contain color codes even though
|
||||
# nvm_has_colors returns false (regression test for the pipeline fix)
|
||||
NVM_HAS_COLORS=1
|
||||
export NVM_HAS_COLORS
|
||||
OUTPUT="$(nvm_print_formatted_alias fakealias fakedest)"
|
||||
ARROW="$(command printf %b '\033[0;90m->\033[0m')"
|
||||
case "${OUTPUT}" in
|
||||
*"${ARROW}"*) : ;; # pass - colored arrow present
|
||||
*) die "Expected colored arrow with NVM_HAS_COLORS=1, got >${OUTPUT}<" ;;
|
||||
esac
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/sh
|
||||
\. ../../../common.sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../../nvm.sh
|
||||
|
||||
# An alias whose name contains % should resolve directly
|
||||
try nvm_resolve_alias 'test-%s-alias'
|
||||
[ "$CAPTURED_EXIT_CODE" = "0" ] || die "nvm_resolve_alias test-%s-alias failed with exit code $CAPTURED_EXIT_CODE"
|
||||
[ "$CAPTURED_STDOUT" = "v0.0.1" ] || die "nvm_resolve_alias test-%s-alias was not v0.0.1; got $CAPTURED_STDOUT"
|
||||
|
||||
# An alias chain that passes through a %-containing alias name should resolve
|
||||
try nvm_resolve_alias test-pct-chain
|
||||
[ "$CAPTURED_EXIT_CODE" = "0" ] || die "nvm_resolve_alias test-pct-chain failed with exit code $CAPTURED_EXIT_CODE"
|
||||
[ "$CAPTURED_STDOUT" = "v0.0.1" ] || die "nvm_resolve_alias test-pct-chain was not v0.0.1; got $CAPTURED_STDOUT"
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/sh
|
||||
\. ../../../common.sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../../nvm.sh
|
||||
|
||||
# An alias whose name contains % should resolve directly
|
||||
try nvm_resolve_local_alias 'test-%s-alias'
|
||||
[ "$CAPTURED_EXIT_CODE" = "0" ] || die "nvm_resolve_local_alias test-%s-alias failed with exit code $CAPTURED_EXIT_CODE"
|
||||
[ "$CAPTURED_STDOUT" = "v0.0.1" ] || die "nvm_resolve_local_alias test-%s-alias was not v0.0.1; got $CAPTURED_STDOUT"
|
||||
|
||||
# An alias chain that passes through a %-containing alias name should resolve
|
||||
try nvm_resolve_local_alias test-pct-chain
|
||||
[ "$CAPTURED_EXIT_CODE" = "0" ] || die "nvm_resolve_local_alias test-pct-chain failed with exit code $CAPTURED_EXIT_CODE"
|
||||
[ "$CAPTURED_STDOUT" = "v0.0.1" ] || die "nvm_resolve_local_alias test-pct-chain was not v0.0.1; got $CAPTURED_STDOUT"
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo v0.0.1 > ../../../../alias/test-%s-alias
|
||||
echo test-%s-alias > ../../../../alias/test-pct-chain
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -f ../../../../alias/test-%s-alias
|
||||
rm -f ../../../../alias/test-pct-chain
|
||||
@@ -1,36 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
cleanup() {
|
||||
rm -f "$(nvm_alias_path)/default"
|
||||
if [ -n "${SYSTEM_DIR-}" ]; then
|
||||
rm -rf "${SYSTEM_DIR}"
|
||||
fi
|
||||
if [ -n "${ORIG_PATH-}" ]; then
|
||||
PATH="${ORIG_PATH}"
|
||||
fi
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
nvm_make_alias default system
|
||||
|
||||
ORIG_PATH="${PATH}"
|
||||
SYSTEM_DIR="$(mktemp -d)"
|
||||
cat > "${SYSTEM_DIR}/node" <<'EOF'
|
||||
#!/bin/sh
|
||||
echo v0.0.0
|
||||
EOF
|
||||
chmod +x "${SYSTEM_DIR}/node"
|
||||
PATH="${SYSTEM_DIR}:${PATH}"
|
||||
export PATH
|
||||
|
||||
EXPECTED_OUTPUT="$(command which node)"
|
||||
set +ex # since stderr is needed
|
||||
OUTPUT="$(nvm which default 2>&1)"
|
||||
set -ex
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "Could not use system via alias for nvm which. Got >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
|
||||
|
||||
cleanup
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
cleanup () {
|
||||
rm -f "$(nvm_alias_path)/default"
|
||||
unset -f nvm_has_system_node node
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
nvm_make_alias default system
|
||||
nvm_has_system_node() { return 0; }
|
||||
node() { command printf 'v0.0.0'; }
|
||||
|
||||
OUTPUT="$(nvm ls default | strip_colors)"
|
||||
echo "${OUTPUT}" | command grep -q 'system' \
|
||||
|| die "Could not list system via alias. Got >${OUTPUT}<"
|
||||
echo "${OUTPUT}" | command grep -q 'v0.0.0' \
|
||||
|| die "Could not list system version via alias. Got >${OUTPUT}<"
|
||||
|
||||
cleanup
|
||||
@@ -39,13 +39,7 @@ iojs-v0.10.2
|
||||
v0.12.9
|
||||
v0.12.87"
|
||||
if nvm_has_system_node || nvm_has_system_iojs; then
|
||||
SYSTEM_VERSION="$(nvm deactivate >/dev/null 2>&1 && node -v 2>/dev/null)"
|
||||
if [ -n "${SYSTEM_VERSION}" ]; then
|
||||
EXPECTED_OUTPUT="${EXPECTED_OUTPUT}
|
||||
system ${SYSTEM_VERSION}"
|
||||
else
|
||||
EXPECTED_OUTPUT="${EXPECTED_OUTPUT}
|
||||
EXPECTED_OUTPUT="${EXPECTED_OUTPUT}
|
||||
system"
|
||||
fi
|
||||
fi
|
||||
[ "${OUTPUT-}" = "${EXPECTED_OUTPUT-}" ] || die "expected >${EXPECTED_OUTPUT}<; got >${OUTPUT}<"
|
||||
|
||||
@@ -37,13 +37,7 @@ iojs-v0.10.2
|
||||
v0.12.9
|
||||
v0.12.87"
|
||||
if nvm_has_system_node || nvm_has_system_iojs; then
|
||||
SYSTEM_VERSION="$(nvm deactivate >/dev/null 2>&1 && node -v 2>/dev/null)"
|
||||
if [ -n "${SYSTEM_VERSION}" ]; then
|
||||
EXPECTED_OUTPUT="${EXPECTED_OUTPUT}
|
||||
system ${SYSTEM_VERSION}"
|
||||
else
|
||||
EXPECTED_OUTPUT="${EXPECTED_OUTPUT}
|
||||
EXPECTED_OUTPUT="${EXPECTED_OUTPUT}
|
||||
system"
|
||||
fi
|
||||
fi
|
||||
[ "${OUTPUT-}" = "${EXPECTED_OUTPUT-}" ] || die "expected >${EXPECTED_OUTPUT}<; got >${OUTPUT}<"
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die() { echo "$@" >&2; exit 1; }
|
||||
|
||||
set -ex
|
||||
|
||||
: nvm.sh
|
||||
\. ../../nvm.sh
|
||||
\. ../common.sh
|
||||
|
||||
make_fake_node v0.0.1
|
||||
|
||||
nvm alias test_alias v0.0.1
|
||||
|
||||
# Verify alias was created
|
||||
[ -f "$(nvm_alias_path)/test_alias" ] || die "alias file should exist before uninstall"
|
||||
|
||||
nvm uninstall v0.0.1
|
||||
|
||||
# Verify the version directory was removed
|
||||
[ ! -d "$(nvm_version_path v0.0.1)" ] || die "version directory should be removed"
|
||||
|
||||
# Verify the alias was cleaned up
|
||||
[ ! -f "$(nvm_alias_path)/test_alias" ] || die "alias file should be removed after uninstalling the version it points to"
|
||||
@@ -1,18 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
\. ../../nvm.sh
|
||||
\. ../common.sh
|
||||
|
||||
VERSION='v0.0.1'
|
||||
PATTERN='0.0'
|
||||
|
||||
mkdir -p "${NVM_DIR}/${VERSION}"
|
||||
|
||||
set +ex # needed for stderr
|
||||
RETURN_MESSAGE="$(nvm uninstall "${PATTERN}" 2>&1 || echo)"
|
||||
set -ex
|
||||
EXPECTED_MESSAGE="Version '${VERSION}' (inferred from ${PATTERN}) is not installed."
|
||||
|
||||
[ "${RETURN_MESSAGE}" = "${EXPECTED_MESSAGE}" ]
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
\. ../../nvm.sh
|
||||
\. ../common.sh
|
||||
|
||||
set +ex # needed for stderr
|
||||
RETURN_MESSAGE="$(nvm uninstall 22 2>&1 || echo)"
|
||||
set -ex
|
||||
EXPECTED_MESSAGE="Version '22' is not installed."
|
||||
|
||||
[ "${RETURN_MESSAGE}" = "${EXPECTED_MESSAGE}" ]
|
||||
@@ -11,20 +11,30 @@ cleanup() {
|
||||
: nvm.sh
|
||||
\. ../../nvm.sh
|
||||
|
||||
\. ../common.sh
|
||||
|
||||
nvm_make_alias foo foo
|
||||
|
||||
try_err nvm use foo
|
||||
set +ex # needed for stderr
|
||||
OUTPUT="$(nvm use foo 2>&1)"
|
||||
set -ex
|
||||
EXPECTED_OUTPUT='The alias "foo" leads to an infinite loop. Aborting.'
|
||||
[ "_${CAPTURED_STDERR}" = "_${EXPECTED_OUTPUT}" ] \
|
||||
|| die "'nvm use foo' did not output >${EXPECTED_OUTPUT}<; got >${CAPTURED_STDERR}<"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_8" ] || die "Expected exit code 8; got ${CAPTURED_EXIT_CODE}"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] \
|
||||
|| die "'nvm use foo' did not output >${EXPECTED_OUTPUT}<; got >${OUTPUT}<"
|
||||
|
||||
try_err nvm use --silent foo
|
||||
set +ex # needed for stderr
|
||||
EXIT_CODE="$(nvm use foo 2>/dev/null ; echo $?)"
|
||||
set -ex
|
||||
[ "_$EXIT_CODE" = "_8" ] || die "Expected exit code 8; got ${EXIT_CODE}"
|
||||
|
||||
set +ex # needed for stderr
|
||||
OUTPUT="$(nvm use --silent foo 2>&1)"
|
||||
set -ex
|
||||
EXPECTED_OUTPUT=''
|
||||
[ "_${CAPTURED_STDERR}" = "_${EXPECTED_OUTPUT}" ] \
|
||||
|| die "'nvm use --silent foo' did not output >${EXPECTED_OUTPUT}<; got >${CAPTURED_STDERR}<"
|
||||
[ $CAPTURED_EXIT_CODE -eq 8 ] || die "Expected exit code 8 from 'nvm use --silent foo'; got ${CAPTURED_EXIT_CODE}"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] \
|
||||
|| die "'nvm use --silent foo' did not output >${EXPECTED_OUTPUT}<; got >${OUTPUT}<"
|
||||
|
||||
set +ex # needed for stderr
|
||||
EXIT_CODE="$(nvm use --silent foo 2>/dev/null ; echo $?)"
|
||||
set -ex
|
||||
[ $EXIT_CODE -eq 8 ] || die "Expected exit code 8 from 'nvm use --silent foo'; got ${EXIT_CODE}"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -14,17 +14,20 @@ cleanup() {
|
||||
|
||||
# normal .nvmrc
|
||||
printf '0.999.0\n' > .nvmrc
|
||||
{ VERSION1="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1
|
||||
nvm_rc_version
|
||||
VERSION1="${NVM_RC_VERSION}"
|
||||
|
||||
# .nvmrc with CR char
|
||||
printf '0.999.0\r\n' > .nvmrc
|
||||
{ VERSION2="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1
|
||||
nvm_rc_version
|
||||
VERSION2="${NVM_RC_VERSION}"
|
||||
|
||||
[ "${VERSION1}" = "${VERSION2}" ]
|
||||
|
||||
# .nvmrc without any newline char
|
||||
printf '0.999.0' > .nvmrc
|
||||
{ VERSION3="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1
|
||||
nvm_rc_version
|
||||
VERSION3="${NVM_RC_VERSION}"
|
||||
|
||||
[ "${VERSION1}" = "${VERSION3}" ]
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
cleanup () {
|
||||
rm -f "$(nvm_alias_path)/default"
|
||||
if [ -n "${SYSTEM_DIR-}" ]; then
|
||||
rm -rf "${SYSTEM_DIR}"
|
||||
fi
|
||||
if [ -n "${ORIG_PATH-}" ]; then
|
||||
PATH="${ORIG_PATH}"
|
||||
fi
|
||||
unset -f nvm_print_npm_version
|
||||
}
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
nvm_make_alias default system
|
||||
|
||||
ORIG_PATH="${PATH}"
|
||||
SYSTEM_VERSION="v0.0.0"
|
||||
SYSTEM_DIR="$(mktemp -d)"
|
||||
cat > "${SYSTEM_DIR}/node" <<EOF
|
||||
#!/bin/sh
|
||||
command printf '%s\n' "${SYSTEM_VERSION}"
|
||||
EOF
|
||||
chmod +x "${SYSTEM_DIR}/node"
|
||||
PATH="${SYSTEM_DIR}:${PATH}"
|
||||
nvm_print_npm_version() { command printf ' (npm v1.2.3)'; }
|
||||
|
||||
EXPECTED_OUTPUT="Now using system version of node: ${SYSTEM_VERSION}$(nvm_print_npm_version)"
|
||||
set +ex # since stderr is needed
|
||||
OUTPUT="$(nvm use default 2>&1)"
|
||||
set -ex
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "Could not use system via alias. Got >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
|
||||
|
||||
cleanup
|
||||
@@ -1,43 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
cleanup () {
|
||||
rm -f .nvmrc
|
||||
if [ -f .nvmrc.orig ]; then
|
||||
mv .nvmrc.orig .nvmrc
|
||||
fi
|
||||
if [ -n "${SYSTEM_DIR-}" ]; then
|
||||
rm -rf "${SYSTEM_DIR}"
|
||||
fi
|
||||
if [ -n "${ORIG_PATH-}" ]; then
|
||||
PATH="${ORIG_PATH}"
|
||||
fi
|
||||
unset -f nvm_print_npm_version
|
||||
}
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
printf 'system\n' > .nvmrc
|
||||
ORIG_PATH="${PATH}"
|
||||
SYSTEM_VERSION="v0.0.0"
|
||||
SYSTEM_DIR="$(mktemp -d)"
|
||||
cat > "${SYSTEM_DIR}/node" <<EOF
|
||||
#!/bin/sh
|
||||
command printf '%s\n' "${SYSTEM_VERSION}"
|
||||
EOF
|
||||
chmod +x "${SYSTEM_DIR}/node"
|
||||
PATH="${SYSTEM_DIR}:${PATH}"
|
||||
nvm_print_npm_version() { command printf ' (npm v1.2.3)'; }
|
||||
|
||||
NVMRC_PATH="${PWD}/.nvmrc"
|
||||
EXPECTED_OUTPUT="Found '${NVMRC_PATH}' with version <system>
|
||||
Now using system version of node: ${SYSTEM_VERSION}$(nvm_print_npm_version)"
|
||||
set +ex # since stderr is needed
|
||||
OUTPUT="$(nvm use 2>&1)"
|
||||
set -ex
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "Could not use system via .nvmrc. Got >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
|
||||
|
||||
cleanup
|
||||
@@ -1,24 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
rm -rf "$(nvm_alias_path)/circular_test"
|
||||
}
|
||||
|
||||
: nvm.sh
|
||||
\. ../../nvm.sh
|
||||
|
||||
\. ../common.sh
|
||||
|
||||
nvm_make_alias circular_test circular_test
|
||||
|
||||
try_err nvm which circular_test
|
||||
EXPECTED_OUTPUT='The alias "circular_test" leads to an infinite loop. Aborting.'
|
||||
[ "_${CAPTURED_STDERR}" = "_${EXPECTED_OUTPUT}" ] \
|
||||
|| die "'nvm which circular_test' did not output >${EXPECTED_OUTPUT}<; got >${CAPTURED_STDERR}<"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_8" ] || die "Expected exit code 8; got ${CAPTURED_EXIT_CODE}"
|
||||
|
||||
cleanup
|
||||
@@ -5,6 +5,7 @@ set -x
|
||||
\. ../../nvm.sh
|
||||
|
||||
cleanup() { rm -f .nvmrc; }
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
NVM_TEST_VERSION=v0.42
|
||||
@@ -13,8 +14,7 @@ NVM_TEST_VERSION=v0.42
|
||||
echo "$NVM_TEST_VERSION" > .nvmrc
|
||||
|
||||
OUTPUT="$(../../nvm-exec 2>&1)";
|
||||
EXPECTED="Found '$(pwd)/.nvmrc' with version <${NVM_TEST_VERSION}>
|
||||
N/A: version \"${NVM_TEST_VERSION}\" is not yet installed.
|
||||
EXPECTED="N/A: version \"${NVM_TEST_VERSION}\" is not yet installed.
|
||||
|
||||
You need to run \`nvm install ${NVM_TEST_VERSION}\` to install and use it.
|
||||
No NODE_VERSION provided; no .nvmrc file found";
|
||||
|
||||
@@ -11,8 +11,6 @@ die () {
|
||||
|
||||
set -e
|
||||
|
||||
nvm_has_colors() { return 0; }
|
||||
|
||||
nvm_get_colors(){
|
||||
echo "0;95m"
|
||||
}
|
||||
|
||||
@@ -22,8 +22,6 @@ if [ -n ${NVM_COLORS} ]; then
|
||||
unset NVM_COLORS
|
||||
fi
|
||||
|
||||
nvm_has_colors() { return 0; }
|
||||
|
||||
# default system color
|
||||
nvm use system
|
||||
OUTPUT=$(nvm_print_versions system)
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
# Mock nvm_download to ensure no network access
|
||||
nvm_download() {
|
||||
die "nvm_download should not be called in offline mode"
|
||||
}
|
||||
|
||||
# --offline with an already-installed version should succeed
|
||||
INSTALLED_VERSION="$(nvm ls | command tail -1 | command awk '{print $1}' | command sed 's/\x1b\[[0-9;]*m//g')"
|
||||
if [ -n "${INSTALLED_VERSION}" ] && [ "_${INSTALLED_VERSION}" != '_N/A' ] && [ "_${INSTALLED_VERSION}" != '_system' ]; then
|
||||
try nvm install --offline "${INSTALLED_VERSION}"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] \
|
||||
|| die "nvm install --offline with installed version '${INSTALLED_VERSION}' should succeed, got exit code $CAPTURED_EXIT_CODE"
|
||||
fi
|
||||
|
||||
# --offline with a nonexistent version should fail
|
||||
try_err nvm install --offline 999.999.999
|
||||
[ "_$CAPTURED_EXIT_CODE" != "_0" ] \
|
||||
|| die "nvm install --offline with nonexistent version should fail"
|
||||
|
||||
EXPECTED_ERR="not found locally or in cache"
|
||||
nvm_echo "$CAPTURED_STDERR" | nvm_grep -q "${EXPECTED_ERR}" \
|
||||
|| die "nvm install --offline error should mention 'not found locally or in cache'; got '$CAPTURED_STDERR'"
|
||||
|
||||
# --offline should not require curl or wget
|
||||
nvm_has() { return 1; }
|
||||
try_err nvm install --offline 999.999.999
|
||||
# Should fail with "not found" not "nvm needs curl or wget"
|
||||
nvm_echo "$CAPTURED_STDERR" | nvm_grep -q "curl or wget" \
|
||||
&& die "nvm install --offline should not require curl or wget"
|
||||
alias nvm_has='\nvm_has'
|
||||
unset -f nvm_has
|
||||
@@ -1,18 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
EXPECTED_ERR='-s and -b cannot be set together since they would skip install from both binary and source'
|
||||
|
||||
try_err nvm install -s -b 0.10.0
|
||||
[ "${CAPTURED_EXIT_CODE}" = "6" ] || die "Expected exit code 6 for -s -b, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_ERR}" ] || die "Expected >${EXPECTED_ERR}<, got >${CAPTURED_STDERR}<"
|
||||
|
||||
try_err nvm install -b -s 0.10.0
|
||||
[ "${CAPTURED_EXIT_CODE}" = "6" ] || die "Expected exit code 6 for -b -s, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_ERR}" ] || die "Expected >${EXPECTED_ERR}<, got >${CAPTURED_STDERR}<"
|
||||
@@ -33,8 +33,6 @@ printf '%s\n' "$(cat "${LTS_NAMES_PATH}" | tail -n +1)" | while IFS= read -r LTS
|
||||
cp "${NVM_DIR}/alias/lts-backup/${LTS}" "${NVM_DIR}/alias/lts/"
|
||||
done
|
||||
|
||||
nvm_has_colors() { return 0; }
|
||||
|
||||
nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
||||
|
||||
\. ../../common.sh
|
||||
@@ -69,14 +67,12 @@ printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
|
||||
INDEX=$(($INDEX + 1))
|
||||
done
|
||||
|
||||
nvm_has_colors() { return 1; }
|
||||
OUTPUT="$(nvm ls-remote lts/ARGON 2>&1)"
|
||||
EXIT_CODE=$?
|
||||
nvm_has_colors() { return 0; }
|
||||
[ $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 *"
|
||||
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"
|
||||
|
||||
@@ -9,19 +9,21 @@ cleanup () {
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
try_err nvm_alias
|
||||
OUTPUT="$(nvm_alias 2>&1)"
|
||||
EXPECTED_OUTPUT='An alias is required.'
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_alias' produced wrong output; got $CAPTURED_STDERR"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_1" ] || die "'nvm_alias' exited with $CAPTURED_EXIT_CODE, expected 1"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_alias' produced wrong output; got $OUTPUT"
|
||||
|
||||
EXIT_CODE="$(nvm_alias >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "'nvm_alias' exited with $EXIT_CODE, expected 1"
|
||||
|
||||
rm -rf ../../../alias/nonexistent
|
||||
|
||||
try_err nvm_alias nonexistent
|
||||
OUTPUT="$(nvm_alias nonexistent 2>&1)"
|
||||
EXPECTED_OUTPUT='Alias does not exist.'
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_alias nonexistent' produced wrong output; got $CAPTURED_STDERR"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_2" ] || die "'nvm_alias nonexistent' exited with $CAPTURED_EXIT_CODE, expected 2"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_alias nonexistent' produced wrong output; got $OUTPUT"
|
||||
|
||||
EXIT_CODE="$(nvm_alias nonexistent >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$EXIT_CODE" = "_2" ] || die "'nvm_alias nonexistent' exited with $EXIT_CODE, expected 2"
|
||||
|
||||
EXPECTED_OUTPUT="0.10"
|
||||
nvm alias test "$EXPECTED_OUTPUT" || die "'nvm alias test $EXPECTED_OUTPUT' failed"
|
||||
|
||||
@@ -8,50 +8,66 @@ die () { echo "$@" ; cleanup ; exit 1; }
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
set -ex
|
||||
|
||||
nvm_compute_checksum() {
|
||||
echo
|
||||
}
|
||||
|
||||
try_err nvm_compare_checksum
|
||||
set +x
|
||||
OUTPUT="$(nvm_compare_checksum 2>&1 >/dev/null || echo)"
|
||||
EXIT_CODE="$(nvm_compare_checksum >/dev/null 2>&1 || echo $?)"
|
||||
set -x
|
||||
EXPECTED_OUTPUT='Provided file to checksum is empty.'
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${CAPTURED_STDERR}<"
|
||||
[ "${CAPTURED_EXIT_CODE}" = 4 ] || die "expected to exit with code 4, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${EXIT_CODE}" = 4 ] || die "expected to exit with code 4, got ${EXIT_CODE}"
|
||||
|
||||
try_err nvm_compare_checksum foo
|
||||
set +x
|
||||
OUTPUT="$(nvm_compare_checksum foo 2>&1 >/dev/null || echo)"
|
||||
EXIT_CODE="$(nvm_compare_checksum foo >/dev/null 2>&1 || echo $?)"
|
||||
set -x
|
||||
EXPECTED_OUTPUT='Provided file to checksum does not exist.'
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${CAPTURED_STDERR}<"
|
||||
[ "${CAPTURED_EXIT_CODE}" = 3 ] || die "expected to exit with code 3, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${EXIT_CODE}" = 3 ] || die "expected to exit with code 3, got ${EXIT_CODE}"
|
||||
|
||||
try_err nvm_compare_checksum ../../../nvm.sh
|
||||
set +x
|
||||
OUTPUT="$(nvm_compare_checksum ../../../nvm.sh 2>&1 >/dev/null || echo)"
|
||||
EXIT_CODE="$(nvm_compare_checksum ../../../nvm.sh >/dev/null 2>&1 || echo $?)"
|
||||
set -x
|
||||
EXPECTED_OUTPUT='Provided checksum to compare to is empty.'
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${CAPTURED_STDERR}<"
|
||||
[ "${CAPTURED_EXIT_CODE}" = 2 ] || die "expected to exit with code 2, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${EXIT_CODE}" = 2 ] || die "expected to exit with code 2, got ${EXIT_CODE}"
|
||||
|
||||
try_err nvm_compare_checksum ../../../nvm.sh checksum
|
||||
set +x
|
||||
OUTPUT="$(nvm_compare_checksum ../../../nvm.sh checksum 2>&1 >/dev/null)"
|
||||
EXIT_CODE="$(nvm_compare_checksum ../../../nvm.sh checksum >/dev/null 2>&1 ; echo $?)"
|
||||
set -x
|
||||
EXPECTED_OUTPUT="Computed checksum of '../../../nvm.sh' is empty.
|
||||
WARNING: Continuing *without checksum verification*"
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${CAPTURED_STDERR}<"
|
||||
[ "${CAPTURED_EXIT_CODE}" = 0 ] || die "expected to exit with code 0, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${EXIT_CODE}" = 0 ] || die "expected to exit with code 0, got ${EXIT_CODE}"
|
||||
|
||||
nvm_compute_checksum() {
|
||||
echo "not checksum: ${1}"
|
||||
}
|
||||
|
||||
try_err nvm_compare_checksum ../../../nvm.sh checksum
|
||||
set +x
|
||||
OUTPUT="$(nvm_compare_checksum ../../../nvm.sh checksum 2>&1 >/dev/null || echo)"
|
||||
EXIT_CODE="$(nvm_compare_checksum ../../../nvm.sh checksum >/dev/null 2>&1 || echo $?)"
|
||||
set -x
|
||||
EXPECTED_OUTPUT="Checksums do not match: 'not checksum: ../../../nvm.sh' found, 'checksum' expected."
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${CAPTURED_STDERR}<"
|
||||
[ "${CAPTURED_EXIT_CODE}" = 1 ] || die "expected to exit with code 1, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${EXIT_CODE}" = 1 ] || die "expected to exit with code 1, got ${EXIT_CODE}"
|
||||
|
||||
nvm_compute_checksum() {
|
||||
echo checksum
|
||||
}
|
||||
try_err nvm_compare_checksum ../../../nvm.sh checksum
|
||||
set +x
|
||||
OUTPUT="$(nvm_compare_checksum ../../../nvm.sh checksum 2>&1 >/dev/null)"
|
||||
EXIT_CODE="$(nvm_compare_checksum ../../../nvm.sh checksum >/dev/null 2>&1; echo $?)"
|
||||
set -x
|
||||
EXPECTED_OUTPUT='Checksums matched!'
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${CAPTURED_STDERR}<"
|
||||
[ "${CAPTURED_EXIT_CODE}" = 0 ] || die "expected to exit with code 0, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${EXIT_CODE}" = 0 ] || die "expected to exit with code 0, got ${EXIT_CODE}"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -7,14 +7,18 @@ die () { echo "$@" ; exit 1; }
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
try_err nvm_compute_checksum
|
||||
set +x
|
||||
OUTPUT="$(nvm_compute_checksum 2>&1 >/dev/null || echo)"
|
||||
EXIT_CODE="$(nvm_compute_checksum >/dev/null 2>&1 || echo $?)"
|
||||
set -x
|
||||
EXPECTED_OUTPUT='Provided file to checksum is empty.'
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${CAPTURED_STDERR}<"
|
||||
[ "${CAPTURED_EXIT_CODE}" = 2 ] || die "expected to exit with code 2, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${EXIT_CODE}" = 2 ] || die "expected to exit with code 2, got ${EXIT_CODE}"
|
||||
|
||||
try_err nvm_compute_checksum foo
|
||||
set +x
|
||||
OUTPUT="$(nvm_compute_checksum foo 2>&1 >/dev/null || echo)"
|
||||
EXIT_CODE="$(nvm_compute_checksum foo >/dev/null 2>&1 || echo $?)"
|
||||
set -x
|
||||
EXPECTED_OUTPUT='Provided file to checksum does not exist.'
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${CAPTURED_STDERR}<"
|
||||
[ "${CAPTURED_EXIT_CODE}" = 1 ] || die "expected to exit with code 1, got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${EXIT_CODE}" = 1 ] || die "expected to exit with code 1, got ${EXIT_CODE}"
|
||||
|
||||
@@ -6,8 +6,6 @@ TEST_DIR="$TEST_PWD/nvm_die_on_prefix_tmp"
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
TEST_VERSION_DIR="${TEST_DIR}/version"
|
||||
|
||||
cleanup () {
|
||||
@@ -25,20 +23,23 @@ die () {
|
||||
|
||||
[ ! -e "$TEST_DIR" ] && mkdir "$TEST_DIR"
|
||||
|
||||
try_err nvm_die_on_prefix
|
||||
OUTPUT="$(nvm_die_on_prefix 2>&1)"
|
||||
EXPECTED_OUTPUT="First argument \"delete the prefix\" must be zero or one"
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix' did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_1" ] || die "'nvm_die_on_prefix' did not exit with 1; got "$CAPTURED_EXIT_CODE""
|
||||
EXIT_CODE="$(nvm_die_on_prefix >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "'nvm_die_on_prefix' did not exit with 1; got "$EXIT_CODE""
|
||||
|
||||
try_err nvm_die_on_prefix 2
|
||||
OUTPUT="$(nvm_die_on_prefix 2 2>&1)"
|
||||
EXPECTED_OUTPUT="First argument \"delete the prefix\" must be zero or one"
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 2' did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_1" ] || die "'nvm_die_on_prefix' did not exit with 1; got "$CAPTURED_EXIT_CODE""
|
||||
EXIT_CODE="$(nvm_die_on_prefix 2 >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 2' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "'nvm_die_on_prefix' did not exit with 1; got "$EXIT_CODE""
|
||||
|
||||
try_err nvm_die_on_prefix 0
|
||||
OUTPUT="$(nvm_die_on_prefix 0 2>&1)"
|
||||
EXPECTED_OUTPUT='Second argument "nvm command", and third argument "nvm version dir", must both be nonempty'
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0' did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_2" ] || die "'nvm_die_on_prefix 0' did not exit with 2; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_2" ] || die "'nvm_die_on_prefix 0' did not exit with 2; got '$EXIT_CODE'"
|
||||
|
||||
nvm_has() { return 1; } # ie, npm is not installed
|
||||
OUTPUT="$(nvm_die_on_prefix 0 version_dir foo 2>&1)"
|
||||
@@ -69,26 +70,26 @@ node() {
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" 2>&1)"
|
||||
[ -z "$OUTPUT" ] || die "'nvm_die_on_prefix' was not a noop when directory is equivalent; got '$OUTPUT'"
|
||||
|
||||
PREFIX=bar try_err nvm_die_on_prefix 0 foo "$(nvm_version_dir new)"
|
||||
unset PREFIX
|
||||
OUTPUT="$(PREFIX=bar nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" 2>&1)"
|
||||
EXPECTED_OUTPUT='nvm is not compatible with the "PREFIX" environment variable: currently set to "bar"
|
||||
Run `unset PREFIX` to unset it.'
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'PREFIX=bar nvm_die_on_prefix 0 foo' did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "'PREFIX=bar nvm_die_on_prefix 0 foo' did not exit with 3; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(export PREFIX=bar ; nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'PREFIX=bar nvm_die_on_prefix 0 foo' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "'PREFIX=bar nvm_die_on_prefix 0 foo' did not exit with 3; got '$EXIT_CODE'"
|
||||
|
||||
NPM_CONFIG_PREFIX=bar try_err nvm_die_on_prefix 0 foo "$(nvm_version_dir new)"
|
||||
unset NPM_CONFIG_PREFIX
|
||||
OUTPUT="$(export NPM_CONFIG_PREFIX=bar ; nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" 2>&1)"
|
||||
EXPECTED_OUTPUT='nvm is not compatible with the "NPM_CONFIG_PREFIX" environment variable: currently set to "bar"
|
||||
Run `unset NPM_CONFIG_PREFIX` to unset it.'
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'NPM_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_4" ] || die "'NPM_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not exit with 4; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(export NPM_CONFIG_PREFIX=bar ; nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'NPM_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_4" ] || die "'NPM_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not exit with 4; got '$EXIT_CODE'"
|
||||
|
||||
npm_CONFIG_PREFIX=bar try_err nvm_die_on_prefix 0 foo "$(nvm_version_dir new)"
|
||||
unset npm_CONFIG_PREFIX
|
||||
OUTPUT="$(export npm_CONFIG_PREFIX=bar ; nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" 2>&1)"
|
||||
EXPECTED_OUTPUT='nvm is not compatible with the "npm_CONFIG_PREFIX" environment variable: currently set to "bar"
|
||||
Run `unset npm_CONFIG_PREFIX` to unset it.'
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'npm_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_4" ] || die "'npm_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not exit with 4; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(export npm_CONFIG_PREFIX=bar ; nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'npm_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_4" ] || die "'npm_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not exit with 4; got '$EXIT_CODE'"
|
||||
|
||||
OUTPUT="$(export FOO='This contains NPM_CONFIG_PREFIX' ; nvm_die_on_prefix 0 foo "$(nvm_version_dir new)" 2>&1)"
|
||||
[ -z "$OUTPUT" ] || die "'nvm_die_on_prefix' was not a noop; got '$OUTPUT'"
|
||||
@@ -100,21 +101,23 @@ OUTPUT="$(export FOO='This contains NPM_CONFIG_PREFIX' ; nvm_die_on_prefix 0 foo
|
||||
|
||||
# project: prefix
|
||||
echo 'prefix=garbage' > .npmrc
|
||||
try_err nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}"
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" 2>&1)"
|
||||
EXPECTED_OUTPUT="Your project npmrc file ($(nvm_sanitize_path "${TEST_DIR}")/.npmrc)
|
||||
has a \`globalconfig\` and/or a \`prefix\` setting, which are incompatible with nvm.
|
||||
Run \`foo\` to unset it."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with project .npmrc that has prefix did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with project .npmrc that has prefix did not exit with 10; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with project .npmrc that has prefix did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with project .npmrc that has prefix did not exit with 10; got '$EXIT_CODE'"
|
||||
|
||||
# project: globalconfig
|
||||
echo 'globalconfig=garbage' > .npmrc
|
||||
try_err nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}"
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" 2>&1)"
|
||||
EXPECTED_OUTPUT="Your project npmrc file ($(nvm_sanitize_path "${TEST_DIR}")/.npmrc)
|
||||
has a \`globalconfig\` and/or a \`prefix\` setting, which are incompatible with nvm.
|
||||
Run \`foo\` to unset it."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with project .npmrc that has globalconfig did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with project .npmrc that has globalconfig did not exit with 10; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with project .npmrc that has globalconfig did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with project .npmrc that has globalconfig did not exit with 10; got '$EXIT_CODE'"
|
||||
|
||||
rm "${TEST_DIR}/.npmrc" || die '.npmrc could not be removed'
|
||||
|
||||
@@ -130,61 +133,67 @@ Run \`foo\` to unset it."
|
||||
|
||||
# global: prefix
|
||||
echo 'prefix=garbage' > "${GLOBAL_NPMRC}"
|
||||
try_err nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}"
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" 2>&1)"
|
||||
EXPECTED_OUTPUT="Your global npmrc file ($(nvm_sanitize_path "${GLOBAL_NPMRC}"))
|
||||
has a \`globalconfig\` and/or a \`prefix\` setting, which are incompatible with nvm.
|
||||
Run \`foo\` to unset it."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with global npmrc that has prefix did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with global npmrc that has prefix did not exit with 10; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with global npmrc that has prefix did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with global npmrc that has prefix did not exit with 10; got '$EXIT_CODE'"
|
||||
|
||||
# global: globalconfig
|
||||
echo 'globalconfig=garbage' > "${GLOBAL_NPMRC}"
|
||||
try_err nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}"
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" 2>&1)"
|
||||
EXPECTED_OUTPUT="Your global npmrc file ($(nvm_sanitize_path "${GLOBAL_NPMRC}"))
|
||||
has a \`globalconfig\` and/or a \`prefix\` setting, which are incompatible with nvm.
|
||||
Run \`foo\` to unset it."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with global npmrc that has globalconfig did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with global npmrc that has globalconfig did not exit with 10; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with global npmrc that has globalconfig did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with global npmrc that has globalconfig did not exit with 10; got '$EXIT_CODE'"
|
||||
|
||||
rm "${GLOBAL_NPMRC}" || die "${GLOBAL_NPMRC} could not be removed"
|
||||
|
||||
# builtin: prefix
|
||||
echo 'prefix=garbage' > "${BUILTIN_NPMRC}"
|
||||
try_err nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}"
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" 2>&1)"
|
||||
EXPECTED_OUTPUT="Your builtin npmrc file ($(nvm_sanitize_path "${BUILTIN_NPMRC}"))
|
||||
has a \`globalconfig\` and/or a \`prefix\` setting, which are incompatible with nvm.
|
||||
Run \`foo\` to unset it."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with builtin npmrc that has prefix did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with builtin npmrc that has prefix did not exit with 10; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with builtin npmrc that has prefix did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with builtin npmrc that has prefix did not exit with 10; got '$EXIT_CODE'"
|
||||
|
||||
# builtin: globalconfig
|
||||
echo 'globalconfig=garbage' > "${BUILTIN_NPMRC}"
|
||||
try_err nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}"
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" 2>&1)"
|
||||
EXPECTED_OUTPUT="Your builtin npmrc file ($(nvm_sanitize_path "${BUILTIN_NPMRC}"))
|
||||
has a \`globalconfig\` and/or a \`prefix\` setting, which are incompatible with nvm.
|
||||
Run \`foo\` to unset it."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with builtin npmrc that has globalconfig did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with builtin npmrc that has globalconfig did not exit with 10; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with builtin npmrc that has globalconfig did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with builtin npmrc that has globalconfig did not exit with 10; got '$EXIT_CODE'"
|
||||
|
||||
rm "${BUILTIN_NPMRC}" || die "${BUILTIN_NPMRC} could not be removed"
|
||||
|
||||
# user: prefix
|
||||
echo 'prefix=garbage' > "${USER_NPMRC}"
|
||||
try_err nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}"
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" 2>&1)"
|
||||
EXPECTED_OUTPUT="Your user’s .npmrc file ($(nvm_sanitize_path "${USER_NPMRC}"))
|
||||
has a \`globalconfig\` and/or a \`prefix\` setting, which are incompatible with nvm.
|
||||
Run \`foo\` to unset it."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with user .npmrc that has prefix did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with user .npmrc that has prefix did not exit with 10; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with user .npmrc that has prefix did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with user .npmrc that has prefix did not exit with 10; got '$EXIT_CODE'"
|
||||
|
||||
# user: globalconfig
|
||||
echo 'globalconfig=garbage' > "${USER_NPMRC}"
|
||||
try_err nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}"
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" 2>&1)"
|
||||
EXPECTED_OUTPUT="Your user’s .npmrc file ($(nvm_sanitize_path "${USER_NPMRC}"))
|
||||
has a \`globalconfig\` and/or a \`prefix\` setting, which are incompatible with nvm.
|
||||
Run \`foo\` to unset it."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with user .npmrc that has globalconfig did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with user .npmrc that has globalconfig did not exit with 10; got '$CAPTURED_EXIT_CODE'"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 foo "${TEST_VERSION_DIR}" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' with user .npmrc that has globalconfig did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' with user .npmrc that has globalconfig did not exit with 10; got '$EXIT_CODE'"
|
||||
)
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
# Test that mkdir failure propagates from brace group (not subshell)
|
||||
nvm_download_artifact_mkdir_test() {
|
||||
local tmpdir
|
||||
tmpdir="/nonexistent/path/that/cannot/exist"
|
||||
command mkdir -p "${tmpdir}/files" || {
|
||||
return 3
|
||||
}
|
||||
}
|
||||
nvm_download_artifact_mkdir_test 2>/dev/null
|
||||
EXIT_CODE=$?
|
||||
[ "${EXIT_CODE}" = "3" ] || die "Expected mkdir failure to propagate with exit code 3, got ${EXIT_CODE}"
|
||||
|
||||
# Test that download failure propagates with exit code 4
|
||||
nvm_get_mirror() { echo "http://example.com"; }
|
||||
nvm_binary_available() { return 0; }
|
||||
nvm_get_download_slug() { echo "node-v20.0.0-linux-x64"; }
|
||||
nvm_get_artifact_compression() { echo "tar.gz"; }
|
||||
nvm_cache_dir() { echo "${TMPDIR:-/tmp}/nvm_test_cache_$$"; }
|
||||
nvm_get_checksum() { echo "fake_checksum"; }
|
||||
nvm_version_greater_than_or_equal_to() { return 0; }
|
||||
nvm_download() { return 1; }
|
||||
nvm_grep() { return 1; }
|
||||
|
||||
nvm_download_artifact node binary std v20.0.0 2>/dev/null
|
||||
EXIT_CODE=$?
|
||||
[ "${EXIT_CODE}" = "4" ] || die "Expected download failure to propagate with exit code 4, got ${EXIT_CODE}"
|
||||
|
||||
# clean up any dirs created by the download failure test
|
||||
command rm -rf "$(nvm_cache_dir)"
|
||||
|
||||
# Test that checksum failure propagates with exit code 6
|
||||
nvm_download() {
|
||||
while [ "$#" -gt 0 ]; do
|
||||
if [ "$1" = "-o" ]; then command touch "$2"; return 0; fi
|
||||
shift
|
||||
done
|
||||
return 0
|
||||
}
|
||||
nvm_compare_checksum() { return 1; }
|
||||
|
||||
nvm_download_artifact node binary std v20.0.0 2>/dev/null
|
||||
EXIT_CODE=$?
|
||||
[ "${EXIT_CODE}" = "6" ] || die "Expected checksum failure to propagate with exit code 6, got ${EXIT_CODE}"
|
||||
|
||||
# clean up
|
||||
command rm -rf "$(nvm_cache_dir)"
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
ORIG_PATH="${PATH}"
|
||||
|
||||
cleanup() {
|
||||
rm -f ./uname
|
||||
export PATH="${ORIG_PATH}"
|
||||
}
|
||||
|
||||
die () { cleanup; echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
MOCKS_DIR="$(pwd)/../../mocks"
|
||||
export PATH=".:${PATH}"
|
||||
|
||||
# On Alpine (where /etc/alpine-release exists), x64 should get -musl suffix
|
||||
# and arm64 should NOT get -musl suffix.
|
||||
# On non-Alpine, neither should get -musl.
|
||||
|
||||
if [ -f "/etc/alpine-release" ]; then
|
||||
# x64 on Alpine should produce x64-musl
|
||||
ln -sf "${MOCKS_DIR}/uname_linux_x86_64" ./uname
|
||||
OUTPUT="$(nvm_get_arch)"
|
||||
rm -f ./uname
|
||||
[ "_${OUTPUT}" = "_x64-musl" ] || die "x64 on Alpine should be x64-musl, got ${OUTPUT}"
|
||||
|
||||
# aarch64 on Alpine should produce arm64, NOT arm64-musl
|
||||
ln -sf "${MOCKS_DIR}/uname_linux_aarch64" ./uname
|
||||
OUTPUT="$(nvm_get_arch)"
|
||||
rm -f ./uname
|
||||
[ "_${OUTPUT}" = "_arm64" ] || die "aarch64 on Alpine should be arm64 (no musl suffix), got ${OUTPUT}"
|
||||
else
|
||||
# x64 on non-Alpine should produce x64 (no musl suffix)
|
||||
ln -sf "${MOCKS_DIR}/uname_linux_x86_64" ./uname
|
||||
OUTPUT="$(nvm_get_arch)"
|
||||
rm -f ./uname
|
||||
[ "_${OUTPUT}" = "_x64" ] || die "x64 on non-Alpine should be x64, got ${OUTPUT}"
|
||||
|
||||
# aarch64 on non-Alpine should produce arm64
|
||||
ln -sf "${MOCKS_DIR}/uname_linux_aarch64" ./uname
|
||||
OUTPUT="$(nvm_get_arch)"
|
||||
rm -f ./uname
|
||||
[ "_${OUTPUT}" = "_arm64" ] || die "aarch64 on non-Alpine should be arm64, got ${OUTPUT}"
|
||||
fi
|
||||
|
||||
cleanup
|
||||
@@ -37,12 +37,11 @@ setup_chroot() {
|
||||
|
||||
# Files and binaries
|
||||
cp ../../../nvm.sh "${chroot_dir}/"
|
||||
cp /bin/sh /usr/bin/dirname /usr/bin/uname "${chroot_dir}/usr/bin/"
|
||||
ln -sf ../usr/bin/sh "${chroot_dir}/bin/sh"
|
||||
cp /bin/sh /usr/bin/dirname "${chroot_dir}/bin/"
|
||||
[ "${chroot_dir}" = "${CHROOT_WITH_ALPINE}" ] && touch "${chroot_dir}/etc/alpine-release"
|
||||
|
||||
# Libraries
|
||||
for binary in /bin/sh /usr/bin/dirname /usr/bin/uname; do
|
||||
for binary in /bin/sh /usr/bin/dirname; do
|
||||
for lib in $(ldd $binary | awk '{print $3}' | grep "^/"); do
|
||||
dir=$(dirname "${lib}")
|
||||
mkdir -p "${chroot_dir}${dir}"
|
||||
|
||||
@@ -12,16 +12,17 @@ set +e # TODO: fix
|
||||
\. ../../../nvm.sh
|
||||
set -e
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
nvm_get_mirror() {
|
||||
echo "mirror-${1}-${2}"
|
||||
}
|
||||
|
||||
try_err nvm_get_checksum
|
||||
set +ex # needed to capture error output
|
||||
OUTPUT="$(nvm_get_checksum 2>&1 >/dev/null)"
|
||||
EXPECTED_OUTPUT='supported flavors: node, iojs'
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED_OUTPUT}" ] || die "expected error output >${EXPECTED_OUTPUT}<, got >${CAPTURED_STDERR}<"
|
||||
[ "${CAPTURED_EXIT_CODE}" = 2 ] || die "expected exit code 2, got ${CAPTURED_EXIT_CODE}"
|
||||
EXIT_CODE="$(nvm_get_checksum >/dev/null 2>&1 ; echo $?)"
|
||||
set -ex
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected error output >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "${EXIT_CODE}" = 2 ] || die "expected exit code 2, got ${EXIT_CODE}"
|
||||
|
||||
nvm_download() {
|
||||
echo "ERROR_FAILED_MATCH no_match more fields"
|
||||
|
||||
@@ -9,14 +9,13 @@ cleanup() {
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
nvm_has() { return 1 ; }
|
||||
|
||||
try_err nvm_get_latest
|
||||
[ "_$CAPTURED_STDERR" = "_nvm needs curl or wget to proceed." ] \
|
||||
|| die "no curl/wget did not report correct error message, got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_1" ] \
|
||||
|| die "no curl/wget did not exit with code 1, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_get_latest 2>&1)"
|
||||
EXIT_CODE="$(nvm_get_latest >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_nvm needs curl or wget to proceed." ] \
|
||||
|| die "no curl/wget did not report correct error message, got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_1" ] \
|
||||
|| die "no curl/wget did not exit with code 1, got $EXIT_CODE"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -5,8 +5,6 @@ die () { echo "$@" ; exit 1; }
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
expect () {
|
||||
INPUT="$1"
|
||||
EXPECTED_OUTPUT="$2"
|
||||
@@ -22,8 +20,8 @@ fail_with () {
|
||||
INPUT="$1"
|
||||
EXPECTED_CODE="$2"
|
||||
|
||||
try nvm_get_minor_version "$INPUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_$EXPECTED_CODE" ] || die "nvm_get_minor_version "$INPUT" did not fail with code "$EXPECTED_CODE"; got $CAPTURED_EXIT_CODE"
|
||||
EXIT_CODE="$(nvm_get_minor_version "$INPUT" >/dev/null 2>&1; echo $?)"
|
||||
[ "_$EXIT_CODE" = "_$EXPECTED_CODE" ] || die "nvm_get_minor_version "$INPUT" did not fail with code "$EXPECTED_CODE"; got $EXIT_CODE"
|
||||
}
|
||||
|
||||
expect 1 1.0
|
||||
|
||||
@@ -46,9 +46,3 @@ testMirrors '`do something bad`'
|
||||
testMirrors 'https://nodejs.org/dist; xdg-open http://www.google.com;'
|
||||
testMirrors 'https://nodejs.org/dist&&xdg-open http://www.google.com;'
|
||||
testMirrors 'https://nodejs.org/dist|xdg-open http://www.google.com;'
|
||||
|
||||
# Test that awk URL validation rejects non-URL values
|
||||
testMirrors 'not a url'
|
||||
testMirrors 'ftp://wrong-scheme'
|
||||
testMirrors 'http://'
|
||||
testMirrors 'javascript:alert(1)'
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
# nvm_has_colors should be false in command substitution (stdout is not a terminal)
|
||||
[ "$(nvm_has_colors; echo $?)" = "1" ] || die 'nvm_has_colors should be false in command substitution'
|
||||
|
||||
# nvm_has_colors should be false when stdout goes to /dev/null
|
||||
! nvm_has_colors >/dev/null || die 'nvm_has_colors should be false when stdout goes to /dev/null'
|
||||
|
||||
# nvm_has_colors should be false when stdout goes to a pipe
|
||||
(! nvm_has_colors || echo "boo!") | read && die 'nvm_has_colors should be false when stdout goes to a pipe'
|
||||
|
||||
# nvm_has_colors should be false when NVM_NO_COLORS is set, even if stdout is a terminal
|
||||
if [ -t 1 ]; then
|
||||
! NVM_NO_COLORS="--no-colors" nvm_has_colors || die 'nvm_has_colors should be false when NVM_NO_COLORS is set'
|
||||
fi
|
||||
|
||||
# nvm_has_colors should be true when stdout is a terminal and colors are supported
|
||||
if [ -t 1 ] && nvm_has tput && [ "$(command tput -T "${TERM:-vt100}" colors)" -ge 8 ]; then
|
||||
nvm_has_colors || die 'nvm_has_colors should be true when stdout is a terminal with color support'
|
||||
fi
|
||||
|
||||
# nvm_has_colors should be true when redirected to /dev/tty (if available)
|
||||
if (exec >/dev/tty) 2>/dev/null && nvm_has tput && [ "$(command tput -T "${TERM:-vt100}" colors)" -ge 8 ]; then
|
||||
nvm_has_colors >/dev/tty || die 'nvm_has_colors should be true when stdout goes to /dev/tty'
|
||||
fi
|
||||
@@ -23,9 +23,6 @@ if [ "${OUTPUT#*$EXPECTED_OUTPUT}" = "${OUTPUT}" ]; then
|
||||
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
|
||||
fi
|
||||
|
||||
nvm_install_binary node std 8.0.0 1 >/dev/null 2>&1; EXIT_CODE=$?
|
||||
[ "${EXIT_CODE}" = "2" ] || die "Expected exit code 2 when nosource=1 and binary fails, got ${EXIT_CODE}"
|
||||
|
||||
# Unit test to check if the function errors out when the flag is set
|
||||
OUTPUT="$(nvm_install_binary node std 8.0.0 0 2>&1)"
|
||||
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
|
||||
|
||||
@@ -22,10 +22,11 @@ npm() {
|
||||
echo '1.2.3'
|
||||
}
|
||||
|
||||
try_err nvm_install_latest_npm
|
||||
OUTPUT="$(nvm_install_latest_npm 2>&1 >/dev/null)"
|
||||
EXIT_CODE="$(nvm_install_latest_npm >/dev/null 2>&1 ; echo $?)"
|
||||
|
||||
EXPECTED="Unable to obtain node version."
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED}" ] || die "When node is unavailable, expected >${EXPECTED}<; got >${CAPTURED_STDERR}"
|
||||
[ "${OUTPUT}" = "${EXPECTED}" ] || die "When node is unavailable, expected >${EXPECTED}<; got >${OUTPUT}"
|
||||
|
||||
node() {
|
||||
echo 'v4.5.6'
|
||||
@@ -36,10 +37,11 @@ nvm_ls_current() {
|
||||
npm() {
|
||||
return 1
|
||||
}
|
||||
try_err nvm_install_latest_npm
|
||||
OUTPUT="$(nvm_install_latest_npm 2>&1 >/dev/null)"
|
||||
EXIT_CODE="$(nvm_install_latest_npm >/dev/null 2>&1 ; echo $?)"
|
||||
|
||||
EXPECTED="Unable to obtain npm version."
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED}" ] || die "When node is available and npm is unavailable, expected >${EXPECTED}<; got >${CAPTURED_STDERR}"
|
||||
[ "${OUTPUT}" = "${EXPECTED}" ] || die "When node is available and npm is unavailable, expected >${EXPECTED}<; got >${OUTPUT}"
|
||||
|
||||
node() {
|
||||
echo 'v4.5.6'
|
||||
@@ -50,7 +52,8 @@ nvm_ls_current() {
|
||||
npm() {
|
||||
return 1
|
||||
}
|
||||
try_err nvm_install_latest_npm
|
||||
OUTPUT="$(nvm_install_latest_npm 2>&1 >/dev/null)"
|
||||
EXIT_CODE="$(nvm_install_latest_npm >/dev/null 2>&1 ; echo $?)"
|
||||
|
||||
EXPECTED="Unable to obtain npm version."
|
||||
[ "${CAPTURED_STDERR}" = "${EXPECTED}" ] || die "When node is system and npm is unavailable, expected >${EXPECTED}<; got >${CAPTURED_STDERR}"
|
||||
[ "${OUTPUT}" = "${EXPECTED}" ] || die "When node is system and npm is unavailable, expected >${EXPECTED}<; got >${OUTPUT}"
|
||||
|
||||
@@ -10,15 +10,9 @@ assert_not_ok nvm_iojs_version_has_solaris_binary ""
|
||||
assert_not_ok nvm_iojs_version_has_solaris_binary "foo"
|
||||
assert_not_ok nvm_iojs_version_has_solaris_binary "v1.1.0"
|
||||
|
||||
# Non-iojs versions should fail (version is unchanged after stripping iojs prefix)
|
||||
assert_not_ok nvm_iojs_version_has_solaris_binary "v4.0.0"
|
||||
assert_not_ok nvm_iojs_version_has_solaris_binary "v8.0.0"
|
||||
|
||||
# Bare versions without iojs- prefix are node versions, not iojs
|
||||
assert_not_ok nvm_iojs_version_has_solaris_binary "v3.3.1"
|
||||
assert_not_ok nvm_iojs_version_has_solaris_binary "v3.3.2"
|
||||
assert_not_ok nvm_iojs_version_has_solaris_binary "v3.4.1"
|
||||
|
||||
assert_ok nvm_iojs_version_has_solaris_binary "v3.3.1"
|
||||
assert_ok nvm_iojs_version_has_solaris_binary "iojs-v3.3.1"
|
||||
assert_ok nvm_iojs_version_has_solaris_binary "v3.3.2"
|
||||
assert_ok nvm_iojs_version_has_solaris_binary "iojs-v3.3.2"
|
||||
assert_ok nvm_iojs_version_has_solaris_binary "v3.4.1"
|
||||
assert_ok nvm_iojs_version_has_solaris_binary "iojs-v3.4.1"
|
||||
|
||||
@@ -19,11 +19,10 @@ nvm_download() {
|
||||
|
||||
EXPECTED_OUTPUT_PATH="$MOCKS_DIR/nvm_ls_remote.txt"
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
try nvm_ls_remote foo
|
||||
[ "_$CAPTURED_STDOUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_ls_remote foo)"
|
||||
EXIT_CODE="$(nvm_ls_remote foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE"
|
||||
|
||||
OUTPUT="$(nvm_ls_remote)"
|
||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH")"
|
||||
|
||||
@@ -19,11 +19,10 @@ nvm_download() {
|
||||
|
||||
EXPECTED_OUTPUT_PATH="$MOCKS_DIR/nvm_ls_remote nightly.txt"
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
try nvm_ls_remote foo
|
||||
[ "_$CAPTURED_STDOUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_ls_remote foo)"
|
||||
EXIT_CODE="$(nvm_ls_remote foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE"
|
||||
|
||||
OUTPUT="$(nvm_ls_remote)"
|
||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH")"
|
||||
|
||||
@@ -17,11 +17,10 @@ nvm_download() {
|
||||
|
||||
EXPECTED_OUTPUT_PATH="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
try nvm_ls_remote_iojs foo
|
||||
[ "_$CAPTURED_STDOUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_ls_remote_iojs foo)"
|
||||
EXIT_CODE="$(nvm_ls_remote_iojs foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE"
|
||||
|
||||
OUTPUT="$(nvm_ls_remote_iojs)"
|
||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH")"
|
||||
|
||||
@@ -5,16 +5,16 @@ die () { echo "$@" ; exit 1; }
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
try_err nvm_make_alias
|
||||
OUTPUT="$(nvm_make_alias 2>&1)"
|
||||
EXIT_CODE="$(nvm_make_alias >/dev/null 2>&1 ; echo $?)"
|
||||
EXPECTED_OUTPUT='an alias name is required'
|
||||
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "\`nvm_make_alias\` did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" -eq 1 ] || die "\`nvm_make_alias\` did not exit with 1, got '$CAPTURED_EXIT_CODE'"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "\`nvm_make_alias\` did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "$EXIT_CODE" -eq 1 ] || die "\`nvm_make_alias\` did not exit with 1, got '$EXIT_CODE'"
|
||||
|
||||
try_err nvm_make_alias foo
|
||||
OUTPUT="$(nvm_make_alias foo 2>&1)"
|
||||
EXIT_CODE="$(nvm_make_alias foo >/dev/null 2>&1 ; echo $?)"
|
||||
EXPECTED_OUTPUT='an alias target version is required'
|
||||
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "\`nvm_make_alias foo\` did not error with '$EXPECTED_OUTPUT'; got '$CAPTURED_STDERR'"
|
||||
[ "$CAPTURED_EXIT_CODE" -eq 2 ] || die "\`nvm_make_alias foo\` did not exit with 2, got '$CAPTURED_EXIT_CODE'"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "\`nvm_make_alias foo\` did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "$EXIT_CODE" -eq 2 ] || die "\`nvm_make_alias foo\` did not exit with 2, got '$EXIT_CODE'"
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
TEST_DIR="$(pwd)/nvm_offline_version_tmp"
|
||||
|
||||
cleanup() {
|
||||
rm -rf "${TEST_DIR}"
|
||||
}
|
||||
|
||||
[ ! -e "${TEST_DIR}" ] && mkdir -p "${TEST_DIR}"
|
||||
|
||||
# nvm_offline_version should find installed versions
|
||||
INSTALLED_VERSION="$(nvm_version node)"
|
||||
if [ "_${INSTALLED_VERSION}" != '_N/A' ] && [ "_${INSTALLED_VERSION}" != '_system' ]; then
|
||||
try nvm_offline_version "${INSTALLED_VERSION}"
|
||||
[ "_$CAPTURED_STDOUT" = "_${INSTALLED_VERSION}" ] \
|
||||
|| die "nvm_offline_version '${INSTALLED_VERSION}' should return '${INSTALLED_VERSION}'; got '$CAPTURED_STDOUT'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] \
|
||||
|| die "nvm_offline_version '${INSTALLED_VERSION}' should exit 0; got '$CAPTURED_EXIT_CODE'"
|
||||
fi
|
||||
|
||||
# nvm_offline_version with nonexistent version should return N/A
|
||||
try nvm_offline_version "999.999.999"
|
||||
[ "_$CAPTURED_STDOUT" = "_N/A" ] \
|
||||
|| die "nvm_offline_version '999.999.999' should return 'N/A'; got '$CAPTURED_STDOUT'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] \
|
||||
|| die "nvm_offline_version '999.999.999' should exit 3; got '$CAPTURED_EXIT_CODE'"
|
||||
|
||||
# nvm_ls_cached with nonexistent pattern should return nothing
|
||||
try nvm_ls_cached "999.999"
|
||||
[ -z "$CAPTURED_STDOUT" ] \
|
||||
|| die "nvm_ls_cached '999.999' should return empty; got '$CAPTURED_STDOUT'"
|
||||
|
||||
cleanup
|
||||
@@ -24,11 +24,12 @@ nvm_alias() {
|
||||
echo ''
|
||||
}
|
||||
|
||||
try nvm_print_alias_path "$NVM_ALIAS_DIR" foo
|
||||
OUTPUT="$(echo "$CAPTURED_STDOUT" | strip_colors)"
|
||||
OUTPUT="$(nvm_print_alias_path "$NVM_ALIAS_DIR" foo | strip_colors)"
|
||||
EXPECTED_OUTPUT=''
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\" foo' should produce no output when nvm_alias does not; got '$OUTPUT'"
|
||||
[ "$CAPTURED_EXIT_CODE" = '0' ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\" foo' should exit zero when nvm_alias produces no output; got $CAPTURED_EXIT_CODE"
|
||||
|
||||
EXIT_CODE="$(nvm_print_alias_path "$NVM_ALIAS_DIR" foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = '0' ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\" foo' should exit zero when nvm_alias produces no output; got $EXIT_CODE"
|
||||
|
||||
nvm_alias() {
|
||||
echo "\"$1\""
|
||||
@@ -38,7 +39,7 @@ nvm_version() {
|
||||
}
|
||||
|
||||
OUTPUT="$(nvm_print_alias_path "$NVM_ALIAS_DIR" "$NVM_ALIAS_DIR/blah" | strip_colors)"
|
||||
EXPECTED_OUTPUT='blah -> "blah" (-> v"blah" *)'
|
||||
EXPECTED_OUTPUT='blah -> "blah" (-> v"blah")'
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_alias_path \"\$NVM_ALIAS_DIR\" \"\$NVM_ALIAS_DIR/blah\"' should strip alias dir and print nvm_alias output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -18,11 +18,12 @@ OUTPUT="$(nvm_print_default_alias 2>&1)"
|
||||
EXPECTED_OUTPUT='A default alias is required.'
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_default_alias' produced wrong output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'"
|
||||
|
||||
try nvm_print_default_alias foo
|
||||
OUTPUT="$(echo "$CAPTURED_STDOUT" | strip_colors)"
|
||||
OUTPUT="$(nvm_print_default_alias foo | strip_colors)"
|
||||
EXPECTED_OUTPUT=''
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_print_default_alias foo' should produce no output when nvm_print_implicit_alias does not; got '$OUTPUT'"
|
||||
[ "$CAPTURED_EXIT_CODE" = '0' ] || die "'nvm_print_default_alias foo' should exit zero when nvm_print_implicit_alias produces no output; got $CAPTURED_EXIT_CODE"
|
||||
|
||||
EXIT_CODE="$(nvm_print_default_alias foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = '0' ] || die "'nvm_print_default_alias foo' should exit zero when nvm_print_implicit_alias produces no output; got $EXIT_CODE"
|
||||
|
||||
nvm_print_implicit_alias() {
|
||||
echo "\"$1-$2\""
|
||||
@@ -32,7 +33,7 @@ nvm_version() {
|
||||
}
|
||||
|
||||
OUTPUT="$(nvm_print_default_alias blah | strip_colors)"
|
||||
EXPECTED_OUTPUT='blah -> "local-blah" (-> v"local-blah" *) (default)'
|
||||
EXPECTED_OUTPUT='blah -> "local-blah" (-> v"local-blah") (default)'
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "'nvm_print_default_alias blah' should strip alias dir and print nvm_print_implicit_alias output; got '$OUTPUT', expected '$EXPECTED_OUTPUT'"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -5,17 +5,15 @@ die () { echo "$@" ; exit 1; }
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
EXPECTED_FIRST_MSG="nvm_print_implicit_alias must be specified with local or remote as the first argument."
|
||||
[ "_$(nvm_print_implicit_alias 2>&1)" = "_$EXPECTED_FIRST_MSG" ] \
|
||||
|| die "nvm_print_implicit_alias did not require local|remote as first argument"
|
||||
[ "_$(nvm_print_implicit_alias foo 2>&1)" = "_$EXPECTED_FIRST_MSG" ] \
|
||||
|| die "nvm_print_implicit_alias did not require local|remote as first argument"
|
||||
|
||||
try_err nvm_print_implicit_alias
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_1" ] \
|
||||
|| die "nvm_print_implicit_alias without local|remote had wrong exit code: expected 1, got $CAPTURED_EXIT_CODE"
|
||||
FIRST_EXIT_CODE="$(nvm_print_implicit_alias > /dev/null 2>&1 ; echo $?)"
|
||||
[ "_$FIRST_EXIT_CODE" = "_1" ] \
|
||||
|| die "nvm_print_implicit_alias without local|remote had wrong exit code: expected 1, got $FIRST_EXIT_CODE"
|
||||
|
||||
EXPECTED_SECOND_MSG="Only implicit aliases 'stable', 'unstable', 'iojs', and 'node' are supported."
|
||||
[ "_$(nvm_print_implicit_alias local 2>&1)" = "_$EXPECTED_SECOND_MSG" ] \
|
||||
@@ -23,6 +21,6 @@ EXPECTED_SECOND_MSG="Only implicit aliases 'stable', 'unstable', 'iojs', and 'no
|
||||
[ "_$(nvm_print_implicit_alias local foo 2>&1)" = "_$EXPECTED_SECOND_MSG" ] \
|
||||
|| die "nvm_print_implicit_alias did not require stable|unstable|iojs|node as second argument"
|
||||
|
||||
try_err nvm_print_implicit_alias local
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_2" ] \
|
||||
|| die "nvm_print_implicit_alias without stable|unstable|iojs|node had wrong exit code: expected 2, got $CAPTURED_EXIT_CODE"
|
||||
SECOND_EXIT_CODE="$(nvm_print_implicit_alias local > /dev/null 2>&1 ; echo $?)"
|
||||
[ "_$SECOND_EXIT_CODE" = "_2" ] \
|
||||
|| die "nvm_print_implicit_alias without stable|unstable|iojs|node had wrong exit code: expected 2, got $SECOND_EXIT_CODE"
|
||||
|
||||
@@ -12,23 +12,24 @@ cleanup() {
|
||||
\. ../../common.sh
|
||||
|
||||
for f in ../../../test/fixtures/nvmrc/test/fixtures/valid/*; do
|
||||
try nvm_process_nvmrc $f/.nvmrc
|
||||
STDOUT="$(nvm_process_nvmrc $f/.nvmrc 2>/dev/null)"
|
||||
EXIT_CODE="$(nvm_process_nvmrc $f/.nvmrc >/dev/null 2>/dev/null; echo $?)"
|
||||
|
||||
EXPECTED="$(nvm_json_extract node < "${f}/expected.json" | tr -d '"')"
|
||||
|
||||
[ "${CAPTURED_EXIT_CODE}" = "0" ] || die "$(basename "${f}"): expected exit code of 0 but got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${EXIT_CODE}" = "0" ] || die "$(basename "${f}"): expected exit code of 0 but got ${EXIT_CODE}"
|
||||
|
||||
[ "${CAPTURED_STDOUT}" = "${EXPECTED}" ] || die "$(basename "${f}"): expected STDOUT of \`${EXPECTED}\` but got \`${CAPTURED_STDOUT}\`"
|
||||
[ "${STDOUT}" = "${EXPECTED}" ] || die "$(basename "${f}"): expected STDOUT of \`${EXPECTED}\` but got \`${STDOUT}\`"
|
||||
done
|
||||
|
||||
for f in ../../../test/fixtures/nvmrc/test/fixtures/invalid/*; do
|
||||
try nvm_process_nvmrc $f/.nvmrc
|
||||
try_err nvm_process_nvmrc $f/.nvmrc
|
||||
STDERR="$(echo "$CAPTURED_STDERR" | awk '{if(NR > 8) print $0}' | strip_colors)"
|
||||
STDOUT="$(nvm_process_nvmrc $f/.nvmrc 2>/dev/null)"
|
||||
STDERR="$(nvm_process_nvmrc $f/.nvmrc 2>&1 >/dev/null | awk '{if(NR > 8) print $0}' | strip_colors)"
|
||||
EXIT_CODE="$(nvm_process_nvmrc $f/.nvmrc >/dev/null 2>/dev/null; echo $?)"
|
||||
|
||||
EXPECTED="$(nvm_json_extract < "${f}/expected.json" | tr -d '"')"
|
||||
|
||||
[ "${CAPTURED_EXIT_CODE}" != "0" ] || die "$(basename "${f}"): expected exit code of 'not 0' but got ${CAPTURED_EXIT_CODE}"
|
||||
[ "${EXIT_CODE}" != "0" ] || die "$(basename "${f}"): expected exit code of 'not 0' but got ${EXIT_CODE}"
|
||||
|
||||
[ "${STDERR}" = "${EXPECTED}" ] || die "$(basename "${f}"): expected STDERR of \`${EXPECTED}\` but got \`${STDERR}\`"
|
||||
done
|
||||
|
||||
@@ -9,21 +9,21 @@ cleanup() {
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
nvm_ls_remote() {
|
||||
echo "N/A"
|
||||
}
|
||||
try nvm_remote_version foo
|
||||
[ "_$CAPTURED_STDOUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version foo)"
|
||||
EXIT_CODE="$(nvm_remote_version foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE"
|
||||
|
||||
nvm_ls_remote_iojs() {
|
||||
echo "N/A"
|
||||
}
|
||||
try nvm_remote_version iojs-foo
|
||||
[ "_$CAPTURED_STDOUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version iojs-foo)"
|
||||
EXIT_CODE="$(nvm_remote_version iojs-foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE"
|
||||
|
||||
|
||||
nvm_ls_remote() {
|
||||
@@ -40,35 +40,41 @@ nvm_ls_remote_iojs() {
|
||||
echo "iojs_pattern_received:_$1_"
|
||||
fi
|
||||
}
|
||||
try nvm_remote_version foo
|
||||
[ "_$CAPTURED_STDOUT" = "_pattern_received:_foo_" ] \
|
||||
|| die "nvm_remote_version foo did not return last line only of nvm_ls_remote foo; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_version foo did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version foo)"
|
||||
EXIT_CODE="$(nvm_remote_version foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_pattern_received:_foo_" ] \
|
||||
|| die "nvm_remote_version foo did not return last line only of nvm_ls_remote foo; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version foo did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
try nvm_remote_version iojs-foo
|
||||
[ "_$CAPTURED_STDOUT" = "_iojs_pattern_received:_iojs-foo_" ] \
|
||||
|| die "nvm_remote_version iojs-foo did not return last line only of nvm_ls_remote_iojs foo; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_version iojs-foo did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version iojs-foo)"
|
||||
EXIT_CODE="$(nvm_remote_version iojs-foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_iojs_pattern_received:_iojs-foo_" ] \
|
||||
|| die "nvm_remote_version iojs-foo did not return last line only of nvm_ls_remote_iojs foo; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version iojs-foo did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
try nvm_remote_version iojs
|
||||
[ "_$CAPTURED_STDOUT" = "_iojs_pattern_received:__" ] \
|
||||
|| die "nvm_remote_version iojs did not return last line only of nvm_ls_remote_iojs; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_version iojs did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version iojs)"
|
||||
EXIT_CODE="$(nvm_remote_version iojs >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_iojs_pattern_received:__" ] \
|
||||
|| die "nvm_remote_version iojs did not return last line only of nvm_ls_remote_iojs; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version iojs did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
try nvm_remote_version stable
|
||||
[ "_$CAPTURED_STDOUT" = "_$(nvm_ls_remote stable)" ] \
|
||||
|| die "nvm_remote_version stable did not return contents of nvm_ls_remote stable; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_version stable did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version stable)"
|
||||
EXIT_CODE="$(nvm_remote_version stable >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$(nvm_ls_remote stable)" ] \
|
||||
|| die "nvm_remote_version stable did not return contents of nvm_ls_remote stable; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version stable did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
try nvm_remote_version unstable
|
||||
[ "_$CAPTURED_STDOUT" = "_$(nvm_ls_remote unstable)" ] \
|
||||
|| die "nvm_remote_version unstable did not return contents of nvm_ls_remote unstable; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_version unstable did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version unstable)"
|
||||
EXIT_CODE="$(nvm_remote_version unstable >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$(nvm_ls_remote unstable)" ] \
|
||||
|| die "nvm_remote_version unstable did not return contents of nvm_ls_remote unstable; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version unstable did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
try nvm_remote_version node
|
||||
[ "_$CAPTURED_STDOUT" = "_$(nvm_ls_remote node)" ] \
|
||||
|| die "nvm_remote_version node did not return contents of nvm_ls_remote node; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_version node did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version node)"
|
||||
EXIT_CODE="$(nvm_remote_version node >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$(nvm_ls_remote node)" ] \
|
||||
|| die "nvm_remote_version node did not return contents of nvm_ls_remote node; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version node did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
# Test LTS name rejection (Issue #3474)
|
||||
# When nvm_remote_versions returns a line with LTS name in description,
|
||||
@@ -77,15 +83,17 @@ try nvm_remote_version node
|
||||
nvm_remote_versions() {
|
||||
echo "v4.9.1 Argon *"
|
||||
}
|
||||
try nvm_remote_version Argon
|
||||
[ "_$CAPTURED_STDOUT" = "_N/A" ] || die "nvm_remote_version Argon should return N/A (LTS name not in version), got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "nvm_remote_version Argon should exit with code 3, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version Argon)"
|
||||
EXIT_CODE="$(nvm_remote_version Argon >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_N/A" ] || die "nvm_remote_version Argon should return N/A (LTS name not in version), got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "nvm_remote_version Argon should exit with code 3, got $EXIT_CODE"
|
||||
|
||||
nvm_remote_versions() {
|
||||
echo "v4.9.1"
|
||||
}
|
||||
try nvm_remote_version 4
|
||||
[ "_$CAPTURED_STDOUT" = "_v4.9.1" ] || die "nvm_remote_version 4 should return v4.9.1, got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_version 4 should exit with code 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_version 4)"
|
||||
EXIT_CODE="$(nvm_remote_version 4 >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_v4.9.1" ] || die "nvm_remote_version 4 should return v4.9.1, got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version 4 should exit with code 0, got $EXIT_CODE"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -9,31 +9,33 @@ cleanup() {
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
try_err nvm_remote_versions stable
|
||||
OUTPUT="$(nvm_remote_versions stable 2>&1)"
|
||||
EXPECTED_OUTPUT="Implicit aliases are not supported in nvm_remote_versions."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "implicit alias 'stable' did not error out with correct message, got $CAPTURED_STDERR"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_1" ] || die "implicit alias 'stable' did not exit with code 1, got $CAPTURED_EXIT_CODE"
|
||||
EXIT_CODE="$(nvm_remote_versions stable >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "implicit alias 'stable' did not error out with correct message, got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "implicit alias 'stable' did not exit with code 1, got $EXIT_CODE"
|
||||
|
||||
try_err nvm_remote_versions unstable
|
||||
OUTPUT="$(nvm_remote_versions unstable 2>&1)"
|
||||
EXPECTED_OUTPUT="Implicit aliases are not supported in nvm_remote_versions."
|
||||
[ "_$CAPTURED_STDERR" = "_$EXPECTED_OUTPUT" ] || die "implicit alias 'unstable' did not error out with correct message, got $CAPTURED_STDERR"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_1" ] || die "implicit alias 'unstable' did not exit with code 1, got $CAPTURED_EXIT_CODE"
|
||||
EXIT_CODE="$(nvm_remote_versions unstable >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "implicit alias 'unstable' did not error out with correct message, got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "implicit alias 'unstable' did not exit with code 1, got $EXIT_CODE"
|
||||
|
||||
nvm_ls_remote() {
|
||||
echo "N/A"
|
||||
}
|
||||
try nvm_remote_versions foo
|
||||
[ "_$CAPTURED_STDOUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_versions foo)"
|
||||
EXIT_CODE="$(nvm_remote_versions foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE"
|
||||
|
||||
nvm_ls_remote_iojs() {
|
||||
echo "N/A"
|
||||
}
|
||||
try nvm_remote_versions iojs-foo
|
||||
[ "_$CAPTURED_STDOUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_versions iojs-foo)"
|
||||
EXIT_CODE="$(nvm_remote_versions iojs-foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE"
|
||||
|
||||
|
||||
nvm_ls_remote() {
|
||||
@@ -47,26 +49,30 @@ nvm_ls_remote_iojs() {
|
||||
echo "iojs pattern received: _$1_"
|
||||
}
|
||||
|
||||
try nvm_remote_versions foo
|
||||
[ "_$CAPTURED_STDOUT" = "_$(nvm_ls_remote foo)
|
||||
OUTPUT="$(nvm_remote_versions foo)"
|
||||
EXIT_CODE="$(nvm_remote_versions foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$(nvm_ls_remote foo)
|
||||
$(nvm_ls_remote_iojs foo)" ] \
|
||||
|| die "nvm_remote_versions foo did not return contents of nvm_ls_remote foo combined with nvm_ls_remote_iojs foo; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_versions foo did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
|| die "nvm_remote_versions foo did not return contents of nvm_ls_remote foo combined with nvm_ls_remote_iojs foo; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions foo did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
try nvm_remote_versions node
|
||||
[ "_$CAPTURED_STDOUT" = "_$(nvm_ls_remote)" ] \
|
||||
|| die "nvm_remote_versions node did not return contents of nvm_ls_remote; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_versions node did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_versions node)"
|
||||
EXIT_CODE="$(nvm_remote_versions node >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$(nvm_ls_remote)" ] \
|
||||
|| die "nvm_remote_versions node did not return contents of nvm_ls_remote; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions node did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
try nvm_remote_versions iojs-foo
|
||||
[ "_$CAPTURED_STDOUT" = "_$(nvm_ls_remote iojs-foo)
|
||||
OUTPUT="$(nvm_remote_versions iojs-foo)"
|
||||
EXIT_CODE="$(nvm_remote_versions iojs-foo >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$(nvm_ls_remote iojs-foo)
|
||||
$(nvm_ls_remote_iojs iojs-foo)" ] \
|
||||
|| die "nvm_remote_versions iojs-foo did not return contents of nvm_ls_remote iojs-foo combined with nvm_ls_remote_iojs iojs-foo; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_versions iojs-foo did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
|| die "nvm_remote_versions iojs-foo did not return contents of nvm_ls_remote iojs-foo combined with nvm_ls_remote_iojs iojs-foo; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions iojs-foo did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
try nvm_remote_versions iojs
|
||||
[ "_$CAPTURED_STDOUT" = "_$(nvm_ls_remote_iojs)" ] \
|
||||
|| die "nvm_remote_versions iojs did not return contents of nvm_ls_remote_iojs; got $CAPTURED_STDOUT"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "nvm_remote_versions iojs did not exit with 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_remote_versions iojs)"
|
||||
EXIT_CODE="$(nvm_remote_versions iojs >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$(nvm_ls_remote_iojs)" ] \
|
||||
|| die "nvm_remote_versions iojs did not return contents of nvm_ls_remote_iojs; got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions iojs did not exit with 0, got $EXIT_CODE"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
# When nvm_ls_remote succeeds but nvm_ls_remote_iojs fails,
|
||||
# nvm_remote_versions should propagate the iojs failure exit code.
|
||||
nvm_ls_remote() {
|
||||
echo "v0.10.0"
|
||||
return 0
|
||||
}
|
||||
nvm_ls_remote_iojs() {
|
||||
echo "N/A"
|
||||
return 5
|
||||
}
|
||||
|
||||
try nvm_remote_versions
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_5" ] || die "expected iojs failure exit code 5 to propagate, got $CAPTURED_EXIT_CODE"
|
||||
|
||||
# When nvm_ls_remote fails and nvm_ls_remote_iojs succeeds,
|
||||
# nvm_remote_versions should propagate the node failure exit code.
|
||||
nvm_ls_remote() {
|
||||
echo "v0.10.0"
|
||||
return 7
|
||||
}
|
||||
nvm_ls_remote_iojs() {
|
||||
echo "iojs-v1.0.0"
|
||||
return 0
|
||||
}
|
||||
|
||||
try nvm_remote_versions
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_7" ] || die "expected node failure exit code 7 to propagate, got $CAPTURED_EXIT_CODE"
|
||||
|
||||
# When both fail, nvm_remote_versions should propagate the node failure exit code
|
||||
# (since it is checked first).
|
||||
nvm_ls_remote() {
|
||||
echo "v0.10.0"
|
||||
return 3
|
||||
}
|
||||
nvm_ls_remote_iojs() {
|
||||
echo "iojs-v1.0.0"
|
||||
return 4
|
||||
}
|
||||
|
||||
try nvm_remote_versions
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die "expected node failure exit code 3 to take priority, got $CAPTURED_EXIT_CODE"
|
||||
|
||||
# When both succeed, exit code should be 0.
|
||||
nvm_ls_remote() {
|
||||
echo "v0.10.0"
|
||||
return 0
|
||||
}
|
||||
nvm_ls_remote_iojs() {
|
||||
echo "iojs-v1.0.0"
|
||||
return 0
|
||||
}
|
||||
|
||||
try nvm_remote_versions
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] || die "expected exit code 0 when both succeed, got $CAPTURED_EXIT_CODE"
|
||||
|
||||
cleanup
|
||||
@@ -5,17 +5,15 @@ die () { echo "$@" ; exit 1; }
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
EXPECTED_MSG="Only implicit aliases 'stable', 'unstable', 'iojs', and 'node' are supported."
|
||||
[ "_$(nvm_validate_implicit_alias 2>&1)" = "_$EXPECTED_MSG" ] \
|
||||
|| die "nvm_validate_implicit_alias did not require stable|unstable|iojs|node"
|
||||
[ "_$(nvm_validate_implicit_alias foo 2>&1)" = "_$EXPECTED_MSG" ] \
|
||||
|| die "nvm_validate_implicit_alias did not require stable|unstable|iojs|node"
|
||||
|
||||
try_err nvm_validate_implicit_alias
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_1" ] \
|
||||
|| die "nvm_validate_implicit_alias without stable|unstable|iojs|node had wrong exit code: expected 1, got $CAPTURED_EXIT_CODE"
|
||||
EXIT_CODE="$(nvm_validate_implicit_alias >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$EXIT_CODE" = "_1" ] \
|
||||
|| die "nvm_validate_implicit_alias without stable|unstable|iojs|node had wrong exit code: expected 1, got $EXIT_CODE"
|
||||
|
||||
nvm_validate_implicit_alias stable || die "nvm_validate_implicit_alias stable did not exit 0"
|
||||
nvm_validate_implicit_alias unstable || die "nvm_validate_implicit_alias unstable did not exit 0"
|
||||
|
||||
@@ -8,22 +8,22 @@ cleanup () {
|
||||
: nvm.sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
nvm_ls_current() {
|
||||
echo "CURRENT!"
|
||||
return 7
|
||||
}
|
||||
|
||||
try nvm_version current
|
||||
OUTPUT="$(nvm_version current)"
|
||||
EXPECTED_OUTPUT="CURRENT!"
|
||||
[ "_$CAPTURED_STDOUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version current" did not return nvm_ls_current output'
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_7" ] || die '"nvm_version current" did not return nvm_ls_current exit code'
|
||||
EXIT_CODE="$(nvm_version current 2>&1 >/dev/null ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version current" did not return nvm_ls_current output'
|
||||
[ "_$EXIT_CODE" = "_7" ] || die '"nvm_version current" did not return nvm_ls_current exit code'
|
||||
|
||||
try nvm_version
|
||||
OUTPUT="$(nvm_version)"
|
||||
EXPECTED_OUTPUT="CURRENT!"
|
||||
[ "_$CAPTURED_STDOUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return nvm_ls_current output'
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_7" ] || die '"nvm_version" did not return nvm_ls_current exit code'
|
||||
EXIT_CODE="$(nvm_version 2>&1 >/dev/null ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return nvm_ls_current output'
|
||||
[ "_$EXIT_CODE" = "_7" ] || die '"nvm_version" did not return nvm_ls_current exit code'
|
||||
|
||||
nvm_ls() {
|
||||
echo "line 1"
|
||||
@@ -34,17 +34,16 @@ nvm_ls() {
|
||||
[ "_$(nvm_version node)" = "_pattern: stable" ] || die '"nvm_version node" did not pass "stable" to "nvm_ls"'
|
||||
[ "_$(nvm_version node-)" = "_pattern: stable" ] || die '"nvm_version node-" did not pass "stable" to "nvm_ls"'
|
||||
|
||||
nvm_ls() { echo "system v20.0.0"; }
|
||||
[ "_$(nvm_version system)" = "_system" ] || die '"nvm_version system" did not return "system" when "nvm_ls" returns extra columns'
|
||||
|
||||
nvm_ls() { echo "N/A"; }
|
||||
try nvm_version foo
|
||||
OUTPUT="$(nvm_version foo)"
|
||||
EXPECTED_OUTPUT="N/A"
|
||||
[ "_$CAPTURED_STDOUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return N/A when nvm_ls returns N/A'
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die '"nvm_version" returning N/A did not exit code with code 3'
|
||||
EXIT_CODE="$(nvm_version foo 2>&1 >/dev/null ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return N/A when nvm_ls returns N/A'
|
||||
[ "_$EXIT_CODE" = "_3" ] || die '"nvm_version" returning N/A did not exit code with code 3'
|
||||
|
||||
nvm_ls() { echo; }
|
||||
try nvm_version foo
|
||||
OUTPUT="$(nvm_version foo)"
|
||||
EXPECTED_OUTPUT="N/A"
|
||||
[ "_$CAPTURED_STDOUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return N/A when nvm_ls returns nothing'
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_3" ] || die '"nvm_version" returning N/A did not exit code with code 3'
|
||||
EXIT_CODE="$(nvm_version foo 2>&1 >/dev/null ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return N/A when nvm_ls returns nothing'
|
||||
[ "_$EXIT_CODE" = "_3" ] || die '"nvm_version" returning N/A did not exit code with code 3'
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Security test to verify that NVM_AUTH_HEADER is sanitized in wget path
|
||||
# This test ensures that command injection attacks are prevented
|
||||
|
||||
cleanup () {
|
||||
unset -f die cleanup
|
||||
rm -f /tmp/nvm_security_test_file 2>/dev/null || true
|
||||
}
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
set -ex
|
||||
|
||||
# Skip test if wget is not available
|
||||
if ! nvm_has "wget"; then
|
||||
echo "wget not available, skipping security test"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Test 1: Verify that malicious command injection in NVM_AUTH_HEADER is sanitized
|
||||
# This should not execute the command, but should sanitize it
|
||||
MALICIOUS_HEADER="Bearer test-token; touch /tmp/nvm_security_test_file; echo malicious"
|
||||
NVM_AUTH_HEADER="${MALICIOUS_HEADER}" nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/dev/null 2>&1 || true
|
||||
|
||||
# Verify that the malicious file was NOT created (sanitization worked)
|
||||
if [ -f /tmp/nvm_security_test_file ]; then
|
||||
die "SECURITY FAILURE: Command injection succeeded! Malicious file was created."
|
||||
fi
|
||||
|
||||
# Test 2: Verify that sanitized header still works for legitimate requests
|
||||
# The sanitized header should only contain safe characters
|
||||
SANITIZED=$(nvm_sanitize_auth_header "${MALICIOUS_HEADER}")
|
||||
# Verify that dangerous characters were removed
|
||||
case "${SANITIZED}" in
|
||||
*";"*|*"touch"*|*"/tmp"*)
|
||||
die "SECURITY FAILURE: Sanitization did not remove dangerous characters properly"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Test 3: Verify that legitimate header with safe characters still works
|
||||
LEGITIMATE_HEADER="Bearer test-token-123"
|
||||
NVM_AUTH_HEADER="${LEGITIMATE_HEADER}" nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/dev/null 2>&1 || true
|
||||
|
||||
# Test 4: Test with backticks (command substitution)
|
||||
MALICIOUS_HEADER2="Bearer \`touch /tmp/nvm_security_test_file\`"
|
||||
NVM_AUTH_HEADER="${MALICIOUS_HEADER2}" nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/dev/null 2>&1 || true
|
||||
|
||||
# Verify that the malicious file was NOT created
|
||||
if [ -f /tmp/nvm_security_test_file ]; then
|
||||
die "SECURITY FAILURE: Command injection with backticks succeeded! Malicious file was created."
|
||||
fi
|
||||
|
||||
# Test 5: Test with $(command substitution)
|
||||
MALICIOUS_HEADER3="Bearer \$(touch /tmp/nvm_security_test_file)"
|
||||
NVM_AUTH_HEADER="${MALICIOUS_HEADER3}" nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/dev/null 2>&1 || true
|
||||
|
||||
# Verify that the malicious file was NOT created
|
||||
if [ -f /tmp/nvm_security_test_file ]; then
|
||||
die "SECURITY FAILURE: Command injection with \$() succeeded! Malicious file was created."
|
||||
fi
|
||||
|
||||
cleanup
|
||||
echo "All security tests passed: Command injection attacks are properly sanitized"
|
||||
@@ -1,70 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
unset -f install_nvm_from_git install_nvm_as_script nvm_detect_profile nvm_has nvm_install_dir
|
||||
unset -f nvm_check_global_modules nvm_install_node
|
||||
unset -f setup cleanup die
|
||||
unset NVM_ENV METHOD PROFILE
|
||||
rm -rf "${TMPDIR_FOR_TEST-}" 2>/dev/null
|
||||
}
|
||||
|
||||
setup() {
|
||||
NVM_ENV=testing \. ../../install.sh
|
||||
|
||||
# Mock installation functions to do nothing
|
||||
install_nvm_from_git() { :; }
|
||||
install_nvm_as_script() { :; }
|
||||
nvm_check_global_modules() { :; }
|
||||
nvm_install_node() { :; }
|
||||
|
||||
# Mock nvm_has to return true for git
|
||||
nvm_has() {
|
||||
case "$1" in
|
||||
git) return 0 ;;
|
||||
xcode-select) return 1 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
}
|
||||
|
||||
setup
|
||||
|
||||
#
|
||||
# Test: printf calls in nvm_do_install should not interpret % in paths
|
||||
# When NVM_DIR contains printf format specifiers like %s or %d,
|
||||
# the output should contain them literally, not interpret them.
|
||||
#
|
||||
|
||||
TMPDIR_FOR_TEST="$(mktemp -d)"
|
||||
PERCENT_DIR="${TMPDIR_FOR_TEST}/nvm_%s_test"
|
||||
mkdir -p "${PERCENT_DIR}"
|
||||
|
||||
# Copy nvm.sh to the temp dir so sourcing succeeds
|
||||
cp ../../nvm.sh "${PERCENT_DIR}/nvm.sh"
|
||||
|
||||
# Mock nvm_install_dir to return our percent-containing path
|
||||
nvm_install_dir() {
|
||||
nvm_echo "${PERCENT_DIR}"
|
||||
}
|
||||
|
||||
# Mock nvm_detect_profile to return empty so we hit the "Profile not found" branch
|
||||
# which calls: command printf '%b' "${SOURCE_STR}"
|
||||
nvm_detect_profile() {
|
||||
echo ""
|
||||
}
|
||||
|
||||
OUTPUT="$(PROFILE='' METHOD='' NVM_DIR="${PERCENT_DIR}" nvm_do_install 2>&1)"
|
||||
|
||||
# The SOURCE_STR should contain the %s from the path literally
|
||||
if ! echo "${OUTPUT}" | grep -q '%s'; then
|
||||
die "printf should not have consumed the %s in the path. Output: ${OUTPUT}"
|
||||
fi
|
||||
|
||||
# Also verify via the "Profile not found" branch that SOURCE_STR was printed correctly
|
||||
if ! echo "${OUTPUT}" | grep -q 'nvm_%s_test'; then
|
||||
die "Expected nvm_%s_test in output but got: ${OUTPUT}"
|
||||
fi
|
||||
|
||||
cleanup
|
||||
@@ -1,68 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
unset -f install_nvm_from_git install_nvm_as_script nvm_detect_profile nvm_has
|
||||
unset -f nvm_check_global_modules nvm_install_node
|
||||
unset -f setup cleanup die
|
||||
unset NVM_ENV METHOD PROFILE
|
||||
}
|
||||
|
||||
setup() {
|
||||
NVM_ENV=testing \. ../../install.sh
|
||||
|
||||
# Mock installation functions to do nothing
|
||||
install_nvm_from_git() { :; }
|
||||
install_nvm_as_script() { :; }
|
||||
nvm_check_global_modules() { :; }
|
||||
nvm_install_node() { :; }
|
||||
|
||||
# Mock nvm_has to return true for git
|
||||
nvm_has() {
|
||||
case "$1" in
|
||||
git) return 0 ;;
|
||||
xcode-select) return 1 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Mock nvm_detect_profile to return empty (profile not found)
|
||||
nvm_detect_profile() {
|
||||
echo ""
|
||||
}
|
||||
}
|
||||
|
||||
setup
|
||||
|
||||
#
|
||||
# Test: When PROFILE is set to a non-/dev/null value but nvm_detect_profile
|
||||
# returns empty, the "Profile not found" message should include the PROFILE
|
||||
# value in the TRIED_PROFILE string.
|
||||
#
|
||||
# Before the fix, TRIED_PROFILE was set to "${NVM_PROFILE} (as defined in $PROFILE)"
|
||||
# but NVM_PROFILE is known to be empty at that point, so the message would say
|
||||
# " (as defined in $PROFILE)" instead of "/some/path (as defined in $PROFILE)".
|
||||
#
|
||||
|
||||
OUTPUT="$(PROFILE='/my/custom/profile' METHOD='' NVM_DIR="$(mktemp -d)" nvm_do_install 2>&1)"
|
||||
|
||||
# The output should mention /my/custom/profile in the "Tried" line
|
||||
if ! echo "${OUTPUT}" | grep -q '/my/custom/profile (as defined in \$PROFILE)'; then
|
||||
# Check without the escaped dollar sign too
|
||||
if ! echo "${OUTPUT}" | grep -q '/my/custom/profile'; then
|
||||
die "Expected TRIED_PROFILE to contain '/my/custom/profile', got: ${OUTPUT}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Verify the "Profile not found" message appears
|
||||
if ! echo "${OUTPUT}" | grep -q 'Profile not found'; then
|
||||
die "Expected 'Profile not found' message, got: ${OUTPUT}"
|
||||
fi
|
||||
|
||||
# The message should NOT start with " (as defined" (which would indicate empty TRIED_PROFILE prefix)
|
||||
if echo "${OUTPUT}" | grep -q 'Tried (as defined'; then
|
||||
die "TRIED_PROFILE appears to have an empty prefix (NVM_PROFILE instead of PROFILE), got: ${OUTPUT}"
|
||||
fi
|
||||
|
||||
cleanup
|
||||
@@ -1,49 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
cleanup () {
|
||||
if [ -n "${SAVE_NVM_DIR-}" ]; then
|
||||
NVM_DIR="$SAVE_NVM_DIR"
|
||||
fi
|
||||
unset -f die cleanup
|
||||
unset SAVE_NVM_DIR
|
||||
}
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
SAVE_NVM_DIR="$NVM_DIR"
|
||||
|
||||
NVM_ENV=testing \. ../../install.sh
|
||||
|
||||
# install_nvm_from_git is available
|
||||
type install_nvm_from_git > /dev/null 2>&1 || die 'install_nvm_from_git is not available'
|
||||
|
||||
# install_nvm_as_script is available
|
||||
type install_nvm_as_script > /dev/null 2>&1 || die 'install_nvm_as_script is not available'
|
||||
|
||||
# nvm_do_install is available
|
||||
type nvm_do_install > /dev/null 2>&1 || die 'nvm_do_install is not available'
|
||||
|
||||
IMPOSSIBLE_DIR="/dev/null/impossible_path"
|
||||
|
||||
## install_nvm_from_git: mkdir failure should exit with code 2 and print error
|
||||
OUTPUT="$(NVM_DIR="${IMPOSSIBLE_DIR}" install_nvm_from_git 2>&1)"
|
||||
EXIT_CODE=$?
|
||||
[ "${EXIT_CODE}" = '2' ] || die "install_nvm_from_git should exit 2 on mkdir failure, got ${EXIT_CODE}"
|
||||
echo "${OUTPUT}" | grep -q "Failed to create directory" || die "install_nvm_from_git should print mkdir error message, got: ${OUTPUT}"
|
||||
|
||||
## install_nvm_as_script: mkdir failure should return 1 and print error
|
||||
OUTPUT="$(NVM_DIR="${IMPOSSIBLE_DIR}" install_nvm_as_script 2>&1)"
|
||||
EXIT_CODE=$?
|
||||
[ "${EXIT_CODE}" = '1' ] || die "install_nvm_as_script should return 1 on mkdir failure, got ${EXIT_CODE}"
|
||||
echo "${OUTPUT}" | grep -q "Failed to create directory" || die "install_nvm_as_script should print mkdir error message, got: ${OUTPUT}"
|
||||
|
||||
## nvm_do_install: mkdir failure for default dir should exit with code 2 and print error
|
||||
# Override nvm_default_install_dir to return the impossible path so the mkdir branch is taken
|
||||
nvm_default_install_dir() {
|
||||
printf %s "${IMPOSSIBLE_DIR}"
|
||||
}
|
||||
OUTPUT="$(NVM_DIR="${IMPOSSIBLE_DIR}" nvm_do_install 2>&1)"
|
||||
EXIT_CODE=$?
|
||||
[ "${EXIT_CODE}" = '2' ] || die "nvm_do_install should exit 2 on mkdir failure, got ${EXIT_CODE}"
|
||||
echo "${OUTPUT}" | grep -q "Failed to create directory" || die "nvm_do_install should print mkdir error message, got: ${OUTPUT}"
|
||||
|
||||
cleanup
|
||||
@@ -1,5 +0,0 @@
|
||||
if [ "_$1" = "_-m" ]; then
|
||||
echo "aarch64"
|
||||
else
|
||||
echo "Linux hostname 5.15.0-1 #1 SMP aarch64 aarch64 aarch64 GNU/Linux"
|
||||
fi
|
||||
@@ -1,5 +0,0 @@
|
||||
if [ "_$1" = "_-m" ]; then
|
||||
echo "x86_64"
|
||||
else
|
||||
echo "Linux hostname 5.15.0-1 #1 SMP x86_64 x86_64 x86_64 GNU/Linux"
|
||||
fi
|
||||
@@ -4,8 +4,6 @@ die () { echo "$@" ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
nvm deactivate >/dev/null 2>&1 || die 'deactivate failed'
|
||||
|
||||
nvm_die_on_prefix() {
|
||||
@@ -13,12 +11,12 @@ nvm_die_on_prefix() {
|
||||
return 3
|
||||
}
|
||||
|
||||
try nvm use --silent node
|
||||
OUTPUT="$(nvm use --silent node)"
|
||||
EXPECTED_OUTPUT=""
|
||||
[ "_$CAPTURED_STDOUT" = "_$EXPECTED_OUTPUT" ] \
|
||||
|| die "'nvm use --silent node' did not call through to 'nvm_die_on_prefix' and give output '$EXPECTED_OUTPUT'; got '$CAPTURED_STDOUT'"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \
|
||||
|| die "'nvm use --silent node' did not call through to 'nvm_die_on_prefix' and give output '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
|
||||
try_err nvm use --silent node
|
||||
EXIT_CODE="$(nvm use --silent node >/dev/null 2>&1; echo $?)"
|
||||
EXPECTED_CODE="11"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_$EXPECTED_CODE" ] \
|
||||
|| die "'nvm use --silent node' when 'nvm_die_on_prefix' fails did not return '$EXPECTED_CODE'; got '$CAPTURED_EXIT_CODE'"
|
||||
[ "_$EXIT_CODE" = "_$EXPECTED_CODE" ] \
|
||||
|| die "'nvm use --silent node' when 'nvm_die_on_prefix' fails did not return '$EXPECTED_CODE'; got '$EXIT_CODE'"
|
||||
|
||||
@@ -90,13 +90,12 @@ wget() {
|
||||
fi
|
||||
}
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
try nvm_get_latest
|
||||
[ "_$CAPTURED_STDOUT" = "_$EXPECTED_VERSION" ] \
|
||||
|| die "success path did not return version '$EXPECTED_VERSION', got '$CAPTURED_STDOUT'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_0" ] \
|
||||
|| die "success path did not exit with code 0, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_get_latest)"
|
||||
EXIT_CODE="$(nvm_get_latest >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_VERSION" ] \
|
||||
|| die "success path did not return version '$EXPECTED_VERSION', got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_0" ] \
|
||||
|| die "success path did not exit with code 0, got $EXIT_CODE"
|
||||
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -8,8 +8,6 @@ cleanup() {
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
curl() {
|
||||
return 1
|
||||
}
|
||||
@@ -17,10 +15,11 @@ wget() {
|
||||
return 1
|
||||
}
|
||||
|
||||
try_err nvm_get_latest
|
||||
[ "_$CAPTURED_STDERR" = "_https://latest.nvm.sh did not redirect to the latest release on GitHub" ] \
|
||||
|| die "failed redirect did not report correct error message, got '$CAPTURED_STDERR'"
|
||||
[ "_$CAPTURED_EXIT_CODE" = "_2" ] \
|
||||
|| die "failed redirect did not exit with code 2, got $CAPTURED_EXIT_CODE"
|
||||
OUTPUT="$(nvm_get_latest 2>&1)"
|
||||
EXIT_CODE="$(nvm_get_latest >/dev/null 2>&1 ; echo $?)"
|
||||
[ "_$OUTPUT" = "_https://latest.nvm.sh did not redirect to the latest release on GitHub" ] \
|
||||
|| die "failed redirect did not report correct error message, got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_2" ] \
|
||||
|| die "failed redirect did not exit with code 2, got $EXIT_CODE"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -24,10 +24,5 @@ NVM_LS_CURRENT="$(nvm ls current | strip_colors | \grep -o v0.10.1)"
|
||||
# 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' without colors did not return 'default -> 0.10.1 (-> v0.10.1 *)', got '${NVM_ALIAS_DEFAULT}'"
|
||||
|
||||
nvm_has_colors() { return 0; }
|
||||
NVM_ALIAS_DEFAULT_STRIPPED="$(nvm alias default | strip_colors)"
|
||||
[ "_${NVM_ALIAS_DEFAULT_STRIPPED}" = "_default -> 0.10.1 (-> v0.10.1)" ] \
|
||||
|| die "'nvm alias default' with colors stripped did not return 'default -> 0.10.1 (-> v0.10.1)', got '${NVM_ALIAS_DEFAULT_STRIPPED}'"
|
||||
[ "_${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}'"
|
||||
|
||||
@@ -33,10 +33,5 @@ NVM_LS_CURRENT="$(nvm ls current | strip_colors | command grep -o v0.10.2)"
|
||||
[ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', >${NVM_LS_CURRENT}<\n$(nvm_ls)"
|
||||
|
||||
NVM_ALIAS_DEFAULT="$(nvm alias default | strip_colors)"
|
||||
[ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.2 (-> v0.10.2 *)" ] \
|
||||
|| die "'nvm alias default' without colors did not return 'default -> 0.10.2 (-> v0.10.2 *)', got >${NVM_ALIAS_DEFAULT}<\n$(nvm_ls)"
|
||||
|
||||
nvm_has_colors() { return 0; }
|
||||
NVM_ALIAS_DEFAULT_STRIPPED="$(nvm alias default | strip_colors)"
|
||||
[ "_$NVM_ALIAS_DEFAULT_STRIPPED" = "_default -> 0.10.2 (-> v0.10.2)" ] \
|
||||
|| die "'nvm alias default' with colors stripped did not return 'default -> 0.10.2 (-> v0.10.2)', got >${NVM_ALIAS_DEFAULT_STRIPPED}<\n$(nvm_ls)"
|
||||
[ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.2 (-> v0.10.2)" ] \
|
||||
|| die "'nvm alias default did not return 'default -> 0.10.2 (-> v0.10.2)', got >${NVM_ALIAS_DEFAULT}<\n$(nvm_ls)"
|
||||
|
||||
Reference in New Issue
Block a user