]> git.openstreetmap.org Git - chef.git/blob - cookbooks/backup/files/default/expire-backups
Don't escape wildcard prefixes during backup expiry
[chef.git] / cookbooks / backup / files / default / expire-backups
1 #!/usr/bin/perl
2
3 # DO NOT EDIT - This file is being maintained by Chef
4
5 use strict;
6 use warnings;
7
8 use Date::Calc qw(Today Add_Delta_Days Add_Delta_YMD Day_of_Week);
9 use Getopt::Long;
10
11 my $days = 0;
12 my $weeks = 0;
13 my $months = 0;
14
15 GetOptions("days=i" => \$days, "weeks=i" => \$weeks, "months=i" => \$months);
16
17 my $dir = shift;
18 my $prefix = shift;
19 my @dates;
20
21 if ($prefix)
22 {
23     $prefix = "\Q${prefix}-\E";
24 }
25 else
26 {
27     $prefix = "(?:.*-)?";
28 }
29
30 for my $day (0 .. $days - 1)
31 {
32     push(@dates, sprintf("%04d-%02d-%02d", Subtract_Delta_Days(Today(), $day)));
33 }
34
35 for my $week (0 .. $weeks - 1)
36 {
37     push(@dates, sprintf("%04d-%02d-%02d", Subtract_Delta_Days(Monday(), $week * 7)));
38 }
39
40 for my $month (0 .. $months - 1)
41 {
42     push(@dates, sprintf("%04d-%02d-%02d", Subtract_Delta_YMD(First_of_Month(), 0, $month, 0)));
43 }
44
45 my $dates = join("|", @dates);
46 my $match = qr/^${prefix}\d{4}-\d{2}-\d{2}\./;
47 my $keep = qr/^${prefix}(?:${dates})\./;
48
49 opendir(DIR, "$dir") || die "Can't open ${dir}: $!";
50
51 my @files = sort(grep(/$match/, readdir(DIR)));
52
53 closedir(DIR);
54
55 pop @files;
56
57 for my $file (@files)
58 {
59 #    print "Expiring $file\n" if $file !~ $keep;
60     unlink("${dir}/${file}") if $file !~ $keep;
61 }
62
63 exit 0;
64
65 sub Monday
66 {
67     my @today = Today();
68
69     return Subtract_Delta_Days(@today, Day_of_Week(@today) - 1);
70 }
71
72 sub First_of_Month
73 {
74     my($year,$month,$day) = Today();
75
76     return($year,$month,1);
77 }
78
79 sub Subtract_Delta_Days
80 {
81     my $year = shift;
82     my $month = shift;
83     my $day = shift;
84     my $days = shift;
85
86     return Add_Delta_Days($year, $month, $day, -$days);
87 }
88
89 sub Subtract_Delta_YMD
90 {
91     my $year = shift;
92     my $month = shift;
93     my $day = shift;
94     my $years = shift;
95     my $months = shift;
96     my $days = shift;
97
98     return Add_Delta_YMD($year, $month, $day, -$years, -$months, -$days);
99 }