|
|
@ -4,6 +4,7 @@ |
|
|
# constants |
|
|
# constants |
|
|
|
|
|
|
|
|
MIAOU_DEBUG=${MIAOU_DEBUG:-false} |
|
|
MIAOU_DEBUG=${MIAOU_DEBUG:-false} |
|
|
|
|
|
MIAOU_ERROR_REGEX='^(.*): line ([0-9]+): miaou_error:' |
|
|
|
|
|
|
|
|
declare -A ANSI |
|
|
declare -A ANSI |
|
|
ANSI[RESET]=0 |
|
|
ANSI[RESET]=0 |
|
|
@ -36,7 +37,7 @@ ANSI[BG_WHITE]=47 |
|
|
ANSI[BG_GRAY]=90 |
|
|
ANSI[BG_GRAY]=90 |
|
|
ANSI[BG_MAGENTA]=95 |
|
|
ANSI[BG_MAGENTA]=95 |
|
|
|
|
|
|
|
|
readonly MIAOU_DEBUG ANSI |
|
|
|
|
|
|
|
|
readonly MIAOU_DEBUG MIAOU_ERROR_REGEX ANSI |
|
|
|
|
|
|
|
|
## functions |
|
|
## functions |
|
|
|
|
|
|
|
|
@ -139,8 +140,6 @@ function on_error { |
|
|
trap - RETURN |
|
|
trap - RETURN |
|
|
failure_code="${1:-200}" |
|
|
failure_code="${1:-200}" |
|
|
|
|
|
|
|
|
# >&4 printf '\r' # TODO: force carriage return explicitly, is it really useful? |
|
|
|
|
|
|
|
|
|
|
|
miaou_debug "<on_error code=${failure_code} command={${BASH_COMMAND}}>" |
|
|
miaou_debug "<on_error code=${failure_code} command={${BASH_COMMAND}}>" |
|
|
|
|
|
|
|
|
if [[ $$ == "$BASHPID" ]]; then |
|
|
if [[ $$ == "$BASHPID" ]]; then |
|
|
@ -310,7 +309,22 @@ function on_pipe { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function dump_stderr { |
|
|
function dump_stderr { |
|
|
miaou_debug "<stderr count=${#tmp_error[@]}>" |
|
|
|
|
|
|
|
|
local tmp_error_count=${#tmp_error[@]} |
|
|
|
|
|
miaou_debug "<stderr count=${tmp_error_count}>" |
|
|
|
|
|
if [[ -v MAIN_FD_MIAOU && $tmp_error_count -gt 0 && "$MAIN_FD_STDERR" == false ]]; then |
|
|
|
|
|
miaou_debug "<main_fd_miaou/>" |
|
|
|
|
|
local last_error="${tmp_error[-1]}" |
|
|
|
|
|
if [[ "$last_error" =~ $MIAOU_ERROR_REGEX ]]; then |
|
|
|
|
|
tmp_error_count=$((tmp_error_count - 1)) |
|
|
|
|
|
miaou_debug "<hide_latest_miaou_error line=${last_error} count=$tmp_error_count/>" |
|
|
|
|
|
unset 'tmp_error[-1]' |
|
|
|
|
|
if [[ $tmp_error_count == 0 ]]; then |
|
|
|
|
|
# TODO: grab last_stdout and test no carriage_return, cf: ../test/stub/tee_last_line.bash |
|
|
|
|
|
miaou_debug "<prevent_stdout_no_carriage_return />" |
|
|
|
|
|
printf "\r" |
|
|
|
|
|
fi |
|
|
|
|
|
fi |
|
|
|
|
|
fi |
|
|
tty_ansi FG_LIGHTBLUE |
|
|
tty_ansi FG_LIGHTBLUE |
|
|
for i in "${tmp_error[@]}"; do |
|
|
for i in "${tmp_error[@]}"; do |
|
|
is_true "$CHILD_PROCESS" && miaou_debug "<childerr content={$i}/>" |
|
|
is_true "$CHILD_PROCESS" && miaou_debug "<childerr content={$i}/>" |
|
|
@ -431,13 +445,12 @@ function load_tmp_error { |
|
|
miaou_debug "<tmp_error empty/>" |
|
|
miaou_debug "<tmp_error empty/>" |
|
|
else |
|
|
else |
|
|
miaou_debug "<tmp_error count=${count}>" |
|
|
miaou_debug "<tmp_error count=${count}>" |
|
|
local i miaou_error_regex last_miaou_error_index=-1 content |
|
|
|
|
|
|
|
|
local i last_miaou_error_index=-1 content |
|
|
local multiple_errors=() |
|
|
local multiple_errors=() |
|
|
miaou_error_regex='^(.*): line ([0-9]+): miaou_error:' |
|
|
|
|
|
for i in "${!tmp_error[@]}"; do |
|
|
for i in "${!tmp_error[@]}"; do |
|
|
content="${tmp_error[i]}" |
|
|
content="${tmp_error[i]}" |
|
|
# miaou_debug "<tmperr index=$i content={$content}/>" |
|
|
# miaou_debug "<tmperr index=$i content={$content}/>" |
|
|
if [[ "$content" =~ $miaou_error_regex ]]; then |
|
|
|
|
|
|
|
|
if [[ "$content" =~ $MIAOU_ERROR_REGEX ]]; then |
|
|
if [[ $last_miaou_error_index -ge 0 ]]; then |
|
|
if [[ $last_miaou_error_index -ge 0 ]]; then |
|
|
multiple_errors+=("$last_miaou_error_index") |
|
|
multiple_errors+=("$last_miaou_error_index") |
|
|
fi |
|
|
fi |
|
|
@ -623,7 +636,13 @@ if is_true "$CHILD_PROCESS"; then |
|
|
miaou_debug "<child file=$BASH_ARGV0 pid=${BASHPID} parent=${PPID}>" |
|
|
miaou_debug "<child file=$BASH_ARGV0 pid=${BASHPID} parent=${PPID}>" |
|
|
else |
|
|
else |
|
|
# the MAIN Process |
|
|
# the MAIN Process |
|
|
[[ -e /proc/$$/fd/3 ]] && exec 4>&3 3>&- || exec 4>/dev/tty # swap fd 3 4 when fd 3 sent off |
|
|
|
|
|
|
|
|
if [[ -e /proc/$$/fd/3 ]]; then |
|
|
|
|
|
exec 4>&3 3>&- # swap fd 3 4 when fd 3 sent off |
|
|
|
|
|
else |
|
|
|
|
|
MAIN_FD_MIAOU=true |
|
|
|
|
|
[[ -t 2 ]] && MAIN_FD_STDERR=false || MAIN_FD_STDERR=true |
|
|
|
|
|
exec 4>/dev/tty |
|
|
|
|
|
fi |
|
|
exec 3>/dev/stderr 2>"$MIAOU_BASH_ERROR" |
|
|
exec 3>/dev/stderr 2>"$MIAOU_BASH_ERROR" |
|
|
miaou_debug "<main file=$BASH_ARGV0 pid=${BASHPID}/>" |
|
|
miaou_debug "<main file=$BASH_ARGV0 pid=${BASHPID}/>" |
|
|
fi |
|
|
fi |
|
|
|