update
authorElijah Saxon <elijah@riseup.net>
Thu, 13 Jan 2005 03:22:34 +0000 (03:22 +0000)
committerElijah Saxon <elijah@riseup.net>
Thu, 13 Jan 2005 03:22:34 +0000 (03:22 +0000)
handlers/maildir

index 2ea94ff146e8b1ae316a650aaa46edb5d8212e8a..522bf315028d6c23ba3bf3d424dd42bf66d886ab 100644 (file)
@@ -122,30 +122,32 @@ function do_remove() {
 
 function do_rotate() {
        backuproot=$destdir
-       now=`date %s`
+
+       ssh -T -o PasswordAuthentication=no $desthost -l $destuser <<EOF
+##### BEGIN REMOTE SCRIPT #####
        seconds_daily=86400
        seconds_weekly=604800
        seconds_monthly=2628000
-
-       ssh -o PasswordAuthentication=no $desthost -l $destuser <<EOF
        keepdaily=$keepdaily
        keepweekly=$keepweekly
        keepmonthly=$keepmonthly
+       now=\`date +%s\`
 
        for rottype in daily weekly monthly; do
-               seconds=\`echo seconds_\${rottype}\`
+               seconds=\$((seconds_\${rottype}))
 
                dir="$backuproot/\$rottype"
                if [ ! -d \$dir.1 ]; then
-                       echo "Warning: \$dir.1 does not exist. This backup is missing, so we are skipping the rotation."
-                       continue
+                       echo "Info: \$dir.1 does not exist. This backup is missing, so we are skipping the rotation."
+                       continue 1
                elif [ ! -f \$dir.1/created ]; then
-                       echo "Warning: \$dir.1/created does not exist. This backup may be only partially completed, so we are skipping the rotation."
-                       continue
+                       echo "Warning: \$dir.1/created does not exist. This backup may be only partially completed. Skipping rotation."
+                       continue 1
                fi
                
                # Rotate the current list of backups, if we can.
-               oldest=\`ls -d $\dir.* | sed 's/^.*\.//' | sort -n | tail -1\`
+               oldest=\`ls -d \$dir.* | sed 's/^.*\.//' | sort -n | tail -1\`
+               [ "\$oldest" == "" ] && oldest=0
                for (( i=\$oldest; i > 0; i-- )); do
                        if [ -d \$dir.\$i ]; then
                                if [ -f \$dir.\$i/rotated ]; then
@@ -154,38 +156,41 @@ function do_rotate() {
                                        rotated=0
                                fi
                                cutoff_time=\$(( now - (seconds*i) ))
-                               if [ \$rotated -gt \$cutoff_time ]; then
+                               if [ \$rotated -lt \$cutoff_time ]; then
                                        next=\$(( i + 1 ))
-                                       echo "mv \$dir.\$i \$dir.\$next"
-                                       mv \$dir.\$i \$dir.\$next
-                                       date +%c%n%s > \$dir.\$next/rotated
+                                       if [ ! -d \$dir.\$next ]; then
+                                               echo "mv \$dir.\$i \$dir.\$next"
+                                               mv \$dir.\$i \$dir.\$next
+                                               date +%c%n%s > \$dir.\$next/rotated
+                                       else
+                                               echo "Info: skipping rotation of \$dir.\$i because \$dir.\$next already exists."
+                                       fi
                                else
-                                       echo "Info: skipping rotation of \$dir.\$i because it was already rotated within the last " \$((cutoff_time/86400)) " days."
-                               fi 
+                                       echo "Info: skipping rotation of \$dir.\$i because it was rotated" \$(( (now-rotated)/86400)) "days ago ("\$(( (now-cutoff_time)/86400))" needed)."
+                               fi
                        fi
                done
        done
 
        max=\$((keepdaily+1))
-       if [ ( \$keepweekly -a -d $backuproot/daily.\$max ) -a ! -d $backuproot/weekly.1 ]; then
+       if [ \( \$keepweekly -gt 0 -a -d $backuproot/daily.\$max \) -a ! -d $backuproot/weekly.1 ]; then
                echo mv $backuproot/daily.\$max $backuproot/weekly.1
                mv $backuproot/daily.\$max $backuproot/weekly.1
                date +%c%n%s > $backuproot/weekly.1/rotated
        fi
 
        max=\$((keepweekly+1))
-       if [ ( \$keepmonthly -a -d $backuproot/weekly.\$max ) -a ! -d $backuproot/monthly.1 ]; then
+       if [ \( \$keepmonthly -gt 0 -a -d $backuproot/weekly.\$max \) -a ! -d $backuproot/monthly.1 ]; then
                echo mv $backuproot/weekly.\$max $backuproot/monthly.1
                mv $backuproot/weekly.\$max $backuproot/monthly.1
                date +%c%n%s > $backuproot/monthly.1/rotated
        fi
 
        for rottype in daily weekly monthly; do
-               max=\`echo keep\${rottype}\`
-               max=\$((max+1))
+               max=\$((keep\${rottype}+1))
                dir="$backuproot/\$rottype"
-               oldest=\`ls -d $\dir.* | sed 's/^.*\.//' | sort -n | tail -1\`
-
+               oldest=\`ls -d \$dir.* | sed 's/^.*\.//' | sort -n | tail -1\`
+               [ "\$oldest" == "" ] && oldest=0 
                # if we've rotated the last backup off the stack, remove it.
                for (( i=\$oldest; i >= \$max; i-- )); do
                        if [ -d \$dir.\$i ]; then
@@ -194,6 +199,7 @@ function do_rotate() {
                        fi
                done
        done
+####### END REMOTE SCRIPT #######
 EOF
 }