[Fix] use command to bypass curl/wget shell functions and aliases

zsh (and interactive bash with `expand_aliases`) bakes a preexisting `curl` alias into nvm's function bodies at source time,
and shell functions named `curl`/`wget` shadow the binaries at call time - either one breaks downloads.
Prefixing invocations with `command` bypasses both: here, `nvm_download`'s dispatch, `nvm_curl_version`, `nvm_curl_libz_support`, and the wget branch of `nvm_get_latest`;
the remaining bare `curl` invocations in `nvm_get_latest` and the install script are prefixed in a followup commit.

The tests that previously mocked curl/wget as shell functions now install fake executables on PATH instead,
via a shared `make_fake_curl` helper in `test/common.sh`,
and a new test asserts the bypass.

Refs #2923
This commit is contained in:
Jordan Harband
2026-07-08 13:02:41 -07:00
parent cb0e0ba8ed
commit 04fef13bdc
9 changed files with 172 additions and 68 deletions
+13 -7
View File
@@ -1,19 +1,25 @@
#!/bin/sh
WORK="$PWD/nvm_curl_version-work.$$"
TEST_BIN="$WORK/bin"
cleanup () {
unset -f die
unset -f curl
unset -f die cleanup assert_version_is
rm -rf "$WORK"
export PATH="$OLDPATH"
}
die () { echo -e "$@" ; cleanup ; exit 1; }
NVM_ENV=testing \. ../../../nvm.sh
curl() {
if [ "$1" = "-V" ]; then
echo "${VERSION_MESSAGE}"
fi
}
\. ../../common.sh
OLDPATH="$PATH"
make_fake_curl "$TEST_BIN"
export PATH="$TEST_BIN:$OLDPATH"
assert_version_is() {
if [ "${1}" != "${2}" ]; then