|
|
|
@ -189,6 +189,17 @@ function on_error { |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
function populate_error_arrays { |
|
|
|
|
|
|
|
local source=$1 line=$2 payload=$3 |
|
|
|
unset 'error_source[0]' 'error_lineno[0]' 'error_funcname[0]' |
|
|
|
unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' |
|
|
|
unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' |
|
|
|
error_source=("$source" "${error_source[@]}") |
|
|
|
error_lineno=("$line" "${error_lineno[@]}") |
|
|
|
error_funcname=("${error_funcname[@]}" '<main>') |
|
|
|
} |
|
|
|
|
|
|
|
function on_pipe { |
|
|
|
trap - RETURN |
|
|
|
local tmp_error regex source lineno |
|
|
|
@ -251,7 +262,7 @@ function dump_failure { |
|
|
|
echo -n '╚' |
|
|
|
for ((i = 0; i < length_box; i++)); do echo -n '═'; done |
|
|
|
echo '╝' |
|
|
|
miaou_debug '<continuation disable/>' |
|
|
|
miaou_debug '<continuation disabled/>' |
|
|
|
else |
|
|
|
echo -n '╚' |
|
|
|
for ((i = 0; i < 4; i++)); do echo -n '═'; done |
|
|
|
@ -259,7 +270,7 @@ function dump_failure { |
|
|
|
for ((i = 5; i < length_box; i++)); do echo -n '═'; done |
|
|
|
echo '╝' |
|
|
|
echo " ║" |
|
|
|
miaou_debug '<continuation enable/>' |
|
|
|
miaou_debug '<continuation enabled/>' |
|
|
|
fi |
|
|
|
tty_ansi RESET |
|
|
|
miaou_debug '</error_box>' |
|
|
|
@ -330,30 +341,39 @@ function on_exit { |
|
|
|
|
|
|
|
regex='^(.*): line ([0-9]+): (.*): unbound variable$' |
|
|
|
if [[ $failure_code -eq 1 ]] && [[ "$last_error" =~ $regex ]]; then |
|
|
|
local source line payload |
|
|
|
failure_type='UNBOUND_VARIABLE' |
|
|
|
failure_payload="${BASH_REMATCH[3]}" |
|
|
|
failure_code=2 |
|
|
|
|
|
|
|
source="${BASH_REMATCH[1]}" |
|
|
|
line="${BASH_REMATCH[2]}" |
|
|
|
payload="${BASH_REMATCH[3]}" |
|
|
|
local source="${BASH_REMATCH[1]}" line="${BASH_REMATCH[2]}" |
|
|
|
error_source=("${BASH_SOURCE[@]}") |
|
|
|
error_lineno=("${BASH_LINENO[@]}") |
|
|
|
error_funcname=("${FUNCNAME[@]}") |
|
|
|
unset 'error_source[0]' 'error_lineno[0]' 'error_funcname[0]' |
|
|
|
unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' |
|
|
|
unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' |
|
|
|
error_source=("$source" "${error_source[@]}") |
|
|
|
error_lineno=("$line" "${error_lineno[@]}") |
|
|
|
error_funcname=("${error_funcname[@]}" '<main>') |
|
|
|
|
|
|
|
failure_code=$failure_code |
|
|
|
failure_type='UNBOUND_VARIABLE' |
|
|
|
failure_payload=$payload |
|
|
|
populate_error_arrays "$source" "$line" "$failure_payload" |
|
|
|
|
|
|
|
unset 'tmp_error[-1]' |
|
|
|
add_miaou_error "${BASH_SOURCE[1]}" "${BASH_LINENO[0]}" "${failure_code}" "${failure_type}" "${failure_payload}" |
|
|
|
add_miaou_error "$source" "$line" "${failure_code}" "${failure_type}" "${failure_payload}" |
|
|
|
miaou_debug "<unbound_variable source=${source} line=${line} payload=${failure_payload}/>" |
|
|
|
else |
|
|
|
regex='^(.*): line ([0-9]+): (.*): No such file or directory$' |
|
|
|
if [[ $failure_code -eq 1 ]] && [[ "$last_error" =~ $regex ]]; then |
|
|
|
failure_type='SOURCE_NOT_FOUND' |
|
|
|
failure_payload="${BASH_REMATCH[3]}" |
|
|
|
failure_code=3 |
|
|
|
|
|
|
|
local source="${BASH_REMATCH[1]}" line="${BASH_REMATCH[2]}" |
|
|
|
error_source=("${BASH_SOURCE[@]}") |
|
|
|
error_lineno=("${BASH_LINENO[@]}") |
|
|
|
error_funcname=("${FUNCNAME[@]}") |
|
|
|
populate_error_arrays "$source" "$line" "$failure_payload" |
|
|
|
|
|
|
|
unset 'tmp_error[-1]' |
|
|
|
add_miaou_error "$source" "$line" "${failure_code}" "${failure_type}" "${failure_payload}" |
|
|
|
miaou_debug "<source_not_found source=${source} line=${line} payload=${failure_payload}/>" |
|
|
|
else |
|
|
|
failure_type='UNKNOWN ERROR' |
|
|
|
failure_payload="$BASH_COMMAND" |
|
|
|
fi |
|
|
|
fi |
|
|
|
miaou_debug "</investigate_tmp_error>" |
|
|
|
fi |
|
|
|
@ -367,7 +387,7 @@ function on_exit { |
|
|
|
fi |
|
|
|
fi |
|
|
|
if [[ $failure_code -gt 0 ]]; then |
|
|
|
miaou_debug "</on_exit failure>" |
|
|
|
miaou_debug "</on_exit code=$failure_code>" |
|
|
|
else |
|
|
|
miaou_debug "</on_exit success>" |
|
|
|
fi |
|
|
|
|