[New] support external install hook “$NVM_INSTALL_THIRD_PARTY_HOOK”.

Fixes #1207.
Jordan Harband 2016-11-03 23:42:55 -07:00
parent cadbbced20
commit 24f8ae5c46
No known key found for this signature in database
GPG Key ID: 64A196AEE0916D55
2 changed files with 86 additions and 24 deletions

28
nvm.sh
View File

@ -1567,8 +1567,6 @@ nvm_install_binary() {
local VERSION local VERSION
VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")" VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")"
local VERSION_PATH
if [ -z "$(nvm_get_os)" ]; then if [ -z "$(nvm_get_os)" ]; then
return 2 return 2
fi fi
@ -2358,6 +2356,29 @@ nvm() {
return $? return $?
fi fi
local NVM_INSTALL_SUCCESS
if [ -n "${NVM_INSTALL_THIRD_PARTY_HOOK-}" ]; then
nvm_err '** $NVM_INSTALL_THIRD_PARTY_HOOK env var set; dispatching to third-party installation method **'
local NVM_METHOD_PREFERENCE
NVM_METHOD_PREFERENCE='binary'
if [ $nobinary -eq 1 ]; then
NVM_METHOD_PREFERENCE='source'
fi
local VERSION_PATH
VERSION_PATH="$(nvm_version_path "${VERSION}")"
local EXIT_CODE
"${NVM_INSTALL_THIRD_PARTY_HOOK}" "${VERSION}" "${FLAVOR}" std "${NVM_METHOD_PREFERENCE}" "${VERSION_PATH}" || {
EXIT_CODE=$?
nvm_err '*** Third-party $NVM_INSTALL_THIRD_PARTY_HOOK env var failed to install! ***'
return $EXIT_CODE
}
if ! nvm_is_version_installed "${VERSION}"; then
nvm_err '*** Third-party $NVM_INSTALL_THIRD_PARTY_HOOK env var claimed to succeed, but failed to install! ***'
return 33
fi
NVM_INSTALL_SUCCESS=true
else
if [ "_$NVM_OS" = "_freebsd" ]; then if [ "_$NVM_OS" = "_freebsd" ]; then
# node.js and io.js do not have a FreeBSD binary # node.js and io.js do not have a FreeBSD binary
nobinary=1 nobinary=1
@ -2370,7 +2391,6 @@ nvm() {
fi fi
fi fi
local NVM_INSTALL_SUCCESS
# 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
if nvm_install_binary "${FLAVOR}" std "${VERSION}"; then if nvm_install_binary "${FLAVOR}" std "${VERSION}"; then
@ -2387,6 +2407,8 @@ nvm() {
fi fi
fi fi
fi
if [ "$NVM_INSTALL_SUCCESS" = true ] && nvm use "$VERSION"; then if [ "$NVM_INSTALL_SUCCESS" = true ] && nvm use "$VERSION"; then
nvm_ensure_default_set "$provided_version" nvm_ensure_default_set "$provided_version"
if [ ! -z "$REINSTALL_PACKAGES_FROM" ] \ if [ ! -z "$REINSTALL_PACKAGES_FROM" ] \

View File

@ -0,0 +1,40 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../nvm.sh
VERSION='v0.11.0'
VERSION_PATH="$(nvm_version_path "${VERSION}")"
succeed() {
nvm_echo "$@"
NVM_INSTALL_THIRD_PARTY_HOOK= nvm install "${VERSION}"
}
fail() {
succeed "$@"
return 11
}
! nvm_is_version_installed "${VERSION}" || nvm uninstall "${VERSION}" || die 'uninstall failed'
OUTPUT="$(NVM_INSTALL_THIRD_PARTY_HOOK=succeed nvm install "${VERSION}")"
USE_OUTPUT="$(nvm use "${VERSION}")"
EXPECTED_OUTPUT="${VERSION} node std binary ${VERSION_PATH}
${USE_OUTPUT}
${USE_OUTPUT}" # double use output is from the normal install in succeed()
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<; got >${OUTPUT}<"
! nvm_is_version_installed "${VERSION}" || nvm uninstall "${VERSION}" || die 'uninstall 2 failed'
OUTPUT="$(NVM_INSTALL_THIRD_PARTY_HOOK=fail nvm install "${VERSION}" || echo 'failed')"
USE_OUTPUT="$(nvm use "${VERSION}")"
EXPECTED_OUTPUT="${VERSION} node std binary ${VERSION_PATH}
${USE_OUTPUT}
failed"
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<; got >${OUTPUT}<"