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

Reply via email to