]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/expire.in
[project @ 2004-08-05 15:09:30 by cjwatson]
[debbugs.git] / scripts / expire.in
index cbc5d467ec2a7482454e42bb67352d3631f7d1b1..26cf7e5da338422a57aafe3e821af2df6f328bbf 100755 (executable)
@@ -1,87 +1,86 @@
 #!/usr/bin/perl
-# $Id: expire.in,v 1.6 2000/10/07 17:27:13 joy Exp $
+# $Id: expire.in,v 1.20 2004/01/13 18:48:22 cjwatson Exp $
 
-# Load modules and set envirnment
-require('/etc/debbugs/config');
-require('/usr/lib/debbugs/errorlib');
+# Load modules and set environment
 use File::Copy;
-$ENV{'PATH'} = '/usr/lib/debbugs:'.$ENV{'PATH'};
+$config_path = '/etc/debbugs';
+$lib_path = '/usr/lib/debbugs';
+
+require("$config_path/config");
+require("$config_path/text");
+require("$lib_path/errorlib");
+$ENV{'PATH'} = $lib_path.':'.$ENV{'PATH'};
+
+# No $gRemoveAge means "never expire".
+exit 0 unless $gRemoveAge;
+
 chdir("$gSpoolDir") || die "chdir spool: $!\n";
 
 #global variables
 $debug = 0;
 defined($startdate= time) || &quit("failed to get time: $!");
 
-sub get_archivename
-{      my $bugnum = shift;
-       my $archivename = "";
-
-#      while( $bugnum > 99 ) { $bugnum = int $bugnum/10; }
-       $bugnum = $bugnum % 100;
-       $archivename = sprintf "%02d", $bugnum;
-       return $archivename;
-}
-       
 #get list of bugs (ie, status files)
