[Fix] `set -E`: Add test for `node install` on Bash with an ERR trap and `set -E`

Luke Arms 2021-12-27 16:02:25 +11:00 committed by Jordan Harband
parent fb4538b360
commit 81f0f3ec19
No known key found for this signature in database
GPG Key ID: 9F6A681E35EF8B56
2 changed files with 59 additions and 0 deletions

9
nvm.sh
View File

@ -2742,6 +2742,15 @@ nvm() {
EXIT_CODE="$?"
set -a
return "$EXIT_CODE"
elif [ -n "${BASH-}" ] && [ "${-#*E}" != "$-" ]; then
# shellcheck disable=SC3041
set +E
local EXIT_CODE
IFS="${DEFAULT_IFS}" nvm "$@"
EXIT_CODE="$?"
# shellcheck disable=SC3041
set -E
return "$EXIT_CODE"
elif [ "${IFS}" != "${DEFAULT_IFS}" ]; then
IFS="${DEFAULT_IFS}" nvm "$@"
return "$?"

View File

@ -0,0 +1,50 @@
#!/bin/sh
set -e
cleanup() {
nvm cache clear
nvm deactivate
rm -rf "${NVM_DIR}"/v*
nvm unalias default
}
die() {
echo "$@"
cleanup || true
exit 1
}
\. ../../nvm.sh
if [ -z "${BASH-}" ]; then
echo "This test only applies to Bash; skipping"
exit
fi
cleanup || true
trap 'echo "==> EXIT signal received (status: $?)"; cleanup' EXIT
# shellcheck disable=SC3047
trap 'echo "==> ERR signal received"; exit 1' ERR
# shellcheck disable=SC3041
set -E
# shellcheck disable=SC3045,SC3047
ERR_TRAP_EXPECTED="$(trap -p ERR)"
# Adding ` || die 'install failed'` implicitly disables error handling and
# prevents ERR trap execution, so for the purposes of this test, `nvm install`
# can't be part of another command or statement
nvm install node
case "$-" in
*E*)
# shellcheck disable=SC3045,SC3047
[ "$(trap -p ERR)" = "$ERR_TRAP_EXPECTED" ] ||
die "ERR trap not restored after \"nvm install $VERSION\""
;;
*)
die "errtrace not restored after \"nvm install $VERSION\""
;;
esac