diff --git a/bin/miaou-bash b/bin/miaou-bash index 186f1fe..003da7a 100755 --- a/bin/miaou-bash +++ b/bin/miaou-bash @@ -273,6 +273,7 @@ function uninstall { } 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]' @@ -489,62 +490,47 @@ function on_exit { load_tmp_error - if [[ -v failure_type && "$failure_type" == 'RETURN' ]]; then - last_error="${tmp_error[-1]}" - regex='^(.*): line ([0-9]+): miaou_error: RETURN [0-9]+' - if [[ "$last_error" =~ $regex ]]; then - miaou_debug "" - local source line - source="${BASH_REMATCH[1]}" - line="${BASH_REMATCH[2]}" - error_source=("$source" "${error_source[@]}") - error_lineno=("$line" "${error_lineno[@]}") - error_funcname=("$failure_payload" "${error_funcname[@]}") - else - miaou_debug "" - fi + if [[ $failure_code -gt 0 ]]; then + if [[ -v failure_type && "$failure_type" == 'RETURN' ]]; then + last_error="${tmp_error[-1]}" + regex='^(.*): line ([0-9]+): miaou_error: RETURN [0-9]+' + if [[ "$last_error" =~ $regex ]]; then + miaou_debug "" + local source line + source="${BASH_REMATCH[1]}" + line="${BASH_REMATCH[2]}" + error_source=("$source" "${error_source[@]}") + error_lineno=("$line" "${error_lineno[@]}") + error_funcname=("$failure_payload" "${error_funcname[@]}") + else + miaou_debug "" + fi - elif [[ -v failure_type && "$failure_type" == 'COMMAND_NOT_FOUND' ]]; then - unset 'tmp_error[-1]' 'tmp_error[-1]' - add_miaou_error "${BASH_SOURCE[2]}" "${BASH_LINENO[1]}" "${failure_code}" "${failure_type}" "${failure_payload}" - miaou_debug "" + elif [[ -v failure_type && "$failure_type" == 'COMMAND_NOT_FOUND' ]]; then + unset 'tmp_error[-1]' 'tmp_error[-1]' + add_miaou_error "${BASH_SOURCE[2]}" "${BASH_LINENO[1]}" "${failure_code}" "${failure_type}" "${failure_payload}" + miaou_debug "" - elif [[ -v failure_type && "$failure_type" == 'FILE_NOT_FOUND' ]]; then - unset 'tmp_error[-1]' 'tmp_error[-1]' - add_miaou_error "${BASH_SOURCE[2]}" "${BASH_LINENO[1]}" "${failure_code}" "${failure_type}" "${failure_payload}" - miaou_debug "" + elif [[ -v failure_type && "$failure_type" == 'FILE_NOT_FOUND' ]]; then + unset 'tmp_error[-1]' 'tmp_error[-1]' + add_miaou_error "${BASH_SOURCE[2]}" "${BASH_LINENO[1]}" "${failure_code}" "${failure_type}" "${failure_payload}" + miaou_debug "" - elif [[ -v failure_type && "$failure_type" == 'CHILD_ERROR' ]]; then - for ((i = 0; i < ${#extra_source[@]}; i++)); do unset 'tmp_error[-1]'; done - add_miaou_error "${BASH_SOURCE[2]}" "${BASH_LINENO[1]}" "${failure_code}" "${failure_type}" "${failure_payload}" - miaou_debug "" + elif [[ -v failure_type && "$failure_type" == 'CHILD_ERROR' ]]; then + for ((i = 0; i < ${#extra_source[@]}; i++)); do unset 'tmp_error[-1]'; done + add_miaou_error "${BASH_SOURCE[2]}" "${BASH_LINENO[1]}" "${failure_code}" "${failure_type}" "${failure_payload}" + miaou_debug "" - elif [[ ! -v failure_type ]]; then - if [[ $failure_code -gt 0 && ${#tmp_error[@]} -gt 0 ]]; then - last_error="${tmp_error[-1]}" - miaou_debug "" - - regex='^(.*): line ([0-9]+): (.*): unbound variable$' - if [[ $failure_code -eq 1 ]] && [[ "$last_error" =~ $regex ]]; then - failure_type='UNBOUND_VARIABLE' - failure_payload="${BASH_REMATCH[3]}" - failure_code=2 - - 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 "" - else - regex='^(.*): line ([0-9]+): (.*): No such file or directory$' + elif [[ ! -v failure_type ]]; then + if [[ ${#tmp_error[@]} -gt 0 ]]; then + last_error="${tmp_error[-1]}" + miaou_debug "" + + regex='^(.*): line ([0-9]+): (.*): unbound variable$' if [[ $failure_code -eq 1 ]] && [[ "$last_error" =~ $regex ]]; then - failure_type='SOURCE_NOT_FOUND' + failure_type='UNBOUND_VARIABLE' failure_payload="${BASH_REMATCH[3]}" - failure_code=3 + failure_code=2 local source="${BASH_REMATCH[1]}" line="${BASH_REMATCH[2]}" error_source=("${BASH_SOURCE[@]}") @@ -554,16 +540,33 @@ function on_exit { unset 'tmp_error[-1]' add_miaou_error "$source" "$line" "${failure_code}" "${failure_type}" "${failure_payload}" - miaou_debug "" + miaou_debug "" else - failure_type='UNKNOWN ERROR' - failure_payload="$BASH_COMMAND" + 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 "" + else + failure_type='UNKNOWN ERROR' + failure_payload="$BASH_COMMAND" + fi fi + miaou_debug "" fi - miaou_debug "" fi fi - + miaou_debug '' if ! is_true $CHILD_PROCESS; then 2>&3 >&3 dump_stderr if [[ -v failure_type && $failure_code -gt 0 ]]; then @@ -575,6 +578,7 @@ function on_exit { elif [[ -v failure_type ]]; then 2>&3 >&4 save_err_trace_to_main fi + miaou_debug '' if [[ $failure_code -gt 0 ]]; then miaou_debug ""