Package: backupninja Severity: wishlist Version: 0.9.5-2 Attached is a patch that adds a new "log level" which, if called by an action, causes the entire backup run to be halted. This is quite important for certain sorts of actions, such as device mounting, which must be able to stop the entire backup run if it fails to complete successfully.
I've given the patch some basic tests locally and it all seems to work like a charm, but there may be corner cases I haven't considered. - Matt
Wed Dec 12 12:18:18 EST 2007 Matt Palmer <[EMAIL PROTECTED]> * Add the ability to halt a whole backup run with a new log call, 'halt' diff -rN -u old-sol1.debian/src/backupninja.in new-sol1.debian/src/backupninja.in --- old-sol1.debian/src/backupninja.in 2007-12-12 12:39:32.353175246 +1100 +++ new-sol1.debian/src/backupninja.in 2007-12-12 12:39:32.369176278 +1100 @@ -27,9 +27,9 @@ YELLOW="\033[33;01m" PURPLE="\033[35;01m" RED="\033[31;01m" - OFF="\033[0m" CYAN="\033[36;01m" - COLORS=($BLUE $GREEN $YELLOW $RED $PURPLE) + OFF="\033[0m" + COLORS=($BLUE $GREEN $YELLOW $RED $PURPLE $CYAN) } function colorize () { @@ -40,6 +40,7 @@ [ "$typestr" == "Warning" ] && type=2 [ "$typestr" == "Error" ] && type=3 [ "$typestr" == "Fatal" ] && type=4 + [ "$typestr" == "Halt" ] && type=5 color=${COLORS[$type]} endcolor=$OFF echo -e "[EMAIL PROTECTED]" @@ -54,6 +55,7 @@ # 2 - warnings - yellow # 3 - errors - red # 4 - fatal - purple +# 5 - halt - cyan # First variable passed is the error level, all others are printed # if 1, echo out all warnings, errors, or fatal @@ -74,9 +76,10 @@ [ "$typestr" == "Warning" ] && type=2 [ "$typestr" == "Error" ] && type=3 [ "$typestr" == "Fatal" ] && type=4 + [ "$typestr" == "Halt" ] && type=5 typestr="" else - types=(Debug Info Warning Error Fatal) + types=(Debug Info Warning Error Fatal Halt) typestr="${types[$type]}: " fi @@ -118,6 +121,10 @@ printmsg 4 "$@" exit 2 } +function halt() { + printmsg 5 "$@" + exit 2 +} msgcount=0 function msg { @@ -252,19 +259,22 @@ When in debug mode, output to the console will be colored: EOF - debug=1 - debug "Debugging info (when run with -d)" - info "Informational messages (verbosity level 4)" - warning "Warnings (verbosity level 3 and up)" - error "Errors (verbosity level 2 and up)" - fatal "Fatal, halting errors (always shown)" + usecolors=yes + colorize "Debug: Debugging info (when run with -d)" + colorize "Info: Informational messages (verbosity level 4)" + colorize "Warning: Warnings (verbosity level 3 and up)" + colorize "Error: Errors (verbosity level 2 and up)" + colorize "Fatal: Errors which will halt a backup action (always shown)" + colorize "Halt: Errors bad enough to make the whole backup run stop (always shown)" + + exit 1 } ## ## this function handles the running of a backup action ## ## these globals are modified: -## fatals, errors, warnings, actions_run, errormsg +## halt, fatals, errors, warnings, actions_run, errormsg ## function process_action() { @@ -322,10 +332,15 @@ _warnings=`cat $bufferfile | grep "^Warning: " | wc -l` _errors=`cat $bufferfile | grep "^Error: " | wc -l` _fatals=`cat $bufferfile | grep "^Fatal: " | wc -l` + _halts=`cat $bufferfile | grep "^Halt: " | wc -l` - ret=`grep "\(^Warning: \|^Error: \|^Fatal: \)" $bufferfile` + ret=`grep "\(^Warning: \|^Error: \|^Fatal: \|Halt: \)" $bufferfile` rm $bufferfile - if [ $_fatals != 0 ]; then + if [ $_halts != 0 ]; then + msg "*halt* -- $file" + errormsg="$errormsg\n== halt request from $file==\n\n$ret\n" + passthru "Halt: <<<< finished action $file: FAILED" + elif [ $_fatals != 0 ]; then msg "*failed* -- $file" errormsg="$errormsg\n== fatal errors from $file ==\n\n$ret\n" passthru "Fatal: <<<< finished action $file: FAILED" @@ -342,6 +357,7 @@ info "<<<< finished action $file: SUCCESS" fi + let "halt += _halts" let "fatals += _fatals" let "errors += _errors" let "warnings += _warnings" @@ -482,6 +498,7 @@ umask 077 # these globals are set by process_action() +halt=0 fatals=0 errors=0 warnings=0 @@ -500,6 +517,7 @@ for file in $files; do [ -f "$file" ] || continue + [ "$halt" = "0" ] || continue check_perms ${file%/*} # check containing dir check_perms $file @@ -556,6 +574,9 @@ if [ $actions_run != 0 ]; then info "FINISHED: $actions_run actions run. $fatals fatal. $errors error. $warnings warning." + if [ "$halt" != "0" ]; then + info "Backup was halted prematurely. Some actions may not have run." + fi fi if [ -n "$reporthost" ]; then