]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/backup/files/default/expire-backups
Always keep the most recent backup
[chef.git] / cookbooks / backup / files / default / expire-backups
index 4e26e37118ec397cbdf4122180a625956c03bf7e..81834d43711197c1a129044b68b25f379d98ef96 100644 (file)
@@ -18,6 +18,15 @@ my $dir = shift;
 my $prefix = shift;
 my @dates;
 
+if ($prefix)
+{
+    $prefix = "${prefix}-";
+}
+else
+{
+    $prefix = "(?:.*-)?";
+}
+
 for my $day (0 .. $days - 1)
 {
     push(@dates, sprintf("%04d-%02d-%02d", Subtract_Delta_Days(Today(), $day)));
@@ -34,19 +43,23 @@ for my $month (0 .. $months - 1)
 }
 
 my $dates = join("|", @dates);
-my $match = qr/^${prefix}-\d{4}-\d{2}-\d{2}\./;
-my $keep = qr/^${prefix}-(?:${dates})\./;
+my $match = qr/^${prefix}\d{4}-\d{2}-\d{2}\./;
+my $keep = qr/^${prefix}(?:${dates})\./;
 
 opendir(DIR, "$dir") || die "Can't open ${dir}: $!";
 
-while (my $file = readdir(DIR))
-{
-#    print "Expiring $file\n" if $file =~ $match && $file !~ $keep;
-    unlink("${dir}/${file}") if $file =~ $match && $file !~ $keep;
-}
+my @files = sort(grep($match, readdir(DIR)));
 
 closedir(DIR);
 
+pop @files;
+
+for my $file (@files)
+{
+#    print "Expiring $file\n" if $file !~ $keep;
+    unlink("${dir}/${file}") if $file !~ $keep;
+}
+
 exit 0;
 
 sub Monday