Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[New] nvm use/nvm install: add --save option #2869

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ test/bak
.urchin.log
.urchin_stdout
test/**/test_output
test/**/.nvmrc

node_modules/
npm-debug.log
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ test/bak
.urchin.log
.urchin_stdout
test/**/test_output
test/**/.nvmrc

node_modules/
npm-debug.log
Expand Down
36 changes: 34 additions & 2 deletions nvm.sh
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -2807,6 +2807,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
Expand Down Expand Up @@ -2912,6 +2929,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.'
Expand All @@ -2920,6 +2938,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'
Expand Down Expand Up @@ -3132,6 +3151,8 @@ nvm() {
local ALIAS
local NVM_UPGRADE_NPM
NVM_UPGRADE_NPM=0
local NVM_WRITE_TO_NVMRC
maartin0 marked this conversation as resolved.
Show resolved Hide resolved
NVM_WRITE_TO_NVMRC=0
maartin0 marked this conversation as resolved.
Show resolved Hide resolved

local PROVIDED_REINSTALL_PACKAGES_FROM
local REINSTALL_PACKAGES_FROM
Expand Down Expand Up @@ -3230,6 +3251,10 @@ nvm() {
SKIP_DEFAULT_PACKAGES=true
shift
;;
--save | -w)
NVM_WRITE_TO_NVMRC=1
shift
;;
*)
break # stop parsing args
;;
Expand Down Expand Up @@ -3466,6 +3491,7 @@ nvm() {
else
EXIT_CODE=$?
fi

return $EXIT_CODE
;;
"uninstall")
Expand Down Expand Up @@ -3617,6 +3643,7 @@ nvm() {
--) ;;
--lts) NVM_LTS='*' ;;
--lts=*) NVM_LTS="${1##--lts=}" ;;
--save | -w) NVM_WRITE_TO_NVMRC=1 ;;
--*) ;;
*)
if [ -n "${1-}" ]; then
Expand Down Expand Up @@ -3650,6 +3677,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
Expand Down Expand Up @@ -4271,6 +4302,7 @@ nvm() {
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_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 \
Expand Down Expand Up @@ -4407,7 +4439,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
Expand All @@ -4416,7 +4448,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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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 changes: 62 additions & 0 deletions test/fast/Unit tests/Running 'nvm use -w' works as expected'
Original file line number Diff line number Diff line change
@@ -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