chiark / gitweb /
expire-8601: new version seems good now
[chiark-utils.git] / scripts / expire-iso8601.new
index 169961a75d6a3cc1137ffd4caa030499d7db0274..d9e009cd2e07e1e699167ce559295c7407a34e5b 100755 (executable)
@@ -55,7 +55,7 @@ our $rm = 1;
 our $recurse = 1;
 our $unit = 86400;
 our $slop;
-our $debug;
+our $debug = 0;
 our @intervals;
 
 sub badusage ($) {
@@ -106,19 +106,19 @@ sub flag ($) {
   my ($int) = @_;
   my $n = $int->{N};
   my $d = $int->{D};
-  my $dmin = $d - $slop;
+  my $dmax = $d + $slop;
   my $spec = $int->{Spec};
-  my $start_age = ($n+1) * $d;
+  my $start_age = ($n-1) * $d - $slop;
   my $i = 0;
 
-  print DEBUG "FLAG $spec sa=$start_age dmin=$dmin\n";
+  print DEBUG "FLAG $spec sa=$start_age dmax=$dmax\n";
 
-  # find $i, the youngest which is at least $number x $interval
+  # find $i, the youngest which is at least $start_age
   for (;;) {
     print DEBUG "i #$i $files[$i]{A}\n";
     last if $files[$i]{A} >= $start_age;
     if ($i == $#files) {
-      print STDERR "insufficient for $spec\n";
+      print STDERR "insufficiently old for $spec\n";
     }
     $i++;
   }
@@ -126,16 +126,23 @@ sub flag ($) {
   for (;;) {
     push @{ $files[$i]{U} }, $spec;
 
-    # find $j, the closest to $i which is at least $d-slop younger
+    # find $j, the closest to $i, preferably no more than $dmax younger
     my $j = $i;
     for (;;) {
       $j--;
+      # at each point in this loop $j is the next candidate
       last if $j < 0;
       my $dt = $files[$i]{A} - $files[$j]{A};
       print DEBUG "j #$j $files[$j]{A} dt=$dt\n";
-      last if $dt >= $dmin;
+      last if $dt > $dmax;
     }
     last if $j < 0;
+    $j++;
+    if ($j == $i) {
+      $j--;
+      print STDERR "insufficiently dense for $spec after $files[$j]{F}\n";
+    }
+    print DEBUG "i #$j\n";
 
     $i = $j;
   }