From e3412e9f05193a998192f59091e4b3b6a4cf9349 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 19 Aug 2020 21:24:43 +0100 Subject: [PATCH] expire-8601: wip new version Signed-off-by: Ian Jackson --- scripts/expire-iso8601.new | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/scripts/expire-iso8601.new b/scripts/expire-iso8601.new index 25a4cd7..bcf4ec9 100755 --- a/scripts/expire-iso8601.new +++ b/scripts/expire-iso8601.new @@ -45,7 +45,7 @@ exit status: END use Carp; -use DateTime::Format::ISO8601; +use DateTime::Format::RFC3339; our @files; our $rm = 1; @@ -54,8 +54,13 @@ our $unit = 86400; our $slop; our @intervals; +sub badusage ($) { + print STDERR "bad usage: $_[0]\n$usage" or die $!; + exit 8; +} + sub scan () { - my $parser = DateTime::Format::ISO8601->new; + my $parser = DateTime::Format::RFC3339->new; foreach my $f (<[0-9]*>) { if ($f !~ m/^ \d\d\d\d - \d\d - \d\d @@ -63,9 +68,10 @@ sub scan () { (?: [-+] \d{1,2} \:? \d\d )? )? /x) { print STDERR "ignoring $f\n"; } - my $t = $parser->parse_time($f) // confess; - my $t = $t->epoch() // confess; - push @files, { F => $f, T => $t, U => [] ]; + $!=0; $?=0; my $t = `date -d '$&' +%s`; + die "date(!) failed on $&: $? $!" if $! || $?; + chomp $t or confess; + push @files, { F => $f, T => $t, U => [] }; } } @@ -87,7 +93,7 @@ sub flag ($) { my $n = $int->{Number}; my $d = $int->{Interval}; my $spec = $int->{Spec}; - my $start_age = $int->{Number+1) * $interval; + my $start_age = ($n+1) * $d; my $i = 0; # find $i, the youngest which is at least $number x $interval @@ -100,7 +106,7 @@ sub flag ($) { } for (;;) { - push $files[$i]{U}, $spec; + push @{ $files[$i]{U} }, $spec; # find $j, the closest to $i which is at least $d-slop younger my $j = $i; @@ -124,11 +130,11 @@ sub implement () { } foreach (@files) { next if @{$_->{U}}; - print "remove $_>{F}\n"; + print "remove $_->{F}\n"; if ($rm) { my $r= system 'rm', ($recurse ? ('-r') : ()), "--", $_->{F}; die "run rm: $!\n" unless defined($r) && $r >= 0; - exit 16 if $r; + exit 12 if $r; } } } @@ -158,10 +164,10 @@ $slop //= $unit * 0.1; foreach (@ARGV) { m/^(\d+)x(\d+)$/ or badusage "bad x $_"; - push @intervals, { Spec => $&, N => $1, I => $2 ]; + push @intervals, { Spec => $&, N => $1, I => $2 }; } scan(); precomp(); -foreach $int (@intervals) { flag $int } +foreach (@intervals) { flag $_ } implement(); -- 2.30.2