[New] `install`: add `-b` flag to skip building from source

Fixes #2114.
Sladyn Nunes 2021-02-16 19:34:23 +05:30 committed by Jordan Harband
parent d9b11ba208
commit 4fdef427e4
No known key found for this signature in database
GPG Key ID: 9F6A681E35EF8B56
3 changed files with 93 additions and 1 deletions

27
nvm.sh
View File

@ -1926,6 +1926,9 @@ nvm_install_binary() {
return 3 return 3
fi fi
local nosource
nosource="${4-}"
local VERSION local VERSION
VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")" VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")"
@ -1965,6 +1968,13 @@ nvm_install_binary() {
return 0 return 0
fi fi
# Read nosource from arguments
if [ "${nosource-}" = '1' ]; then
nvm_err 'Binary download failed. Download from source aborted.'
return 0
fi
nvm_err 'Binary download failed, trying source.' nvm_err 'Binary download failed, trying source.'
if [ -n "${TMPDIR-}" ]; then if [ -n "${TMPDIR-}" ]; then
command rm -rf "${TMPDIR}" command rm -rf "${TMPDIR}"
@ -2665,6 +2675,7 @@ nvm() {
nvm_echo ' nvm install [<version>] Download and install a <version>. Uses .nvmrc if available and version is omitted.' nvm_echo ' nvm install [<version>] Download and install a <version>. Uses .nvmrc if available and version is omitted.'
nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm install`:' nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm install`:'
nvm_echo ' -s Skip binary download, install from source only.' nvm_echo ' -s Skip binary download, install from source only.'
nvm_echo ' -b Skip source download, install from binary only.'
nvm_echo ' --reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>' nvm_echo ' --reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>'
nvm_echo ' --lts When installing, only select from LTS (long-term support) versions' nvm_echo ' --lts When installing, only select from LTS (long-term support) versions'
nvm_echo ' --lts=<LTS name> When installing, only select from versions for a specific LTS line' nvm_echo ' --lts=<LTS name> When installing, only select from versions for a specific LTS line'
@ -2879,9 +2890,11 @@ nvm() {
fi fi
local nobinary local nobinary
local nosource
local noprogress local noprogress
nobinary=0 nobinary=0
noprogress=0 noprogress=0
nosource=0
local LTS local LTS
local ALIAS local ALIAS
local NVM_UPGRADE_NPM local NVM_UPGRADE_NPM
@ -2901,6 +2914,18 @@ nvm() {
-s) -s)
shift # consume "-s" shift # consume "-s"
nobinary=1 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'
return 6
fi
;;
-b)
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'
return 6
fi
;; ;;
-j) -j)
shift # consume "-j" shift # consume "-j"
@ -3165,7 +3190,7 @@ nvm() {
# skip binary install if "nobinary" option specified. # skip binary install if "nobinary" option specified.
if [ $nobinary -ne 1 ] && nvm_binary_available "${VERSION}"; then if [ $nobinary -ne 1 ] && nvm_binary_available "${VERSION}"; then
NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" nvm_install_binary "${FLAVOR}" std "${VERSION}" NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" nvm_install_binary "${FLAVOR}" std "${VERSION}" "${nosource}"
EXIT_CODE=$? EXIT_CODE=$?
fi fi
if [ $EXIT_CODE -ne 0 ]; then if [ $EXIT_CODE -ne 0 ]; then

View File

@ -0,0 +1,30 @@
#!/bin/sh
cleanup () {
nvm cache clear
nvm deactivate
rm -rf ${NVM_DIR}/v*
nvm unalias default
}
die () { echo "$@" ; cleanup; exit 1;}
\. ../../../nvm.sh
nvm_binary_available() {
return 1
}
# Unit test to check if the function errors out when the flag is set
OUTPUT="$(nvm_install_binary node std 8.0.0 1 2>&1)"
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" = "${OUTPUT}" ]; then
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
fi
# 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.'
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" != "${OUTPUT}" ]; then
die "No source binary flag is not active and should have downloaded from source. Instead it returned >${OUTPUT}<"
fi

View File

@ -0,0 +1,37 @@
#!/bin/sh
die () { echo "$@" ; exit 1; }
\. ../../nvm.sh
nvm unalias default || die 'unable to unalias default'
NVM_TEST_VERSION=v0.10.7
# Remove the stuff we're clobbering.
[ -e ../../$NVM_TEST_VERSION ] && rm -R ../../$NVM_TEST_VERSION
# Install from binary
nvm install -b $NVM_TEST_VERSION || die "install $NVM_TEST_VERSION failed"
# Check
[ -d ../../$NVM_TEST_VERSION ]
nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || die "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed"
# ensure default is set
NVM_CURRENT_DEFAULT="$(nvm_alias default)"
[ "$NVM_CURRENT_DEFAULT" = "$NVM_TEST_VERSION" ] || die "wrong default alias: $(nvm alias)"
# Falls back to source but if -b is set fails binary download.
OUTPUT="$(nvm install -b 9.0.0 2>&1)"
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" = "${OUTPUT}" ]; then
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
fi
# Falls back to source but if -b is not set.
OUTPUT="$(nvm install 9.0.0 2>&1)"
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" != "${OUTPUT}" ]; then
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
fi