]> gitweb.fluxo.info Git - backupninja.git/commitdiff
Set/restore pipefail to not mess with other scripts (#3892)
authorSilvio Rhatto <rhatto@riseup.net>
Fri, 11 May 2012 00:03:37 +0000 (21:03 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Fri, 11 May 2012 00:03:37 +0000 (21:03 -0300)
handlers/rsync.in

index 73507c8db4d796ea3c848f77601bf50c26b0eece..85e1c99d56332e016c1c192db8872631b4acee87 100644 (file)
@@ -1100,6 +1100,28 @@ function end_mux {
 
 }
 
+function set_pipefail {
+
+  # Save initial pipefail status for later restoration
+  if echo "$SHELLOPTS" | grep -q ":pipefail"; then
+     pipefail="-o"
+  else
+     pipefail="+o"
+  fi
+
+  # Ensure that a non-zero rsync exit status is caught by our handler
+  set -o pipefail
+
+}
+
+function restore_pipefail {
+
+  if [ ! -z "$pipefail" ]; then
+    set $pipefail pipefail
+  fi
+
+}
+
 # the backup procedure
 
 eval_config
@@ -1109,6 +1131,7 @@ set_rsync_options
 start_mux
 stop_services
 mount_rw
+set_pipefail
 
 starttime="`date +%c%n%s`"
 echo "Starting backup at `echo $starttime | head -n 1`" >> $log
@@ -1121,9 +1144,6 @@ for SECTION in $include; do
   set_filelist
   set_dest
 
-  # Ensure that a non-zero rsync exit status is caught by our handler
-  set -o pipefail
-
   info "Syncing $SECTION on $dest_path..."
   debug $nice $rsync "${rsync_options[@]}" $filelist_flag $excludes $batch_option $orig $dest_path
   $nice $rsync "${rsync_options[@]}" $filelist_flag $excludes $batch_option $orig $dest_path | tee -a $log
@@ -1136,6 +1156,7 @@ for SECTION in $include; do
 
 done
 
+restore_pipefail
 mount_ro
 run_fsck
 start_services