-opendir(DIR,"db") || &quit("opendir db: $!\n");
-@list= grep(m/^\d+\.status$/,readdir(DIR));
-grep(s/\.status$//,@list);
-@list= sort { $a <=> $b } @list;
+opendir(DIR,"db-h") || &quit("opendir db: $!\n");
+@dirs = sort { $a <=> $b } grep(s,^,db-h/,, grep(m/^\d+$/,readdir(DIR)));
+close(DIR);
+foreach my $dir (@dirs) {
+       opendir(DIR,$dir);
+       push @list, sort { $a <=> $b } grep(s/\.summary$//,grep(m/^\d+\.summary$/,readdir(DIR)));
+       close(DIR);
+}
 
 #process each bug (ie, status file)
-while (length($ref=shift(@list))) 
-{      print STDERR "$ref considering\n" if $debug;
-    $bfound= &lockreadbugmerge($ref);
+while (length($ref=shift(@list))) {
+       print STDERR "$ref considering\n" if $debug;
+    ($bfound, $data)= &lockreadbugmerge($ref);
        print STDERR "$ref read $bfound\n" if $debug;
     $bfound || next;
-       print "$ref read ok (done $s_done)\n" if $debug;
-    (&unlockreadbugmerge($bfound), next) unless length($s_done);
+       print "$ref read ok (done $data->{done})\n" if $debug;
+    (&unlockreadbugmerge($bfound), next) unless length($data->{done});
        print "$ref read done\n" if $debug;
     @aref= ($ref);
-    if (length($s_mergedwith)) { push(@aref,split/ /,$s_mergedwith); }
+    if (length($data->{mergedwith})) { push(@aref,split / /,$data->{mergedwith}); }
        print "$ref aref @aref\n" if $debug;
     $oktoremove= 1;
-    for $mref (@aref) 
-       {       print "$ref $mref check\n" if $debug;
-        if ($mref != $ref) 
-               {       print "$ref $mref reading\n" if $debug;
-            &lockreadbug($mref) || die "huh ?";
-                       print "$ref $mref read ok\n" if $debug;
+    for $mref (@aref) {
+       print "$ref $mref check\n" if $debug;
+        if ($mref != $ref) {
+               print "$ref $mref reading\n" if $debug;
+            $newdata = &lockreadbug($mref) || die "huh $mref ?";
+               print "$ref $mref read ok\n" if $debug;
             $bfound++;
+        } else {
+            $newdata = $data;
         }
-               print "$ref $mref read/not\n" if $debug;
+       print "$ref $mref read/not\n" if $debug;
         $expectmerge= join(' ',grep($_ != $mref, sort { $a <=> $b } @aref));
-        $s_mergedwith eq $expectmerge ||
-            die "$ref -> $mref: ($s_mergedwith) vs. ($expectmerge) (@aref)";
+        $newdata->{mergedwith} eq $expectmerge ||
+            die "$ref -> $mref: ($newdata->{mergedwith}) vs. ($expectmerge) (@aref)";
                print "$ref $mref merge-ok\n" if $debug;
-        length($s_done) || die "$ref -> $mref";
+        length($newdata->{done}) || die "$ref -> $mref";
                print "$ref $mref done-ok\n" if $debug;
-        $days= -M "db/$mref.log";
+        $days= -M "db-h/".get_hashname($mref)."/$mref.log";
                print "ref $mref days $days\n" if $debug;
         if ($days <= $gRemoveAge) 
-                       { print "$ref $mref saved\n" if $debug; $oktoremove= 0;}
+               { print "$ref $mref saved\n" if $debug; $oktoremove= 0; }
     }
-    if ($oktoremove) 
-       {       print "$ref removing\n" if $debug;
-        for $mref (@aref) 
-               {       print "$ref removing $mref\n" if $debug;
-                       if ( $gSaveOldBugs )
-                       {
-                               my $dir;
-                               $dir = "archive/" . get_archivename $mref;
-                               `mkdir -p "$dir"`;
-                               copy( "db/$mref.log", "$dir/$mref.log" );
-                               copy( "db/$mref.status", "$dir/$mref.status" );
-                               copy( "db/$mref.report", "$dir/$mref.report" );
-                               if ( open( IDXFILE, ">>archive/index" ) )
-                               {       printf IDXFILE "%s %d %s\n", $s_package, $mref, $s_subject;
-                                       close IDXFILE;
-                               } else { print "Unable to write to index file\n"; }
-                               
-               print("archived $mref to $dir (from $ref)\n") || &quit("output old: $!");
-                       }
-            unlink("db/$mref.log", "db/$mref.status", "db/$mref.report");
-            print("deleted $mref (from $ref)\n") || &quit("output old: $!");
+    if ($oktoremove) {
+       print "$ref removing\n" if $debug;
+        for $mref (@aref) {
+               print "$ref removing $mref\n" if $debug;
+               my $dir = get_hashname($mref);
+               if ( $gSaveOldBugs ) {
+                       `mkdir -p "archive/$dir"`;
+                       link( "db-h/$dir/$mref.log", "archive/$dir/$mref.log" ) || copy( "db-h/$dir/$mref.log", "archive/$dir/$mref.log" );
+                       link( "db-h/$dir/$mref.status", "archive/$dir/$mref.status" ) || copy( "db-h/$dir/$mref.status", "archive/$dir/$mref.status" );
+                       link( "db-h/$dir/$mref.summary", "archive/$dir/$mref.summary" ) || copy( "db-h/$dir/$mref.summary", "archive/$dir/$mref.summary" );
+                       link( "db-h/$dir/$mref.report", "archive/$dir/$mref.report" ) || copy( "db-h/$dir/$mref.report", "archive/$dir/$mref.report" );
+                       print("archived $mref to archive/$dir (from $ref)\n") || &quit("output old: $!");
+               }
+               unlink("db-h/$dir/$mref.log", "db-h/$dir/$mref.status", "db-h/$dir/$mref.summary", "db-h/$dir/$mref.report");
+               print("deleted $mref (from $ref)\n") || &quit("output old: $!");
+               bughook_archive($mref);
         }
     }
        print "$ref unlocking $bfound\n" if $debug;