Enhance logging system with levels and timestamps

- Add new logging functions: nvm_log, nvm_debug, nvm_info, nvm_warn, nvm_error
- Implement log levels (DEBUG, INFO, WARN, ERROR)
- Add timestamps to log messages
- Create nvm_run_command for logging command executions
- Implement nvm_time_operation for timing long-running operations
- Add nvm_log_env to log environment information
- Update nvm function to log version and environment on start
This commit is contained in:
Siddhant 2024-09-11 16:30:16 +05:30
parent da2720a429
commit 58029b1ddc

237
nvm.sh
View File

@ -13,6 +13,42 @@
# shellcheck disable=SC3028
NVM_SCRIPT_SOURCE="$_"
NVM_LOG_LEVEL=${NVM_LOG_LEVEL:-INFO}
NVM_VERSION="0.39.0" # Update this with the actual nvm version
nvm_log() {
local level=$1
shift
if [[ $NVM_LOG_LEVEL == DEBUG || ($NVM_LOG_LEVEL == INFO && $level != DEBUG) ]]; then
printf "[%s] [%s] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$level" "$*" >&2
fi
}
nvm_debug() { nvm_log DEBUG "$@"; }
nvm_info() { nvm_log INFO "$@"; }
nvm_warn() { nvm_log WARN "$@"; }
nvm_error() { nvm_log ERROR "$@"; }
nvm_run_command() {
nvm_debug "Executing: $*"
"$@"
}
nvm_time_operation() {
local start_time=$(date +%s)
"$@"
local end_time=$(date +%s)
local duration=$((end_time - start_time))
nvm_info "Operation took ${duration} seconds"
}
nvm_log_env() {
nvm_debug "Environment:"
nvm_debug " NVM_DIR: $NVM_DIR"
nvm_debug " PATH: $PATH"
nvm_debug " Shell: $SHELL"
}
nvm_is_zsh() {
[ -n "${ZSH_VERSION-}" ]
}
@ -794,7 +830,7 @@ nvm_remote_versions() {
esac
if nvm_validate_implicit_alias "${PATTERN-}" 2>/dev/null; then
nvm_err 'Implicit aliases are not supported in nvm_remote_versions.'
nvm_error 'Implicit aliases are not supported in nvm_remote_versions.'
return 1
fi
@ -886,13 +922,13 @@ nvm_normalize_lts() {
if [ "${RESULT}" != '*' ]; then
nvm_echo "lts/${RESULT}"
else
nvm_err 'That many LTS releases do not exist yet.'
nvm_error 'That many LTS releases do not exist yet.'
return 2
fi
;;
*)
if [ "${LTS}" != "$(echo "${LTS}" | command tr '[:upper:]' '[:lower:]')" ]; then
nvm_err 'LTS names must be lowercase'
nvm_error 'LTS names must be lowercase'
return 3
fi
nvm_echo "${LTS}"
@ -940,7 +976,7 @@ nvm_num_version_groups() {
nvm_strip_path() {
if [ -z "${NVM_DIR-}" ]; then
nvm_err '${NVM_DIR} not set!'
nvm_error '${NVM_DIR} not set!'
return 1
fi
command printf %s "${1-}" | command awk -v NVM_DIR="${NVM_DIR}" -v RS=: '
@ -953,10 +989,10 @@ nvm_strip_path() {
}
nvm_change_path() {
# if theres no initial path, just return the supplementary path
# if there's no initial path, just return the supplementary path
if [ -z "${1-}" ]; then
nvm_echo "${3-}${2-}"
# if the initial path doesnt contain an nvm path, prepend the supplementary
# if the initial path doesn't contain an nvm path, prepend the supplementary
# path
elif ! nvm_echo "${1-}" | nvm_grep -q "${NVM_DIR}/[^/]*${2-}" \
&& ! nvm_echo "${1-}" | nvm_grep -q "${NVM_DIR}/versions/[^/]*/[^/]*${2-}"; then
@ -1023,7 +1059,7 @@ nvm_get_colors() {
COLOR=$(nvm_echo "$SYS_COLOR" | command tr '0;' '1;')
;;
*)
nvm_err "Invalid color index, ${1-}"
nvm_error "Invalid color index, ${1-}"
return 1
;;
esac
@ -1063,7 +1099,7 @@ nvm_print_color_code() {
'e') nvm_echo '0;37m' ;;
'W') nvm_echo '1;37m' ;;
*)
nvm_err "Invalid color code: ${1-}";
nvm_error "Invalid color code: ${1-}";
return 1
;;
esac
@ -1145,13 +1181,13 @@ nvm_print_alias_path() {
local NVM_ALIAS_DIR
NVM_ALIAS_DIR="${1-}"
if [ -z "${NVM_ALIAS_DIR}" ]; then
nvm_err 'An alias dir is required.'
nvm_error 'An alias dir is required.'
return 1
fi
local ALIAS_PATH
ALIAS_PATH="${2-}"
if [ -z "${ALIAS_PATH}" ]; then
nvm_err 'An alias path is required.'
nvm_error 'An alias path is required.'
return 2
fi
local ALIAS
@ -1167,7 +1203,7 @@ nvm_print_default_alias() {
local ALIAS
ALIAS="${1-}"
if [ -z "${ALIAS}" ]; then
nvm_err 'A default alias is required.'
nvm_error 'A default alias is required.'
return 1
fi
local DEST
@ -1181,13 +1217,13 @@ nvm_make_alias() {
local ALIAS
ALIAS="${1-}"
if [ -z "${ALIAS}" ]; then
nvm_err "an alias name is required"
nvm_error "an alias name is required"
return 1
fi
local VERSION
VERSION="${2-}"
if [ -z "${VERSION}" ]; then
nvm_err "an alias target version is required"
nvm_error "an alias target version is required"
return 2
fi
nvm_echo "${VERSION}" | tee "$(nvm_alias_path)/${ALIAS}" >/dev/null
@ -1250,7 +1286,7 @@ nvm_alias() {
local ALIAS
ALIAS="${1-}"
if [ -z "${ALIAS}" ]; then
nvm_err 'An alias is required.'
nvm_error 'An alias is required.'
return 1
fi
if ! ALIAS="$(nvm_normalize_lts "${ALIAS}")"; then
@ -1264,7 +1300,7 @@ nvm_alias() {
local NVM_ALIAS_PATH
NVM_ALIAS_PATH="$(nvm_alias_path)/${ALIAS}"
if [ ! -f "${NVM_ALIAS_PATH}" ]; then
nvm_err 'Alias does not exist.'
nvm_error 'Alias does not exist.'
return 2
fi
@ -1569,7 +1605,7 @@ nvm_ls_remote_index_tab() {
local LTS
LTS="${NVM_LTS-}"
if [ "$#" -lt 3 ]; then
nvm_err 'not enough arguments'
nvm_error 'not enough arguments'
return 5
fi
@ -1591,11 +1627,11 @@ nvm_ls_remote_index_tab() {
iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;;
node-std) PREFIX='' ;;
iojs-*)
nvm_err 'unknown type of io.js release'
nvm_error 'unknown type of io.js release'
return 4
;;
*)
nvm_err 'unknown type of node.js release'
nvm_error 'unknown type of node.js release'
return 4
;;
esac
@ -1709,8 +1745,8 @@ nvm_get_checksum_binary() {
elif nvm_has_non_aliased 'sha1'; then
nvm_echo 'sha1'
else
nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.'
nvm_err 'Unaliased sha1sum or sha1 not found.'
nvm_error 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.'
nvm_error 'Unaliased sha1sum or sha1 not found.'
return 1
fi
}
@ -1736,36 +1772,36 @@ nvm_compute_checksum() {
local FILE
FILE="${1-}"
if [ -z "${FILE}" ]; then
nvm_err 'Provided file to checksum is empty.'
nvm_error 'Provided file to checksum is empty.'
return 2
elif ! [ -f "${FILE}" ]; then
nvm_err 'Provided file to checksum does not exist.'
nvm_error 'Provided file to checksum does not exist.'
return 1
fi
if nvm_has_non_aliased "sha256sum"; then
nvm_err 'Computing checksum with sha256sum'
nvm_debug 'Computing checksum with sha256sum'
command sha256sum "${FILE}" | command awk '{print $1}'
elif nvm_has_non_aliased "shasum"; then
nvm_err 'Computing checksum with shasum -a 256'
nvm_debug 'Computing checksum with shasum -a 256'
command shasum -a 256 "${FILE}" | command awk '{print $1}'
elif nvm_has_non_aliased "sha256"; then
nvm_err 'Computing checksum with sha256 -q'
nvm_debug 'Computing checksum with sha256 -q'
command sha256 -q "${FILE}" | command awk '{print $1}'
elif nvm_has_non_aliased "gsha256sum"; then
nvm_err 'Computing checksum with gsha256sum'
nvm_debug 'Computing checksum with gsha256sum'
command gsha256sum "${FILE}" | command awk '{print $1}'
elif nvm_has_non_aliased "openssl"; then
nvm_err 'Computing checksum with openssl dgst -sha256'
nvm_debug 'Computing checksum with openssl dgst -sha256'
command openssl dgst -sha256 "${FILE}" | command awk '{print $NF}'
elif nvm_has_non_aliased "bssl"; then
nvm_err 'Computing checksum with bssl sha256sum'
nvm_debug 'Computing checksum with bssl sha256sum'
command bssl sha256sum "${FILE}" | command awk '{print $1}'
elif nvm_has_non_aliased "sha1sum"; then
nvm_err 'Computing checksum with sha1sum'
nvm_debug 'Computing checksum with sha1sum'
command sha1sum "${FILE}" | command awk '{print $1}'
elif nvm_has_non_aliased "sha1"; then
nvm_err 'Computing checksum with sha1 -q'
nvm_debug 'Computing checksum with sha1 -q'
command sha1 -q "${FILE}"
fi
}
@ -1774,10 +1810,10 @@ nvm_compare_checksum() {
local FILE
FILE="${1-}"
if [ -z "${FILE}" ]; then
nvm_err 'Provided file to checksum is empty.'
nvm_error 'Provided file to checksum is empty.'
return 4
elif ! [ -f "${FILE}" ]; then
nvm_err 'Provided file to checksum does not exist.'
nvm_error 'Provided file to checksum does not exist.'
return 3
fi
@ -1787,19 +1823,19 @@ nvm_compare_checksum() {
local CHECKSUM
CHECKSUM="${2-}"
if [ -z "${CHECKSUM}" ]; then
nvm_err 'Provided checksum to compare to is empty.'
nvm_error 'Provided checksum to compare to is empty.'
return 2
fi
if [ -z "${COMPUTED_SUM}" ]; then
nvm_err "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary
nvm_err 'WARNING: Continuing *without checksum verification*'
nvm_error "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary
nvm_warn 'WARNING: Continuing *without checksum verification*'
return
elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ] && [ "${COMPUTED_SUM}" != "\\${CHECKSUM}" ]; then
nvm_err "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected."
nvm_error "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected."
return 1
fi
nvm_err 'Checksums matched!'
nvm_debug 'Checksums matched!'
}
# args: flavor, type, version, slug, compression
@ -1808,7 +1844,7 @@ nvm_get_checksum() {
case "${1-}" in
node | iojs) FLAVOR="${1}" ;;
*)
nvm_err 'supported flavors: node, iojs'
nvm_error 'supported flavors: node, iojs'
return 2
;;
esac
@ -1929,7 +1965,7 @@ nvm_validate_implicit_alias() {
return
;;
*)
nvm_err "Only implicit aliases 'stable', 'unstable', '${NVM_IOJS_PREFIX}', and '${NVM_NODE_PREFIX}' are supported."
nvm_error "Only implicit aliases 'stable', 'unstable', '${NVM_IOJS_PREFIX}', and '${NVM_NODE_PREFIX}' are supported."
return 1
;;
esac
@ -1937,7 +1973,7 @@ nvm_validate_implicit_alias() {
nvm_print_implicit_alias() {
if [ "_$1" != "_local" ] && [ "_$1" != "_remote" ]; then
nvm_err "nvm_print_implicit_alias must be specified with local or remote as the first argument."
nvm_error "nvm_print_implicit_alias must be specified with local or remote as the first argument."
return 1
fi
@ -2098,13 +2134,13 @@ nvm_get_minor_version() {
VERSION="$1"
if [ -z "${VERSION}" ]; then
nvm_err 'a version is required'
nvm_error 'a version is required'
return 1
fi
case "${VERSION}" in
v | .* | *..* | v*[!.0123456789]* | [!v]*[!.0123456789]* | [!v0123456789]* | v[!0123456789]*)
nvm_err 'invalid version number'
nvm_error 'invalid version number'
return 2
;;
esac
@ -2115,7 +2151,7 @@ nvm_get_minor_version() {
local MINOR
MINOR="$(nvm_echo "${PREFIXED_VERSION}" | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2)"
if [ -z "${MINOR}" ]; then
nvm_err 'invalid version number! (please report this)'
nvm_error 'invalid version number! (please report this)'
return 3
fi
nvm_echo "${MINOR}"
@ -2125,7 +2161,7 @@ nvm_ensure_default_set() {
local VERSION
VERSION="$1"
if [ -z "${VERSION}" ]; then
nvm_err 'nvm_ensure_default_set: a version is required'
nvm_error 'nvm_ensure_default_set: a version is required'
return 1
elif nvm_alias default >/dev/null 2>&1; then
# default already set
@ -2135,7 +2171,7 @@ nvm_ensure_default_set() {
OUTPUT="$(nvm alias default "${VERSION}")"
local EXIT_CODE
EXIT_CODE="$?"
nvm_echo "Creating default alias: ${OUTPUT}"
nvm_info "Creating default alias: ${OUTPUT}"
return $EXIT_CODE
}
@ -2150,21 +2186,21 @@ nvm_get_mirror() {
node-std) NVM_MIRROR="${NVM_NODEJS_ORG_MIRROR:-https://nodejs.org/dist}" ;;
iojs-std) NVM_MIRROR="${NVM_IOJS_ORG_MIRROR:-https://iojs.org/dist}" ;;
*)
nvm_err 'unknown type of node.js or io.js release'
nvm_error 'unknown type of node.js or io.js release'
return 1
;;
esac
case "${NVM_MIRROR}" in
*\`* | *\\* | *\'* | *\(* | *' '* )
nvm_err '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL'
nvm_error '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL'
return 2
;;
esac
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'
nvm_error '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL'
return 2
fi
@ -2174,7 +2210,7 @@ nvm_get_mirror() {
# args: os, prefixed version, version, tarball, extract directory
nvm_install_binary_extract() {
if [ "$#" -ne 5 ]; then
nvm_err 'nvm_install_binary_extract needs 5 parameters'
nvm_error 'nvm_install_binary_extract needs 5 parameters'
return 1
fi
@ -2192,7 +2228,7 @@ nvm_install_binary_extract() {
local VERSION_PATH
[ -n "${TMPDIR-}" ] && \
command mkdir -p "${TMPDIR}" && \
nvm_run_command mkdir -p "${TMPDIR}" && \
VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")" || return 1
# For Windows system (GitBash with MSYS, Cygwin)
@ -2226,7 +2262,7 @@ nvm_install_binary() {
case "${1-}" in
node | iojs) FLAVOR="${1}" ;;
*)
nvm_err 'supported flavors: node, iojs'
nvm_error 'supported flavors: node, iojs'
return 4
;;
esac
@ -2237,7 +2273,7 @@ nvm_install_binary() {
local PREFIXED_VERSION
PREFIXED_VERSION="${3-}"
if [ -z "${PREFIXED_VERSION}" ]; then
nvm_err 'A version number is required.'
nvm_error 'A version number is required.'
return 3
fi
@ -2265,18 +2301,17 @@ nvm_install_binary() {
NODE_OR_IOJS="io.js"
fi
if [ "${NVM_NO_PROGRESS-}" = "1" ]; then
# --silent, --show-error, use short option as @samrocketman mentions the compatibility issue.
PROGRESS_BAR="-sS"
else
PROGRESS_BAR="--progress-bar"
fi
nvm_echo "Downloading and installing ${NODE_OR_IOJS-} ${VERSION}..."
nvm_info "Downloading and installing ${NODE_OR_IOJS-} ${VERSION}..."
TARBALL="$(PROGRESS_BAR="${PROGRESS_BAR}" nvm_download_artifact "${FLAVOR}" binary "${TYPE-}" "${VERSION}" | command tail -1)"
if [ -f "${TARBALL}" ]; then
TMPDIR="$(dirname "${TARBALL}")/files"
fi
if nvm_install_binary_extract "${NVM_OS}" "${PREFIXED_VERSION}" "${VERSION}" "${TARBALL}" "${TMPDIR}"; then
if nvm_time_operation nvm_install_binary_extract "${NVM_OS}" "${PREFIXED_VERSION}" "${VERSION}" "${TARBALL}" "${TMPDIR}"; then
if [ -n "${ALIAS-}" ]; then
nvm alias "${ALIAS}" "${provided_version}"
fi
@ -2286,11 +2321,11 @@ nvm_install_binary() {
# Read nosource from arguments
if [ "${nosource-}" = '1' ]; then
nvm_err 'Binary download failed. Download from source aborted.'
nvm_error 'Binary download failed. Download from source aborted.'
return 0
fi
nvm_err 'Binary download failed, trying source.'
nvm_warn 'Binary download failed, trying source.'
if [ -n "${TMPDIR-}" ]; then
command rm -rf "${TMPDIR}"
fi
@ -2303,7 +2338,7 @@ nvm_get_download_slug() {
case "${1-}" in
node | iojs) FLAVOR="${1}" ;;
*)
nvm_err 'supported flavors: node, iojs'
nvm_error 'supported flavors: node, iojs'
return 1
;;
esac
@ -2312,7 +2347,7 @@ nvm_get_download_slug() {
case "${2-}" in
binary | source) KIND="${2}" ;;
*)
nvm_err 'supported kinds: binary, source'
nvm_error 'supported kinds: binary, source'
return 2
;;
esac
@ -2373,7 +2408,7 @@ nvm_download_artifact() {
case "${1-}" in
node | iojs) FLAVOR="${1}" ;;
*)
nvm_err 'supported flavors: node, iojs'
nvm_error 'supported flavors: node, iojs'
return 1
;;
esac
@ -2382,7 +2417,7 @@ nvm_download_artifact() {
case "${2-}" in
binary | source) KIND="${2}" ;;
*)
nvm_err 'supported kinds: binary, source'
nvm_error 'supported kinds: binary, source'
return 1
;;
esac
@ -2400,12 +2435,12 @@ nvm_download_artifact() {
VERSION="${4}"
if [ -z "${VERSION}" ]; then
nvm_err 'A version number is required.'
nvm_error 'A version number is required.'
return 3
fi
if [ "${KIND}" = 'binary' ] && ! nvm_binary_available "${VERSION}"; then
nvm_err "No precompiled binary available for ${VERSION}."
nvm_error "No precompiled binary available for ${VERSION}."
return
fi
@ -2425,7 +2460,7 @@ nvm_download_artifact() {
tmpdir="$(nvm_cache_dir)/src/${SLUG}"
fi
command mkdir -p "${tmpdir}/files" || (
nvm_err "creating directory ${tmpdir}/files failed"
nvm_error "creating directory ${tmpdir}/files failed"
return 3
)
@ -2440,27 +2475,27 @@ nvm_download_artifact() {
fi
if [ -r "${TARBALL}" ]; then
nvm_err "Local cache found: $(nvm_sanitize_path "${TARBALL}")"
nvm_error "Local cache found: $(nvm_sanitize_path "${TARBALL}")"
if nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" >/dev/null 2>&1; then
nvm_err "Checksums match! Using existing downloaded archive $(nvm_sanitize_path "${TARBALL}")"
nvm_info "Checksums match! Using existing downloaded archive $(nvm_sanitize_path "${TARBALL}")"
nvm_echo "${TARBALL}"
return 0
fi
nvm_compare_checksum "${TARBALL}" "${CHECKSUM}"
nvm_err "Checksum check failed!"
nvm_err "Removing the broken local cache..."
nvm_error "Checksum check failed!"
nvm_error "Removing the broken local cache..."
command rm -rf "${TARBALL}"
fi
nvm_err "Downloading ${TARBALL_URL}..."
nvm_info "Downloading ${TARBALL_URL}..."
nvm_download -L -C - "${PROGRESS_BAR}" "${TARBALL_URL}" -o "${TARBALL}" || (
command rm -rf "${TARBALL}" "${tmpdir}"
nvm_err "download from ${TARBALL_URL} failed"
nvm_error "download from ${TARBALL_URL} failed"
return 4
)
if nvm_grep '404 Not Found' "${TARBALL}" >/dev/null; then
command rm -rf "${TARBALL}" "${tmpdir}"
nvm_err "HTTP 404 at URL ${TARBALL_URL}"
nvm_error "HTTP 404 at URL ${TARBALL_URL}"
return 5
fi
@ -2475,7 +2510,7 @@ nvm_download_artifact() {
# args: nvm_os, version, tarball, tmpdir
nvm_extract_tarball() {
if [ "$#" -ne 4 ]; then
nvm_err 'nvm_extract_tarball requires exactly 4 arguments'
nvm_error 'nvm_extract_tarball requires exactly 4 arguments'
return 5
fi
@ -2521,7 +2556,7 @@ nvm_get_make_jobs() {
return
elif [ -n "${1-}" ]; then
unset NVM_MAKE_JOBS
nvm_err "$1 is invalid for number of \`make\` jobs, must be a natural number"
nvm_error "$1 is invalid for number of \`make\` jobs, must be a natural number"
fi
local NVM_OS
NVM_OS="$(nvm_get_os)"
@ -2541,8 +2576,8 @@ nvm_get_make_jobs() {
;;
esac
if ! nvm_is_natural_num "${NVM_CPU_CORES}"; then
nvm_err 'Can not determine how many core(s) are available, running in single-threaded mode.'
nvm_err 'Please report an issue on GitHub to help us make nvm run faster on your computer!'
nvm_error 'Can not determine how many core(s) are available, running in single-threaded mode.'
nvm_error 'Please report an issue on GitHub to help us make nvm run faster on your computer!'
NVM_MAKE_JOBS=1
else
nvm_echo "Detected that you have ${NVM_CPU_CORES} CPU core(s)"
@ -2562,7 +2597,7 @@ nvm_install_source() {
case "${1-}" in
node | iojs) FLAVOR="${1}" ;;
*)
nvm_err 'supported flavors: node, iojs'
nvm_error 'supported flavors: node, iojs'
return 4
;;
esac
@ -2573,7 +2608,7 @@ nvm_install_source() {
local PREFIXED_VERSION
PREFIXED_VERSION="${3-}"
if [ -z "${PREFIXED_VERSION}" ]; then
nvm_err 'A version number is required.'
nvm_error 'A version number is required.'
return 3
fi
@ -2653,7 +2688,7 @@ nvm_install_source() {
command rm -f "${VERSION_PATH}" 2>/dev/null && \
$make -j "${NVM_MAKE_JOBS}" ${MAKE_CXX-} install
); then
nvm_err "nvm: install ${VERSION} failed!"
nvm_error "nvm: install ${VERSION} failed!"
command rm -rf "${TMPDIR-}"
return 1
fi
@ -2672,10 +2707,10 @@ nvm_install_npm_if_needed() {
if ! nvm_has "npm"; then
nvm_echo 'Installing npm...'
if nvm_version_greater 0.2.0 "${VERSION}"; then
nvm_err 'npm requires node v0.2.3 or higher'
nvm_error 'npm requires node v0.2.3 or higher'
elif nvm_version_greater_than_or_equal_to "${VERSION}" 0.2.0; then
if nvm_version_greater 0.2.3 "${VERSION}"; then
nvm_err 'npm requires node v0.2.3 or higher'
nvm_error 'npm requires node v0.2.3 or higher'
else
nvm_download -L https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh
fi
@ -2734,7 +2769,7 @@ nvm_die_on_prefix() {
case "${NVM_DELETE_PREFIX}" in
0 | 1) ;;
*)
nvm_err 'First argument "delete the prefix" must be zero or one'
nvm_error 'First argument "delete the prefix" must be zero or one'
return 1
;;
esac
@ -2743,7 +2778,7 @@ nvm_die_on_prefix() {
local NVM_VERSION_DIR
NVM_VERSION_DIR="${3-}"
if [ -z "${NVM_COMMAND}" ] || [ -z "${NVM_VERSION_DIR}" ]; then
nvm_err 'Second argument "nvm command", and third argument "nvm version dir", must both be nonempty'
nvm_error 'Second argument "nvm command", and third argument "nvm version dir", must both be nonempty'
return 2
fi
@ -2752,8 +2787,8 @@ nvm_die_on_prefix() {
# however, `npm exec` in npm v7.2+ sets $PREFIX; if set, inherit it
if [ -n "${PREFIX-}" ] && [ "$(nvm_version_path "$(node -v)")" != "${PREFIX}" ]; then
nvm deactivate >/dev/null 2>&1
nvm_err "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"${PREFIX}\""
nvm_err 'Run `unset PREFIX` to unset it.'
nvm_error "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"${PREFIX}\""
nvm_error 'Run `unset PREFIX` to unset it.'
return 3
fi
@ -2776,8 +2811,8 @@ nvm_die_on_prefix() {
fi
if [ -n "${NVM_CONFIG_VALUE-}" ] && ! nvm_tree_contains_path "${NVM_DIR}" "${NVM_CONFIG_VALUE}"; then
nvm deactivate >/dev/null 2>&1
nvm_err "nvm is not compatible with the \"${NVM_NPM_CONFIG_x_PREFIX_ENV}\" environment variable: currently set to \"${NVM_CONFIG_VALUE}\""
nvm_err "Run \`unset ${NVM_NPM_CONFIG_x_PREFIX_ENV}\` to unset it."
nvm_error "nvm is not compatible with the \"${NVM_NPM_CONFIG_x_PREFIX_ENV}\" environment variable: currently set to \"${NVM_CONFIG_VALUE}\""
nvm_error "Run \`unset ${NVM_NPM_CONFIG_x_PREFIX_ENV}\` to unset it."
return 4
fi
fi
@ -2801,9 +2836,9 @@ nvm_die_on_prefix() {
npm config --loglevel=warn delete prefix --userconfig="${NVM_NPM_BUILTIN_NPMRC}"
npm config --loglevel=warn delete globalconfig --userconfig="${NVM_NPM_BUILTIN_NPMRC}"
else
nvm_err "Your builtin npmrc file ($(nvm_sanitize_path "${NVM_NPM_BUILTIN_NPMRC}"))"
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_err "Run \`${NVM_COMMAND}\` to unset it."
nvm_error "Your builtin npmrc file ($(nvm_sanitize_path "${NVM_NPM_BUILTIN_NPMRC}"))"
nvm_error 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_error "Run \`${NVM_COMMAND}\` to unset it."
return 10
fi
fi
@ -2815,9 +2850,9 @@ nvm_die_on_prefix() {
npm config --global --loglevel=warn delete prefix
npm config --global --loglevel=warn delete globalconfig
else
nvm_err "Your global npmrc file ($(nvm_sanitize_path "${NVM_NPM_GLOBAL_NPMRC}"))"
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_err "Run \`${NVM_COMMAND}\` to unset it."
nvm_error "Your global npmrc file ($(nvm_sanitize_path "${NVM_NPM_GLOBAL_NPMRC}"))"
nvm_error 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_error "Run \`${NVM_COMMAND}\` to unset it."
return 10
fi
fi
@ -2829,9 +2864,9 @@ nvm_die_on_prefix() {
npm config --loglevel=warn delete prefix --userconfig="${NVM_NPM_USER_NPMRC}"
npm config --loglevel=warn delete globalconfig --userconfig="${NVM_NPM_USER_NPMRC}"
else
nvm_err "Your users .npmrc file ($(nvm_sanitize_path "${NVM_NPM_USER_NPMRC}"))"
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_err "Run \`${NVM_COMMAND}\` to unset it."
nvm_error "Your user's .npmrc file ($(nvm_sanitize_path "${NVM_NPM_USER_NPMRC}"))"
nvm_error 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_error "Run \`${NVM_COMMAND}\` to unset it."
return 10
fi
fi
@ -2843,9 +2878,9 @@ nvm_die_on_prefix() {
npm config --loglevel=warn delete prefix
npm config --loglevel=warn delete globalconfig
else
nvm_err "Your project npmrc file ($(nvm_sanitize_path "${NVM_NPM_PROJECT_NPMRC}"))"
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_err "Run \`${NVM_COMMAND}\` to unset it."
nvm_error "Your project npmrc file ($(nvm_sanitize_path "${NVM_NPM_PROJECT_NPMRC}"))"
nvm_error 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_error "Run \`${NVM_COMMAND}\` to unset it."
return 10
fi
fi
@ -2936,7 +2971,7 @@ nvm_write_nvmrc() {
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"
nvm_error "Warning: Unable to write version number ($VERSION_STRING) to .nvmrc"
fi
return 3
}
@ -2951,13 +2986,13 @@ nvm_check_file_permissions() {
for FILE in "$1"/* "$1"/.[!.]* "$1"/..?* ; do
if [ -d "$FILE" ]; then
if [ -n "${NVM_DEBUG-}" ]; then
nvm_err "${FILE}"
nvm_error "${FILE}"
fi
if [ ! -L "${FILE}" ] && ! nvm_check_file_permissions "${FILE}"; then
return 2
fi
elif [ -e "$FILE" ] && [ ! -w "$FILE" ] && [ ! -O "$FILE" ]; then
nvm_err "file is not writable or self-owned: $(nvm_sanitize_path "$FILE")"
nvm_error "file is not writable or self-owned: $(nvm_sanitize_path "$FILE")"
return 1
fi
done