Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d2f31a21f3 | ||
|
|
ff1257e8e3 | ||
|
|
87a709741f | ||
|
|
f439acda4a | ||
|
|
dd89af53f5 | ||
|
|
bd090ef7f8 | ||
|
|
4c7d899447 | ||
|
|
80cb39d712 | ||
|
|
93277112ae | ||
|
|
762f9ef9d1 | ||
|
|
e597bb208e | ||
|
|
aa427ad396 |
@@ -8,6 +8,7 @@ test/bak
|
||||
.urchin.log
|
||||
.urchin_stdout
|
||||
test/**/test_output
|
||||
test/**/.nvmrc
|
||||
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -9,6 +9,7 @@ test/bak
|
||||
.urchin.log
|
||||
.urchin_stdout
|
||||
test/**/test_output
|
||||
test/**/.nvmrc
|
||||
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
|
||||
11
.travis.yml
11
.travis.yml
@@ -8,6 +8,10 @@ addons:
|
||||
# - gcc-4.8
|
||||
# - g++-4.8
|
||||
|
||||
# https://gist.github.com/iedemam/9830045
|
||||
git:
|
||||
submodules: false
|
||||
|
||||
cache:
|
||||
ccache: true
|
||||
directories:
|
||||
@@ -16,6 +20,11 @@ cache:
|
||||
before_install:
|
||||
- sudo sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf
|
||||
- sudo update-ca-certificates -f
|
||||
|
||||
# https://gist.github.com/iedemam/9830045
|
||||
- sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules
|
||||
- git submodule update --init --recursive
|
||||
|
||||
- $SHELL --version 2> /dev/null || dpkg -s $SHELL 2> /dev/null || which $SHELL
|
||||
- curl --version
|
||||
- wget --version
|
||||
@@ -23,7 +32,7 @@ before_install:
|
||||
- zsh --version
|
||||
- dpkg -s dash | grep ^Version | awk '{print $2}'
|
||||
# install python
|
||||
- pyenv install 2.7.18
|
||||
- pyenv local 2.7.18 || pyenv install 2.7.18
|
||||
- pyenv local 2.7.18 || echo 'pyenv failed'
|
||||
- python -V
|
||||
install:
|
||||
|
||||
8
Makefile
8
Makefile
@@ -40,10 +40,14 @@ list:
|
||||
# Note that preexisting NVM_* variables are unset to avoid interfering with tests, except when running the Travis tests (where NVM_DIR must be passed in and the env. is assumed to be pristine).
|
||||
.PHONY: $(SHELL_TARGETS)
|
||||
$(SHELL_TARGETS):
|
||||
@shell='$@'; shell=$${shell##*-}; which "$$shell" >/dev/null || { printf '\033[0;31m%s\033[0m\n' "WARNING: Cannot test with shell '$$shell': not found." >&2; exit 0; } && \
|
||||
@shell='$@'; shell=$${shell##*-}; \
|
||||
which "$$shell" >/dev/null || { printf '\033[0;31m%s\033[0m\n' "WARNING: Cannot test with shell '$$shell': not found." >&2; exit 0; } && \
|
||||
printf '\n\033[0;34m%s\033[0m\n' "Running tests in $$shell"; \
|
||||
[ -z "$$TRAVIS_BUILD_DIR" ] && for v in $$(set | awk -F'=' '$$1 ~ "^NVM_" { print $$1 }'); do unset $$v; done && unset v; \
|
||||
for suite in $(TEST_SUITE); do $(URCHIN) -f -s $$shell test/$$suite || exit; done
|
||||
for suite in $(TEST_SUITE); do \
|
||||
echo "Running test suite: $$suite"; \
|
||||
$(URCHIN) -f -s $$shell test/$$suite || exit; \
|
||||
done
|
||||
|
||||
# All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS).
|
||||
.PHONY: test
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
- [Restoring PATH](#restoring-path)
|
||||
- [Set default node version](#set-default-node-version)
|
||||
- [Use a mirror of node binaries](#use-a-mirror-of-node-binaries)
|
||||
- [Pass Authorization header to mirror](#pass-authorization-header-to-mirror)
|
||||
- [.nvmrc](#nvmrc)
|
||||
- [Deeper Shell Integration](#deeper-shell-integration)
|
||||
- [Calling `nvm use` automatically in a directory with a `.nvmrc` file](#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file)
|
||||
@@ -530,6 +531,13 @@ NVM_IOJS_ORG_MIRROR=https://iojs.org/dist nvm install iojs-v1.0.3
|
||||
|
||||
`nvm use` will not, by default, create a "current" symlink. Set `$NVM_SYMLINK_CURRENT` to "true" to enable this behavior, which is sometimes useful for IDEs. Note that using `nvm` in multiple shell tabs with this environment variable enabled can cause race conditions.
|
||||
|
||||
#### Pass Authorization header to mirror
|
||||
To pass an Authorization header through to the mirror url, set `$NVM_AUTH_HEADER`
|
||||
|
||||
```sh
|
||||
NVM_AUTH_HEADER="Bearer secret-token" nvm install node
|
||||
```
|
||||
|
||||
### .nvmrc
|
||||
|
||||
You can create a `.nvmrc` file containing a node version number (or any other string that `nvm` understands; see `nvm --help` for details) in the project root directory (or any parent directory).
|
||||
|
||||
137
nvm.sh
Normal file → Executable file
137
nvm.sh
Normal file → Executable file
@@ -83,7 +83,7 @@ nvm_has_colors() {
|
||||
if nvm_has tput; then
|
||||
NVM_NUM_COLORS="$(tput -T "${TERM:-vt100}" colors)"
|
||||
fi
|
||||
[ "${NVM_NUM_COLORS:--1}" -ge 8 ]
|
||||
[ "${NVM_NUM_COLORS:--1}" -ge 8 ] && [ "${NVM_NO_COLORS-}" != '--no-colors' ]
|
||||
}
|
||||
|
||||
nvm_curl_libz_support() {
|
||||
@@ -116,12 +116,19 @@ nvm_get_latest() {
|
||||
}
|
||||
|
||||
nvm_download() {
|
||||
local CURL_COMPRESSED_FLAG
|
||||
if nvm_has "curl"; then
|
||||
local CURL_COMPRESSED_FLAG=""
|
||||
local CURL_HEADER_FLAG=""
|
||||
|
||||
if [ -n "${NVM_AUTH_HEADER:-}" ]; then
|
||||
sanitized_header=$(nvm_sanitize_auth_header "${NVM_AUTH_HEADER}")
|
||||
CURL_HEADER_FLAG="--header \"Authorization: ${sanitized_header}\""
|
||||
fi
|
||||
|
||||
if nvm_curl_use_compression; then
|
||||
CURL_COMPRESSED_FLAG="--compressed"
|
||||
fi
|
||||
curl --fail ${CURL_COMPRESSED_FLAG:-} -q "$@"
|
||||
eval "curl -q --fail ${CURL_COMPRESSED_FLAG:-} ${CURL_HEADER_FLAG:-} $*"
|
||||
elif nvm_has "wget"; then
|
||||
# Emulate curl with wget
|
||||
ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \
|
||||
@@ -133,11 +140,20 @@ nvm_download() {
|
||||
-e 's/-sS /-nv /' \
|
||||
-e 's/-o /-O /' \
|
||||
-e 's/-C - /-c /')
|
||||
|
||||
if [ -n "${NVM_AUTH_HEADER:-}" ]; then
|
||||
ARGS="${ARGS} --header \"${NVM_AUTH_HEADER}\""
|
||||
fi
|
||||
# shellcheck disable=SC2086
|
||||
eval wget $ARGS
|
||||
fi
|
||||
}
|
||||
|
||||
nvm_sanitize_auth_header() {
|
||||
# Remove potentially dangerous characters
|
||||
nvm_echo "$1" | command sed 's/[^a-zA-Z0-9:;_. -]//g'
|
||||
}
|
||||
|
||||
nvm_has_system_node() {
|
||||
[ "$(nvm deactivate >/dev/null 2>&1 && command -v node)" != '' ]
|
||||
}
|
||||
@@ -370,8 +386,9 @@ nvm_install_latest_npm() {
|
||||
|| { [ $NVM_IS_16_OR_ABOVE -eq 1 ] && [ $NVM_IS_16_LTS_OR_ABOVE -eq 0 ]; } \
|
||||
|| { [ $NVM_IS_17_OR_ABOVE -eq 1 ] && [ $NVM_IS_18_OR_ABOVE -eq 0 ]; } \
|
||||
; then
|
||||
nvm_echo '* `npm` `v8.x` is the last version that works on `node` `v12`, `v14.13` - `v14.16`, or `v16.0` - `v16.12`'
|
||||
$NVM_NPM_CMD install -g npm@8
|
||||
nvm_echo '* `npm` `v8.6` is the last version that works on `node` `v12`, `v14.13` - `v14.16`, or `v16.0` - `v16.12`'
|
||||
# ^8.7 breaks `npm ls` on file: deps
|
||||
$NVM_NPM_CMD install -g npm@8.6
|
||||
elif \
|
||||
[ $NVM_IS_18_17_OR_ABOVE -eq 0 ] \
|
||||
|| { [ $NVM_IS_19_OR_ABOVE -eq 1 ] && [ $NVM_IS_20_5_OR_ABOVE -eq 0 ]; } \
|
||||
@@ -480,9 +497,9 @@ additionally, a single bare nvm-recognized version-ish must be present (after st
|
||||
warn_text="non-commented content parsed:
|
||||
${1}"
|
||||
|
||||
nvm_err "$(nvm_wrap_with_color_code r "${error_text}")
|
||||
nvm_err "$(nvm_wrap_with_color_code 'r' "${error_text}")
|
||||
|
||||
$(nvm_wrap_with_color_code y "${warn_text}")"
|
||||
$(nvm_wrap_with_color_code 'y' "${warn_text}")"
|
||||
}
|
||||
|
||||
nvm_process_nvmrc() {
|
||||
@@ -1077,7 +1094,7 @@ nvm_print_formatted_alias() {
|
||||
fi
|
||||
local ARROW
|
||||
ARROW='->'
|
||||
if [ -z "${NVM_NO_COLORS}" ] && 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"
|
||||
@@ -1815,7 +1832,7 @@ nvm_print_versions() {
|
||||
DEFAULT_COLOR=$(nvm_get_colors 5)
|
||||
LTS_COLOR=$(nvm_get_colors 6)
|
||||
|
||||
if [ -z "${NVM_NO_COLORS-}" ] && nvm_has_colors; then
|
||||
if nvm_has_colors; then
|
||||
NVM_HAS_COLORS=1
|
||||
fi
|
||||
|
||||
@@ -2894,6 +2911,23 @@ nvm_is_natural_num() {
|
||||
esac
|
||||
}
|
||||
|
||||
nvm_write_nvmrc() {
|
||||
local VERSION_STRING
|
||||
VERSION_STRING=$(nvm_version "${1-$VERSION_STRING}")
|
||||
if [ "$VERSION_STRING" = '∞' ] || [ "$VERSION_STRING" = 'N/A' ]; then
|
||||
return 1
|
||||
fi
|
||||
echo "$VERSION_STRING" | tee "$PWD"/.nvmrc > /dev/null || {
|
||||
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
||||
nvm_err "Warning: Unable to write version number ($VERSION_STRING) to .nvmrc"
|
||||
fi
|
||||
return 3
|
||||
}
|
||||
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
||||
nvm_echo "Wrote version number ($VERSION_STRING) to .nvmrc"
|
||||
fi
|
||||
}
|
||||
|
||||
# Check version dir permissions
|
||||
nvm_check_file_permissions() {
|
||||
nvm_is_zsh && setopt local_options nonomatch
|
||||
@@ -2999,6 +3033,7 @@ nvm() {
|
||||
nvm_echo ' --no-progress Disable the progress bar on any downloads'
|
||||
nvm_echo ' --alias=<name> After installing, set the alias specified to the version specified. (same as: nvm alias <name> <version>)'
|
||||
nvm_echo ' --default After installing, set default alias to the version specified. (same as: nvm alias default <version>)'
|
||||
nvm_echo ' --save After installing, write the specified version to .nvmrc'
|
||||
nvm_echo ' nvm uninstall <version> Uninstall a version'
|
||||
nvm_echo ' nvm uninstall --lts Uninstall using automatic LTS (long-term support) alias `lts/*`, if available.'
|
||||
nvm_echo ' nvm uninstall --lts=<LTS name> Uninstall using automatic alias for provided LTS line, if available.'
|
||||
@@ -3007,6 +3042,7 @@ nvm() {
|
||||
nvm_echo ' --silent Silences stdout/stderr output'
|
||||
nvm_echo ' --lts Uses automatic LTS (long-term support) alias `lts/*`, if available.'
|
||||
nvm_echo ' --lts=<LTS name> Uses automatic alias for provided LTS line, if available.'
|
||||
nvm_echo ' --save Writes the specified version to .nvmrc.'
|
||||
nvm_echo ' nvm exec [<version>] [<command>] Run <command> on <version>. Uses .nvmrc if available and version is omitted.'
|
||||
nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm exec`:'
|
||||
nvm_echo ' --silent Silences stdout/stderr output'
|
||||
@@ -3044,16 +3080,16 @@ nvm() {
|
||||
nvm_echo ' nvm cache clear Empty cache directory for nvm'
|
||||
nvm_echo ' nvm set-colors [<color codes>] Set five text colors using format "yMeBg". Available when supported.'
|
||||
nvm_echo ' Initial colors are:'
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code b b)$(nvm_wrap_with_color_code y y)$(nvm_wrap_with_color_code g g)$(nvm_wrap_with_color_code r r)$(nvm_wrap_with_color_code e e)"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'b' 'b')$(nvm_wrap_with_color_code 'y' 'y')$(nvm_wrap_with_color_code 'g' 'g')$(nvm_wrap_with_color_code 'r' 'r')$(nvm_wrap_with_color_code 'e' 'e')"
|
||||
nvm_echo ' Color codes:'
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code r r)/$(nvm_wrap_with_color_code R R) = $(nvm_wrap_with_color_code r red) / $(nvm_wrap_with_color_code R 'bold red')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code g g)/$(nvm_wrap_with_color_code G G) = $(nvm_wrap_with_color_code g green) / $(nvm_wrap_with_color_code G 'bold green')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code b b)/$(nvm_wrap_with_color_code B B) = $(nvm_wrap_with_color_code b blue) / $(nvm_wrap_with_color_code B 'bold blue')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code c c)/$(nvm_wrap_with_color_code C C) = $(nvm_wrap_with_color_code c cyan) / $(nvm_wrap_with_color_code C 'bold cyan')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code m m)/$(nvm_wrap_with_color_code M M) = $(nvm_wrap_with_color_code m magenta) / $(nvm_wrap_with_color_code M 'bold magenta')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code y y)/$(nvm_wrap_with_color_code Y Y) = $(nvm_wrap_with_color_code y yellow) / $(nvm_wrap_with_color_code Y 'bold yellow')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code k k)/$(nvm_wrap_with_color_code K K) = $(nvm_wrap_with_color_code k black) / $(nvm_wrap_with_color_code K 'bold black')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code e e)/$(nvm_wrap_with_color_code W W) = $(nvm_wrap_with_color_code e 'light grey') / $(nvm_wrap_with_color_code W white)"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'r' 'r')/$(nvm_wrap_with_color_code 'R' 'R') = $(nvm_wrap_with_color_code 'r' 'red') / $(nvm_wrap_with_color_code 'R' 'bold red')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'g' 'g')/$(nvm_wrap_with_color_code 'G' 'G') = $(nvm_wrap_with_color_code 'g' 'green') / $(nvm_wrap_with_color_code 'G' 'bold green')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'b' 'b')/$(nvm_wrap_with_color_code 'B' 'B') = $(nvm_wrap_with_color_code 'b' 'blue') / $(nvm_wrap_with_color_code 'B' 'bold blue')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'c' 'c')/$(nvm_wrap_with_color_code 'C' 'C') = $(nvm_wrap_with_color_code 'c' 'cyan') / $(nvm_wrap_with_color_code 'C' 'bold cyan')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'm' 'm')/$(nvm_wrap_with_color_code 'M' 'M') = $(nvm_wrap_with_color_code 'm' 'magenta') / $(nvm_wrap_with_color_code 'M' 'bold magenta')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'y' 'y')/$(nvm_wrap_with_color_code 'Y' 'Y') = $(nvm_wrap_with_color_code 'y' 'yellow') / $(nvm_wrap_with_color_code 'Y' 'bold yellow')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'k' 'k')/$(nvm_wrap_with_color_code 'K' 'K') = $(nvm_wrap_with_color_code 'k' 'black') / $(nvm_wrap_with_color_code 'K' 'bold black')"
|
||||
nvm_echo_with_colors " $(nvm_wrap_with_color_code 'e' 'e')/$(nvm_wrap_with_color_code 'W' 'W') = $(nvm_wrap_with_color_code 'e' 'light grey') / $(nvm_wrap_with_color_code 'W' 'white')"
|
||||
nvm_echo 'Example:'
|
||||
nvm_echo ' nvm install 8.0.0 Install a specific version number'
|
||||
nvm_echo ' nvm use 8.0 Use the latest available 8.0.x release'
|
||||
@@ -3219,6 +3255,8 @@ nvm() {
|
||||
local ALIAS
|
||||
local NVM_UPGRADE_NPM
|
||||
NVM_UPGRADE_NPM=0
|
||||
local NVM_WRITE_TO_NVMRC
|
||||
NVM_WRITE_TO_NVMRC=0
|
||||
|
||||
local PROVIDED_REINSTALL_PACKAGES_FROM
|
||||
local REINSTALL_PACKAGES_FROM
|
||||
@@ -3317,6 +3355,10 @@ nvm() {
|
||||
SKIP_DEFAULT_PACKAGES=true
|
||||
shift
|
||||
;;
|
||||
--save | -w)
|
||||
NVM_WRITE_TO_NVMRC=1
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
break # stop parsing args
|
||||
;;
|
||||
@@ -3553,6 +3595,7 @@ nvm() {
|
||||
else
|
||||
EXIT_CODE=$?
|
||||
fi
|
||||
|
||||
return $EXIT_CODE
|
||||
;;
|
||||
"uninstall")
|
||||
@@ -3704,6 +3747,7 @@ nvm() {
|
||||
--) ;;
|
||||
--lts) NVM_LTS='*' ;;
|
||||
--lts=*) NVM_LTS="${1##--lts=}" ;;
|
||||
--save | -w) NVM_WRITE_TO_NVMRC=1 ;;
|
||||
--*) ;;
|
||||
*)
|
||||
if [ -n "${1-}" ]; then
|
||||
@@ -3737,6 +3781,10 @@ nvm() {
|
||||
return 127
|
||||
fi
|
||||
|
||||
if [ "${NVM_WRITE_TO_NVMRC:-0}" -eq 1 ]; then
|
||||
nvm_write_nvmrc "$VERSION"
|
||||
fi
|
||||
|
||||
if [ "_${VERSION}" = '_system' ]; then
|
||||
if nvm_has_system_node && nvm deactivate "${NVM_SILENT_ARG-}" >/dev/null 2>&1; then
|
||||
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
||||
@@ -4357,11 +4405,12 @@ nvm() {
|
||||
nvm_sanitize_path nvm_has_colors nvm_process_parameters \
|
||||
nvm_node_version_has_solaris_binary nvm_iojs_version_has_solaris_binary \
|
||||
nvm_curl_libz_support nvm_command_info nvm_is_zsh nvm_stdout_is_terminal \
|
||||
nvm_npmrc_bad_news_bears \
|
||||
nvm_npmrc_bad_news_bears nvm_sanitize_auth_header \
|
||||
nvm_get_colors nvm_set_colors nvm_print_color_code nvm_wrap_with_color_code nvm_format_help_message_colors \
|
||||
nvm_echo_with_colors nvm_err_with_colors \
|
||||
nvm_get_artifact_compression nvm_install_binary_extract nvm_extract_tarball \
|
||||
nvm_process_nvmrc nvm_nvmrc_invalid_msg \
|
||||
nvm_write_nvmrc \
|
||||
>/dev/null 2>&1
|
||||
unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
|
||||
NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \
|
||||
@@ -4387,37 +4436,23 @@ nvm() {
|
||||
}
|
||||
|
||||
nvm_get_default_packages() {
|
||||
local NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages"
|
||||
local NVM_DEFAULT_PACKAGE_FILE
|
||||
NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages"
|
||||
if [ -f "${NVM_DEFAULT_PACKAGE_FILE}" ]; then
|
||||
local DEFAULT_PACKAGES
|
||||
DEFAULT_PACKAGES=''
|
||||
|
||||
# Read lines from $NVM_DIR/default-packages
|
||||
local line
|
||||
# ensure a trailing newline
|
||||
WORK=$(mktemp -d) || exit $?
|
||||
# shellcheck disable=SC2064
|
||||
trap "command rm -rf '$WORK'" EXIT
|
||||
# shellcheck disable=SC1003
|
||||
sed -e '$a\' "${NVM_DEFAULT_PACKAGE_FILE}" > "${WORK}/default-packages"
|
||||
while IFS=' ' read -r line; do
|
||||
# Skip empty lines.
|
||||
[ -n "${line-}" ] || continue
|
||||
|
||||
# Skip comment lines that begin with `#`.
|
||||
[ "$(nvm_echo "${line}" | command cut -c1)" != "#" ] || continue
|
||||
|
||||
# Fail on lines that have multiple space-separated words
|
||||
case $line in
|
||||
*\ *)
|
||||
nvm_err "Only one package per line is allowed in the ${NVM_DIR}/default-packages file. Please remove any lines with multiple space-separated values."
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} "
|
||||
done < "${WORK}/default-packages"
|
||||
echo "${DEFAULT_PACKAGES}" | command xargs
|
||||
command awk -v filename="${NVM_DEFAULT_PACKAGE_FILE}" '
|
||||
/^[[:space:]]*#/ { next } # Skip lines that begin with #
|
||||
/^[[:space:]]*$/ { next } # Skip empty lines
|
||||
/[[:space:]]/ && !/^[[:space:]]*#/ {
|
||||
print "Only one package per line is allowed in `" filename "`. Please remove any lines with multiple space-separated values." > "/dev/stderr"
|
||||
err = 1
|
||||
exit 1
|
||||
}
|
||||
{
|
||||
if (NR > 1 && !prev_space) printf " "
|
||||
printf "%s", $0
|
||||
prev_space = 0
|
||||
}
|
||||
' "${NVM_DEFAULT_PACKAGE_FILE}"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -4498,7 +4533,7 @@ nvm_auto() {
|
||||
local NVM_CURRENT
|
||||
if [ "_${NVM_MODE}" = '_install' ]; then
|
||||
VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)"
|
||||
if [ -n "${VERSION}" ]; then
|
||||
if [ -n "${VERSION}" ] && ! [ "_${VERSION}" = '_N/A' ] && nvm_is_valid_version "${VERSION}"; then
|
||||
nvm install "${VERSION}" >/dev/null
|
||||
elif nvm_rc_version >/dev/null 2>&1; then
|
||||
nvm install >/dev/null
|
||||
@@ -4507,7 +4542,7 @@ nvm_auto() {
|
||||
NVM_CURRENT="$(nvm_ls_current)"
|
||||
if [ "_${NVM_CURRENT}" = '_none' ] || [ "_${NVM_CURRENT}" = '_system' ]; then
|
||||
VERSION="$(nvm_resolve_local_alias default 2>/dev/null || nvm_echo)"
|
||||
if [ -n "${VERSION}" ]; then
|
||||
if [ -n "${VERSION}" ] && ! [ "_${VERSION}" = '_N/A' ] && nvm_is_valid_version "${VERSION}"; then
|
||||
nvm use --silent "${VERSION}" >/dev/null
|
||||
elif nvm_rc_version >/dev/null 2>&1; then
|
||||
nvm use --silent >/dev/null
|
||||
|
||||
229
test/common.sh
229
test/common.sh
@@ -102,104 +102,151 @@ watch() {
|
||||
return $EXIT_CODE
|
||||
}
|
||||
|
||||
parse_json() {
|
||||
local json
|
||||
json="$1"
|
||||
local key
|
||||
key=""
|
||||
local value
|
||||
value=""
|
||||
local output
|
||||
output=""
|
||||
local in_key
|
||||
in_key=0
|
||||
local in_value
|
||||
in_value=0
|
||||
local in_string
|
||||
in_string=0
|
||||
local escaped
|
||||
escaped=0
|
||||
local buffer
|
||||
buffer=""
|
||||
local char
|
||||
local len
|
||||
len=${#json}
|
||||
local arr_index
|
||||
arr_index=0
|
||||
local in_array
|
||||
in_array=0
|
||||
|
||||
for ((i = 0; i < len; i++)); do
|
||||
char="${json:i:1}"
|
||||
# JSON parsing from https://gist.github.com/assaf/ee377a186371e2e269a7
|
||||
nvm_json_throw() {
|
||||
nvm_err "$*"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ "$in_string" -eq 1 ]; then
|
||||
if [ "$escaped" -eq 1 ]; then
|
||||
buffer="$buffer$char"
|
||||
escaped=0
|
||||
elif [ "$char" = "\\" ]; then
|
||||
escaped=1
|
||||
elif [ "$char" = "\"" ]; then
|
||||
in_string=0
|
||||
if [ "$in_key" -eq 1 ]; then
|
||||
key="$buffer"
|
||||
buffer=""
|
||||
in_key=0
|
||||
elif [ "$in_value" -eq 1 ]; then
|
||||
value="$buffer"
|
||||
buffer=""
|
||||
output="$output$key=\"$value\"\n"
|
||||
in_value=0
|
||||
elif [ "$in_array" -eq 1 ]; then
|
||||
value="$buffer"
|
||||
buffer=""
|
||||
output="$output$arr_index=\"$value\"\n"
|
||||
arr_index=$((arr_index + 1))
|
||||
fi
|
||||
else
|
||||
buffer="$buffer$char"
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
nvm_json_awk_egrep() {
|
||||
local pattern_string
|
||||
pattern_string="${1}"
|
||||
|
||||
case "$char" in
|
||||
"\"")
|
||||
in_string=1
|
||||
buffer=""
|
||||
if [ "$in_value" -eq 0 ] && [ "$in_array" -eq 0 ]; then
|
||||
in_key=1
|
||||
fi
|
||||
;;
|
||||
":")
|
||||
in_value=1
|
||||
;;
|
||||
",")
|
||||
if [ "$in_value" -eq 1 ]; then
|
||||
in_value=0
|
||||
fi
|
||||
;;
|
||||
"[")
|
||||
in_array=1
|
||||
;;
|
||||
"]")
|
||||
in_array=0
|
||||
;;
|
||||
"{" | "}")
|
||||
;;
|
||||
awk '{
|
||||
while ($0) {
|
||||
start=match($0, pattern);
|
||||
token=substr($0, start, RLENGTH);
|
||||
print token;
|
||||
$0=substr($0, start+RLENGTH);
|
||||
}
|
||||
}' "pattern=${pattern_string}"
|
||||
}
|
||||
|
||||
nvm_json_tokenize() {
|
||||
local GREP
|
||||
GREP='grep -Eao'
|
||||
|
||||
local ESCAPE
|
||||
local CHAR
|
||||
|
||||
# if echo "test string" | grep -Eo "test" > /dev/null 2>&1; then
|
||||
# ESCAPE='(\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})'
|
||||
# CHAR='[^[:cntrl:]"\\]'
|
||||
# else
|
||||
GREP=nvm_json_awk_egrep
|
||||
ESCAPE='(\\\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})'
|
||||
CHAR='[^[:cntrl:]"\\\\]'
|
||||
# fi
|
||||
|
||||
local STRING
|
||||
STRING="\"${CHAR}*(${ESCAPE}${CHAR}*)*\""
|
||||
local NUMBER
|
||||
NUMBER='-?(0|[1-9][0-9]*)([.][0-9]*)?([eE][+-]?[0-9]*)?'
|
||||
local KEYWORD
|
||||
KEYWORD='null|false|true'
|
||||
local SPACE
|
||||
SPACE='[[:space:]]+'
|
||||
|
||||
$GREP "${STRING}|${NUMBER}|${KEYWORD}|${SPACE}|." | TERM=dumb grep -Ev "^${SPACE}$"
|
||||
}
|
||||
|
||||
_json_parse_array() {
|
||||
local index=0
|
||||
local ary=''
|
||||
read -r token
|
||||
case "$token" in
|
||||
']') ;;
|
||||
*)
|
||||
if [ "$in_value" -eq 1 ] && [ "$char" != " " ] && [ "$char" != "\n" ] && [ "$char" != "\t" ]; then
|
||||
buffer="$buffer$char"
|
||||
fi
|
||||
while :; do
|
||||
_json_parse_value "${1}" "${index}"
|
||||
index=$((index+1))
|
||||
ary="${ary}${value}"
|
||||
read -r token
|
||||
case "${token}" in
|
||||
']') break ;;
|
||||
',') ary="${ary}," ;;
|
||||
*) nvm_json_throw "EXPECTED , or ] GOT ${token:-EOF}" ;;
|
||||
esac
|
||||
read -r token
|
||||
done
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
printf "%b" "$output"
|
||||
:
|
||||
}
|
||||
|
||||
extract_value() {
|
||||
_json_parse_object() {
|
||||
local key
|
||||
key="$1"
|
||||
local parsed
|
||||
parsed="$2"
|
||||
echo "$parsed" | grep "^$key=" | cut -d'=' -f2 | tr -d '"'
|
||||
local obj=''
|
||||
read -r token
|
||||
case "$token" in
|
||||
'}') ;;
|
||||
*)
|
||||
while :; do
|
||||
case "${token}" in
|
||||
'"'*'"') key="${token}" ;;
|
||||
*) nvm_json_throw "EXPECTED string GOT ${token:-EOF}" ;;
|
||||
esac
|
||||
read -r token
|
||||
case "${token}" in
|
||||
':') ;;
|
||||
*) nvm_json_throw "EXPECTED : GOT ${token:-EOF}" ;;
|
||||
esac
|
||||
read -r token
|
||||
_json_parse_value "${1}" "${key}"
|
||||
obj="${obj}${key}:${value}"
|
||||
read -r token
|
||||
case "${token}" in
|
||||
'}') break ;;
|
||||
',') obj="${obj}," ;;
|
||||
*) nvm_json_throw "EXPECTED , or } GOT ${token:-EOF}" ;;
|
||||
esac
|
||||
read -r token
|
||||
done
|
||||
;;
|
||||
esac
|
||||
:
|
||||
}
|
||||
|
||||
_json_parse_value() {
|
||||
local jpath="${1:+$1,}$2"
|
||||
local isleaf=0
|
||||
local isempty=0
|
||||
local print=0
|
||||
|
||||
case "$token" in
|
||||
'{') _json_parse_object "${jpath}" ;;
|
||||
'[') _json_parse_array "${jpath}" ;;
|
||||
# At this point, the only valid single-character tokens are digits.
|
||||
''|[!0-9]) nvm_json_throw "EXPECTED value GOT >${token:-EOF}<" ;;
|
||||
*)
|
||||
value=$token
|
||||
isleaf=1
|
||||
[ "${value}" = '""' ] && isempty=1
|
||||
;;
|
||||
esac
|
||||
|
||||
[ "${value}" = '' ] && return
|
||||
[ "${isleaf}" -eq 1 ] && [ $isempty -eq 0 ] && print=1
|
||||
[ "${print}" -eq 1 ] && printf "[%s]\t%s\n" "${jpath}" "${value}"
|
||||
:
|
||||
}
|
||||
|
||||
_json_parse() {
|
||||
read -r token
|
||||
_json_parse_value
|
||||
read -r token
|
||||
case "${token}" in
|
||||
'') ;;
|
||||
*) nvm_json_throw "EXPECTED EOF GOT >${token}<" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
nvm_json_extract() {
|
||||
nvm_json_tokenize | _json_parse | grep -e "${1}" | awk '{print $2 $3}'
|
||||
}
|
||||
|
||||
# ensures that commands are run as if in a terminal
|
||||
run_in_terminal() {
|
||||
script -q -a /dev/null sh -c "\. ../nvm.sh ; $*"
|
||||
}
|
||||
|
||||
@@ -5,20 +5,20 @@
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
if [ -n "$ZSH_VERSION" ]; then
|
||||
if [ -n "${ZSH_VERSION}" ]; then
|
||||
# set clobber option in order to test that this does not produce any
|
||||
# incompatibilities
|
||||
setopt noclobber
|
||||
fi
|
||||
|
||||
nvm alias test-stable-1 0.0.2 || die '`nvm alias test-stable-1 0.0.2` failed'
|
||||
nvm alias test-stable-1 0.0.2 || die "\`nvm alias test-stable-1 0.0.2\` failed"
|
||||
|
||||
OUTPUT="$(nvm alias test-stable-1 | strip_colors)"
|
||||
OUTPUT="$(run_in_terminal nvm alias test-stable-1 | strip_colors)"
|
||||
EXPECTED_OUTPUT='test-stable-1 -> 0.0.2 (-> v0.0.2)'
|
||||
echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.2 did not set test-stable-1 to 0.0.2: got '$OUTPUT'"
|
||||
echo "${OUTPUT}" | \grep -F "${EXPECTED_OUTPUT}" || die "nvm alias test-stable-1 0.0.2 did not set test-stable-1 to 0.0.2: got '${OUTPUT}'"
|
||||
|
||||
nvm alias test-stable-1 0.0.1 || die '`nvm alias test-stable-1 0.0.1` failed'
|
||||
nvm alias test-stable-1 0.0.1 || die "\`nvm alias test-stable-1 0.0.1\` failed"
|
||||
|
||||
OUTPUT="$(nvm alias test-stable-1 | strip_colors)"
|
||||
OUTPUT="$(run_in_terminal nvm alias test-stable-1 | strip_colors)"
|
||||
EXPECTED_OUTPUT='test-stable-1 -> 0.0.1 (-> v0.0.1)'
|
||||
echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.1 did not set test-stable-1 to 0.0.1: got '$OUTPUT'"
|
||||
echo "$OUTPUT" | \grep -F "${EXPECTED_OUTPUT}" || die "nvm alias test-stable-1 0.0.1 did not set test-stable-1 to 0.0.1: got '${OUTPUT}'"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors)
|
||||
NVM_ALIAS_OUTPUT=$(run_in_terminal nvm alias | strip_colors)
|
||||
|
||||
EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)"
|
||||
STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")"
|
||||
|
||||
@@ -19,31 +19,31 @@ make_fake_node v0.9.1
|
||||
make_fake_iojs v0.2.1
|
||||
|
||||
EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)"
|
||||
STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")"
|
||||
STABLE_VERSION="$(nvm_version "${EXPECTED_STABLE}")"
|
||||
|
||||
EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)"
|
||||
UNSTABLE_VERSION="$(nvm_version "$EXPECTED_UNSTABLE")"
|
||||
UNSTABLE_VERSION="$(nvm_version "${EXPECTED_UNSTABLE}")"
|
||||
|
||||
[ "_$STABLE_VERSION" != "_$UNSTABLE_VERSION" ] \
|
||||
[ "_${STABLE_VERSION}" != "_${UNSTABLE_VERSION}" ] \
|
||||
|| die "stable and unstable versions are the same!"
|
||||
|
||||
nvm alias stable "$EXPECTED_UNSTABLE"
|
||||
nvm alias unstable "$EXPECTED_STABLE"
|
||||
nvm alias stable "${EXPECTED_UNSTABLE}"
|
||||
nvm alias unstable "${EXPECTED_STABLE}"
|
||||
nvm alias node stable
|
||||
nvm alias iojs unstable
|
||||
|
||||
NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors)
|
||||
NVM_ALIAS_OUTPUT=$(run_in_terminal nvm alias | strip_colors)
|
||||
|
||||
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 "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)" \
|
||||
|| die "nvm alias did not contain the overridden 'unstable' alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
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)" \
|
||||
|| die "nvm alias did not contain the overridden 'node' alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
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)" \
|
||||
|| die "nvm alias did not contain the overridden 'iojs' alias; got '$NVM_ALIAS_OUTPUT'"
|
||||
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
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
NVM_ALIAS_OUTPUT="$(nvm alias | strip_colors)"
|
||||
NVM_ALIAS_OUTPUT="$(run_in_terminal nvm alias | strip_colors)"
|
||||
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)' \
|
||||
|
||||
@@ -12,9 +12,9 @@ nvm_ensure_default_set 0.3 || die "'nvm_ensure_default_set' with an existing def
|
||||
|
||||
nvm unalias default || die "'nvm unalias default' failed"
|
||||
|
||||
OUTPUT="$(nvm_ensure_default_set 0.2)"
|
||||
OUTPUT="$(run_in_terminal nvm_ensure_default_set 0.2)"
|
||||
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'"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "'nvm_ensure_default_set 0.2' did not exit with 0, got $EXIT_CODE"
|
||||
[ "_$(echo "${OUTPUT}" | strip_colors)" = "_${EXPECTED_OUTPUT}" ] || die "'nvm_ensure_default_set 0.2' did not output '${EXPECTED_OUTPUT}', got '${OUTPUT}'"
|
||||
[ "_${EXIT_CODE}" = "_0" ] || die "'nvm_ensure_default_set 0.2' did not exit with 0, got ${EXIT_CODE}"
|
||||
|
||||
@@ -9,7 +9,7 @@ cleanup () { rm -f "${BEFORE}" "${AFTER}"; }
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
typeset -f | awk '/ \(\) $/ && !/^main / {print $1}' > "${BEFORE}"
|
||||
env | grep -v PATH= | grep -v IFS= | grep -v NVM_ | sort >> "${BEFORE}"
|
||||
env | grep -v PATH= | grep -v IFS= | grep -v NVM_ | grep -v TRAVIS_ | sort >> "${BEFORE}"
|
||||
|
||||
set +e # TODO: fix
|
||||
\. ../../nvm.sh
|
||||
@@ -20,11 +20,11 @@ type nvm > /dev/null 2>&1 || die "nvm not loaded"
|
||||
nvm unload
|
||||
|
||||
typeset -f | awk '/ \(\) $/ && !/^main / {print $1}' > "${AFTER}"
|
||||
env | grep -v PATH= | grep -v IFS= | sort >> "${AFTER}"
|
||||
env | grep -v PATH= | grep -v IFS= | grep -v TRAVIS_ | sort >> "${AFTER}"
|
||||
|
||||
! type nvm > /dev/null 2>&1 || die "nvm not unloaded"
|
||||
|
||||
DIFF="$(diff "${BEFORE}" "${AFTER}" ||:)"
|
||||
[ -z "${DIFF}" ] || die "function pollution found: ${DIFF}"
|
||||
[ -z "${DIFF}" ] || die "function pollution found: >${DIFF}<"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
cleanup () {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v* .nvmrc
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die () {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "$REMOTE"
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "$REMOTE_IOJS"
|
||||
}
|
||||
|
||||
make_fake_node "$TEST_VERSION"
|
||||
|
||||
nvm install --save "$TEST_VERSION" || die "\`nvm install --save $TEST_VERSION\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
||||
|| die "\`nvm install --save $TEST_VERSION\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
|
||||
cleanup
|
||||
@@ -0,0 +1,57 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
if [ -f ../.nvmrc ]; then mv ../.nvmrc ../.nvmrc.orig; fi
|
||||
|
||||
del_nvmrc () {
|
||||
rm -f .nvmrc ../.nvmrc
|
||||
}
|
||||
|
||||
cleanup () {
|
||||
del_nvmrc
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v*
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
if [ -f ../.nvmrc.orig ]; then mv ../.nvmrc.orig ../.nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die () {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "$REMOTE"
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "$REMOTE_IOJS"
|
||||
}
|
||||
|
||||
del_nvmrc
|
||||
make_fake_node "$TEST_VERSION"
|
||||
|
||||
(cd ..
|
||||
nvm use --save "$TEST_VERSION" || die "\`nvm use --save $TEST_VERSION\` failed in the parent dir")
|
||||
nvm use --save || die "\`nvm use --save\` failed"
|
||||
|
||||
[ -f ../.nvmrc ] && [ -f .nvmrc ] || die "expected two .nvmrc files to be generated"
|
||||
|
||||
OUTPUT=$(cat .nvmrc)
|
||||
EXPECTED_OUTPUT="$(cat ../.nvmrc)"
|
||||
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \
|
||||
|| die "invalid \`nvm use --save \` output: expected '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
|
||||
cleanup
|
||||
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
cleanup () {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v* .nvmrc
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die () {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "$REMOTE"
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "$REMOTE_IOJS"
|
||||
}
|
||||
|
||||
make_fake_node "$TEST_VERSION"
|
||||
|
||||
OUTPUT=$(nvm use --save --silent "$TEST_VERSION" || die "\`nvm use --save --silent $TEST_VERSION\` failed")
|
||||
EXPECTED_OUTPUT=""
|
||||
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \
|
||||
|| die "\`nvm use --save --silent $TEST_VERSION\` output was not silenced to '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
|
||||
cleanup
|
||||
62
test/fast/Unit tests/Running 'nvm use -w' works as expected'
Normal file
62
test/fast/Unit tests/Running 'nvm use -w' works as expected'
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
|
||||
set -e
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
|
||||
cleanup () {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v* .nvmrc
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die () {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "$REMOTE"
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "$REMOTE_IOJS"
|
||||
}
|
||||
|
||||
make_fake_node "$TEST_VERSION"
|
||||
|
||||
# 1. install
|
||||
|
||||
nvm install -w "$TEST_VERSION" || die "\`nvm install -w $TEST_VERSION\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
||||
|| die "\`nvm install -w $TEST_VERSION\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
|
||||
#
|
||||
|
||||
unset OUTPUT
|
||||
|
||||
# 2. use
|
||||
|
||||
nvm use -w "$TEST_VERSION" || die "\`nvm use -w $TEST_VERSION\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
||||
|| die "\`nvm use -w $TEST_VERSION\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
|
||||
#
|
||||
|
||||
cleanup
|
||||
@@ -6,24 +6,26 @@ die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
unset -f nvm_download nvm_ls_remote nvm_ls_remote_iojs
|
||||
if [ -n TEMP_NVM_COLORS ]; then
|
||||
export NVM_COLORS=TEMP_NVM_COLORS
|
||||
if [ -n "${TEMP_NVM_COLORS}" ]; then
|
||||
export NVM_COLORS="${TEMP_NVM_COLORS}"
|
||||
fi
|
||||
unset TEMP_NVM_COLORS
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
if [ -n ${NVM_COLORS} ]; then
|
||||
export TEMP_NVM_COLORS=NVM_COLORS
|
||||
|
||||
if [ -n "${NVM_COLORS}" ]; then
|
||||
export TEMP_NVM_COLORS="${NVM_COLORS}"
|
||||
unset NVM_COLORS
|
||||
fi
|
||||
|
||||
nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
||||
nvm deactivate 2>/dev/null || die '1: unable to deactivate'
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
MOCKS_DIR="$PWD/mocks"
|
||||
MOCKS_DIR="${PWD}/mocks"
|
||||
|
||||
# shellcheck disable=SC2317
|
||||
nvm_download() {
|
||||
if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then
|
||||
cat "$MOCKS_DIR/nodejs.org-dist-index.tab"
|
||||
@@ -33,14 +35,14 @@ nvm_download() {
|
||||
}
|
||||
|
||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
||||
OUTPUT="$(nvm ls-remote --lts | sed 's/[ \t]*$//')"
|
||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote --lts did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
||||
OUTPUT="$(run_in_terminal nvm ls-remote --lts | sed 's/[ \t]*$//')"
|
||||
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )"
|
||||
[ "_$OUTPUT" = "_${EXPECTED_OUTPUT}" ] || die "2: nvm ls-remote --lts did not output expected sorted versions; got >${OUTPUT}< expected 1 >${EXPECTED_OUTPUT}<"
|
||||
|
||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
||||
OUTPUT="$(nvm ls-remote "lts/*" | sed 's/[ \t]*$//')"
|
||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
||||
OUTPUT="$(run_in_terminal nvm ls-remote 'lts/*' | sed 's/[ \t]*$//')"
|
||||
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )"
|
||||
[ "_$OUTPUT" = "_${EXPECTED_OUTPUT}" ] || die "3: nvm ls-remote lts/* did not output expected sorted versions; got >${OUTPUT}< expected 2 >${EXPECTED_OUTPUT}<"
|
||||
|
||||
MOCKS_DIR="$PWD/mocks"
|
||||
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
||||
@@ -48,26 +50,26 @@ LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)"
|
||||
|
||||
INDEX=1
|
||||
printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
|
||||
ACTUAL="$(nvm ls-remote "lts/-${INDEX}" | sed 's/[ \t]*$//')"
|
||||
ACTUAL="$(run_in_terminal nvm ls-remote "lts/-${INDEX}" | sed 's/[ \t]*$//')"
|
||||
MESSAGE="for lts/-${INDEX} (${LTS})"
|
||||
EXPECTED="$(nvm ls-remote "lts/${LTS}" | sed 's/[ \t]*$//')"
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "${MESSAGE}: expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
EXPECTED="$(run_in_terminal nvm ls-remote "lts/${LTS}" | sed 's/[ \t]*$//')"
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "4: ${MESSAGE}: expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
|
||||
INDEX=$(($INDEX + 1))
|
||||
done
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "$REMOTE"
|
||||
cat "${REMOTE}"
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "$REMOTE_IOJS"
|
||||
cat "${REMOTE_IOJS}"
|
||||
}
|
||||
|
||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt"
|
||||
OUTPUT="$(nvm ls-remote | sed 's/[ \t]*$//')"
|
||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm ls-remote did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
||||
OUTPUT="$(run_in_terminal nvm ls-remote | sed 's/[ \t]*$//')"
|
||||
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "5: bare nvm ls-remote did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
cleanup () {
|
||||
unset -f die cleanup
|
||||
unset -f die cleanup NVM_AUTH_HEADER
|
||||
docker stop httpbin && docker rm httpbin
|
||||
}
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
@@ -15,4 +16,13 @@ nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/de
|
||||
# nvm_download should fail to download wrong_install.sh
|
||||
! nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" >/dev/null || die "nvm_download should fail to download no existing file"
|
||||
|
||||
# nvm_download should pass when calling with auth header
|
||||
docker pull kennethreitz/httpbin && docker run --shell=bash -d --name httpbin -p 80:80 kennethreitz/httpbin
|
||||
sleep 1 # wait for httpbin to start
|
||||
NVM_AUTH_HEADER="Bearer test-token" nvm_download "http://127.0.0.1/bearer" > /dev/null || die 'nvm_download with auth header should send correctly'
|
||||
|
||||
# nvm_download should fail when calling without auth header
|
||||
nvm_download "http://127.0.0.1/bearer" > /dev/null && die 'nvm_download with no auth header should not send the header and should fail'
|
||||
docker stop httpbin && docker rm httpbin
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -7,9 +7,9 @@ die () { echo "$@" ; exit 1; }
|
||||
\. ../../../nvm.sh
|
||||
|
||||
EXPECTED_OUTPUT="nvm_ensure_default_set: a version is required"
|
||||
OUTPUT="$(nvm_ensure_default_set 2>&1 >/dev/null)"
|
||||
OUTPUT="$(run_in_terminal nvm_ensure_default_set 2>&1 >/dev/null | strip_colors)"
|
||||
EXIT_CODE="$?"
|
||||
[ "_$(echo "$OUTPUT" | strip_colors)" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set' did not output "$EXPECTED_OUTPUT", got "$OUTPUT""
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "'nvm_ensure_default_set' did not exit with 1, got "$EXIT_CODE""
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "'nvm_ensure_default_set' did not output >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "'nvm_ensure_default_set' did not exit with 1, got >${EXIT_CODE}<"
|
||||
|
||||
# see test/fast/Aliases for remaining nvm_ensure_default_set tests
|
||||
|
||||
@@ -74,7 +74,7 @@ rimraf
|
||||
EOF
|
||||
|
||||
DEFAULT_PKGS="$(nvm_get_default_packages 2>&1 >/dev/null)"
|
||||
EXPECTED_PKGS="Only one package per line is allowed in the $FILE file. Please remove any lines with multiple space-separated values."
|
||||
EXPECTED_PKGS="Only one package per line is allowed in \`${FILE}\`. Please remove any lines with multiple space-separated values."
|
||||
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -8,12 +8,12 @@ cleanup() {
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
MOCKS_DIR="$PWD/mocks"
|
||||
MOCKS_DIR="${PWD}/mocks"
|
||||
|
||||
# sample output at the time the test was written
|
||||
TAB_PATH="$MOCKS_DIR/nodejs.org-dist-index.tab"
|
||||
TAB_PATH="${MOCKS_DIR}/nodejs.org-dist-index.tab"
|
||||
nvm_download() {
|
||||
cat "$TAB_PATH"
|
||||
cat "${TAB_PATH}"
|
||||
}
|
||||
|
||||
EXPECTED_OUTPUT_PATH="$MOCKS_DIR/nvm_ls_remote.txt"
|
||||
|
||||
@@ -14,7 +14,7 @@ for f in ../../../test/fixtures/nvmrc/test/fixtures/valid/*; do
|
||||
STDOUT="$(nvm_process_nvmrc $f/.nvmrc 2>/dev/null)"
|
||||
EXIT_CODE="$(nvm_process_nvmrc $f/.nvmrc >/dev/null 2>/dev/null; echo $?)"
|
||||
|
||||
EXPECTED="$(extract_value node "$(parse_json "$(cat "$f/expected.json")")")"
|
||||
EXPECTED="$(nvm_json_extract node < "${f}/expected.json" | tr -d '"')"
|
||||
|
||||
[ "${EXIT_CODE}" = "0" ] || die "$(basename "${f}"): expected exit code of 0 but got ${EXIT_CODE}"
|
||||
|
||||
@@ -26,7 +26,7 @@ for f in ../../../test/fixtures/nvmrc/test/fixtures/invalid/*; do
|
||||
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="$(parse_json "$(cat "$f/expected.json")" | sed 's/^[0-9]*="//;s/"$//')"
|
||||
EXPECTED="$(nvm_json_extract < "${f}/expected.json" | tr -d '"')"
|
||||
|
||||
[ "${EXIT_CODE}" != "0" ] || die "$(basename "${f}"): expected exit code of 'not 0' but got ${EXIT_CODE}"
|
||||
|
||||
|
||||
86
test/fast/Unit tests/nvm_write_nvmrc
Normal file
86
test/fast/Unit tests/nvm_write_nvmrc
Normal file
@@ -0,0 +1,86 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
del_nvmrc () {
|
||||
rm -f .nvmrc
|
||||
}
|
||||
|
||||
del_alias () {
|
||||
nvm unalias test >/dev/null 2>&1
|
||||
}
|
||||
|
||||
cleanup () {
|
||||
del_nvmrc
|
||||
del_alias
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v*
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die () {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "$REMOTE"
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "$REMOTE_IOJS"
|
||||
}
|
||||
|
||||
make_fake_node "$TEST_VERSION"
|
||||
|
||||
test_version () {
|
||||
del_nvmrc
|
||||
VERSION_STRING=${1-}
|
||||
make_fake_node "$VERSION_STRING"
|
||||
|
||||
nvm_write_nvmrc $VERSION_STRING || die "\`nvm_write_nvmrc ${VERSION_STRING}\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
||||
|| die "\`nvm install --save ${VERSION_STRING}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
}
|
||||
|
||||
# 1.
|
||||
|
||||
test_version "$TEST_VERSION" || die
|
||||
|
||||
# 2. with an alias
|
||||
del_alias
|
||||
nvm alias test "$TEST_VERSION"
|
||||
test_version test || die
|
||||
|
||||
# 3. fails with invalid permissions
|
||||
del_nvmrc
|
||||
touch .nvmrc
|
||||
chmod 0 .nvmrc
|
||||
nvm_write_nvmrc $TEST_VERSION 2>/dev/null && die "\`nvm_write_nvmrc $TEST_VERSION\` did not fail with invalid permissions"
|
||||
del_nvmrc
|
||||
|
||||
# 4. respects NVM_SILENT=1
|
||||
export NVM_SILENT=1
|
||||
[ "$(nvm_write_nvmrc $TEST_VERSION)" = "" ] || die "\`nvm_write_nvmrc $TEST_VERSION\` was not silenced by NVM_SILENT=1"
|
||||
unset NVM_SILENT
|
||||
|
||||
# 5. fails with an invalid version number
|
||||
TEST_VERSION="not_a_node_version"
|
||||
nvm_write_nvmrc $TEST_VERSION 2>/dev/null && die "\`nvm_write_nvmrc $TEST_VERSION\` did not fail"
|
||||
|
||||
#
|
||||
|
||||
cleanup
|
||||
Reference in New Issue
Block a user