|
|
@ -44,11 +44,10 @@ function is_true { |
|
|
[[ "${1:-}" == 'true' ]] |
|
|
[[ "${1:-}" == 'true' ]] |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
# FIXME: define an alias to bypass ARG evaluation when unnecessary! |
|
|
|
|
|
# example: |
|
|
|
|
|
# alias toto="bash -c \"[[ \\\$MIAOU_DEBUG == 'true' ]] && echo yes \\\$* || echo nope\"" |
|
|
|
|
|
|
|
|
# HINT: define an alias to bypass ARG evaluation when unnecessary! |
|
|
|
|
|
# example: alias toto="bash -c \"[[ \\\$MIAOU_DEBUG == 'true' ]] && echo yes \\\$* || echo nope\"" |
|
|
function miaou_debug { |
|
|
function miaou_debug { |
|
|
is_true "${MIAOU_DEBUG}" && >/dev/tty builtin echo -e "\e[90mDEBUG <==> \e[33m$*\e[0m" || true |
|
|
|
|
|
|
|
|
is_true "${MIAOU_DEBUG}" && >/dev/tty builtin echo -e "\e[90m <== DEBUG ==> \e[33m$*\e[0m" || true |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function tty_ansi { |
|
|
function tty_ansi { |
|
|
@ -73,9 +72,8 @@ function on_error { |
|
|
failure_code="${1:-200}" |
|
|
failure_code="${1:-200}" |
|
|
>/dev/tty printf '\r' # force carriage return explicitly |
|
|
>/dev/tty printf '\r' # force carriage return explicitly |
|
|
|
|
|
|
|
|
miaou_debug "on_error: $failure_code ($$ -- $BASHPID)" |
|
|
|
|
|
|
|
|
|
|
|
if [[ $$ == "$BASHPID" ]]; then |
|
|
if [[ $$ == "$BASHPID" ]]; then |
|
|
|
|
|
miaou_debug "<on_error exit=$failure_code/>" |
|
|
failure_type="COMMAND_ERROR" |
|
|
failure_type="COMMAND_ERROR" |
|
|
print_miaou_error "${BASH_SOURCE[1]}" "${BASH_LINENO[0]}" "${failure_code}" "${failure_type}" '...' |
|
|
print_miaou_error "${BASH_SOURCE[1]}" "${BASH_LINENO[0]}" "${failure_code}" "${failure_type}" '...' |
|
|
|
|
|
|
|
|
@ -91,6 +89,7 @@ function on_error { |
|
|
|
|
|
|
|
|
exit "$failure_code" |
|
|
exit "$failure_code" |
|
|
else |
|
|
else |
|
|
|
|
|
miaou_debug "<on_error pipe=$failure_code sub_pid=$BASHPID pid=$$/>" |
|
|
print_miaou_error "${BASH_SOURCE[1]}" "${BASH_LINENO[0]}" "${failure_code}" 'SUBSHELL_ERROR' |
|
|
print_miaou_error "${BASH_SOURCE[1]}" "${BASH_LINENO[0]}" "${failure_code}" 'SUBSHELL_ERROR' |
|
|
kill -PIPE $$ |
|
|
kill -PIPE $$ |
|
|
fi |
|
|
fi |
|
|
@ -122,22 +121,22 @@ function on_pipe { |
|
|
failure_code=141 |
|
|
failure_code=141 |
|
|
failure_type="PIPE_ERROR" |
|
|
failure_type="PIPE_ERROR" |
|
|
fi |
|
|
fi |
|
|
# miaou_debug on_pipe: "${failure_code}" |
|
|
|
|
|
|
|
|
miaou_debug "<on_pipe exit=$failure_code sub_pid=$BASHPID pid=$$/>" |
|
|
exit "$failure_code" |
|
|
exit "$failure_code" |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function dump_stderr { |
|
|
function dump_stderr { |
|
|
miaou_debug --stderr-- |
|
|
|
|
|
|
|
|
miaou_debug '<stderr>' |
|
|
mapfile -t tmp_error <"$MIAOU_BASH_ERROR" |
|
|
mapfile -t tmp_error <"$MIAOU_BASH_ERROR" |
|
|
tty_ansi FG_LIGHTBLUE |
|
|
tty_ansi FG_LIGHTBLUE |
|
|
for i in "${tmp_error[@]}"; do echo "$i"; done |
|
|
for i in "${tmp_error[@]}"; do echo "$i"; done |
|
|
tty_ansi RESET |
|
|
tty_ansi RESET |
|
|
miaou_debug --end of stderr-- |
|
|
|
|
|
|
|
|
miaou_debug '</stderr>' |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function dump_failure { |
|
|
function dump_failure { |
|
|
local i |
|
|
local i |
|
|
miaou_debug --tty error box-- |
|
|
|
|
|
|
|
|
miaou_debug '<error_box>' |
|
|
tty_ansi FG_MAGENTA |
|
|
tty_ansi FG_MAGENTA |
|
|
length_box=$((${#failure_type} + ${#failure_code} + (2 * 2) + 2)) |
|
|
length_box=$((${#failure_type} + ${#failure_code} + (2 * 2) + 2)) |
|
|
[[ -v failure_payload ]] && length_box=$((length_box + ${#failure_payload} + (2 * 2) + 1)) |
|
|
[[ -v failure_payload ]] && length_box=$((length_box + ${#failure_payload} + (2 * 2) + 1)) |
|
|
@ -157,11 +156,11 @@ function dump_failure { |
|
|
echo '╝' |
|
|
echo '╝' |
|
|
echo " ║" |
|
|
echo " ║" |
|
|
tty_ansi RESET |
|
|
tty_ansi RESET |
|
|
miaou_debug --end of tty error box-- |
|
|
|
|
|
|
|
|
miaou_debug '</error_box>' |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function dump_stacktrace { |
|
|
function dump_stacktrace { |
|
|
miaou_debug --stacktrace ${#error_source[@]}-- |
|
|
|
|
|
|
|
|
miaou_debug "<stacktrace count=${#error_source[@]}>" |
|
|
local i source lineno funcname |
|
|
local i source lineno funcname |
|
|
for i in "${!error_source[@]}"; do |
|
|
for i in "${!error_source[@]}"; do |
|
|
tty_ansi FG_MAGENTA |
|
|
tty_ansi FG_MAGENTA |
|
|
@ -176,7 +175,7 @@ function dump_stacktrace { |
|
|
printf " \t%s" "$funcname" |
|
|
printf " \t%s" "$funcname" |
|
|
echo |
|
|
echo |
|
|
done |
|
|
done |
|
|
miaou_debug --end of stacktrace-- |
|
|
|
|
|
|
|
|
miaou_debug '</stacktrace>' |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function on_exit { |
|
|
function on_exit { |
|
|
@ -188,7 +187,7 @@ function on_exit { |
|
|
2>&3 >/dev/tty dump_stacktrace |
|
|
2>&3 >/dev/tty dump_stacktrace |
|
|
fi |
|
|
fi |
|
|
|
|
|
|
|
|
miaou_debug "on_exit $code" |
|
|
|
|
|
|
|
|
miaou_debug "</source type=failure exit=$code pid=${BASHPID}>" |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
## main |
|
|
## main |
|
|
@ -204,8 +203,8 @@ trap 'on_error $?' ERR |
|
|
trap 'on_exit $?' EXIT |
|
|
trap 'on_exit $?' EXIT |
|
|
trap 'on_pipe' PIPE |
|
|
trap 'on_pipe' PIPE |
|
|
|
|
|
|
|
|
miaou_debug "--source from ${BASHPID}" |
|
|
|
|
|
|
|
|
miaou_debug "<source from=$BASH_ARGV0 pid=${BASHPID}>" |
|
|
exec 3>/dev/stderr |
|
|
exec 3>/dev/stderr |
|
|
# shellcheck source=/dev/null |
|
|
# shellcheck source=/dev/null |
|
|
2>"$MIAOU_BASH_ERROR" source "$BASH_ARGV0" |
|
|
2>"$MIAOU_BASH_ERROR" source "$BASH_ARGV0" |
|
|
miaou_debug '--source success' |
|
|
|
|
|
|
|
|
miaou_debug "</source type=success pid=${BASHPID}>" |