]> git.treefish.org Git - fex.git/blobdiff - bin/fex_cleanup
Original release 20160919
[fex.git] / bin / fex_cleanup
index 2dabc00b24685e48eea69c711b5252a3cd125702..1f38d6b42b5bc975b692e76d026a09afacf8779b 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w 
+#!/usr/bin/perl -w
 
 # cleanup for F*EX service
 #
@@ -14,7 +14,7 @@ use Cwd       'abs_path';
 use Digest::MD5        'md5_hex';
 
 use constant DS => 60*60*24;
-  
+
 # do not run as CGI!
 exit if $ENV{SCRIPT_NAME};
 
@@ -41,14 +41,15 @@ our ($FEXHOME);
 our ($spooldir,@logdir,$docdir);
 our ($akeydir,$ukeydir,$dkeydir,$skeydir,$gkeydir,$xkeydir,$lockdir);
 our ($durl,$debug,$autodelete,$hostname,$admin,$admin_pw,$bcc);
-$keep_default = 5;
+our $keep_default = 5;
+our $purge = $keep_default*3;
 
 # load common code, local config : $HOME/lib/fex.ph
 require "$FEXLIB/fex.pp" or die "$0: cannot load $FEXLIB/fex.pp - $!\n";
 
 my $logdir = $logdir[0];
 
-# localized functions 
+# localized functions
 # (needed for reminder and account reactivation e-mails)
 foreach my $lf (glob "$FEXHOME/locale/*/lib/lf.pl") { require $lf }
 
@@ -134,7 +135,7 @@ closedir $spooldir;
 # clean up download key lookup directory
 if (chdir $dkeydir and opendir D,'.') {
   while ($file = readdir D) {
-    if ($link = readlink $file and 
+    if ($link = readlink $file and
         (not -l "$link/dkey" or readlink "$link/dkey" ne $file)) {
       logdel($file,".dkeys/$file deleted");
     }
@@ -312,7 +313,7 @@ if (chdir "$spooldir/.reg" and opendir D,'.') {
   closedir D;
 }
 
-# send account expiration warning 
+# send account expiration warning
 if ($account_expire and $account_expire =~ /^(\d+)/) {
   my $expire = $1;
   if (chdir $spooldir) {
@@ -374,7 +375,7 @@ if (%vhost) {
   }
 }
 
-if ($notify_newrelease and $notify_newrelease !~ /^no$/i 
+if ($notify_newrelease and $notify_newrelease !~ /^no$/i
     or not defined $notify_newrelease) {
   $notify_newrelease ||= $admin;
   $newnew = $new = '';
@@ -383,6 +384,7 @@ if ($notify_newrelease and $notify_newrelease !~ /^no$/i
   $_ = slurp("$FEXHOME/doc/version")||'';
   if (/(\d+)/) { $qn = "new?$hostname:$1" }
   else         { $qn = "new?$hostname:0" }
+  print "checking for new F*EX release\n" if $opt_v;
   for (1..3) {
     sleep rand(10);
     $newnew = `wget -qO- http://fex.belwue.de/$qn 2>/dev/null`;
@@ -417,12 +419,13 @@ exit;
 sub cleanup {
   my ($to,$from,$file) = @_;
   my ($data,$download,$notify,$mtime,$warn,$dir,$filename,$dkey,$delay);
-  my $comment = '';
   my $keep = $keep_default;
+  my $purge = $::purge || 3*$keep;
+  my $comment = '';
   my $kf = "$to/$from/$file/keep";
   my $ef = "$to/$from/$file/error";
   local $_;
-  
+
   $keep = readlink $kf || readlink "$to/\@KEEP" || $keep_default;
 
   $file       = "$to/$from/$file";
@@ -439,8 +442,9 @@ sub cleanup {
         logdel($file,"$file deleted");
       }
     } elsif ($mtime = lmtime("$file/error")) {
-      if ($today > 3*$keep*DS+$mtime) {
-        verbose("rmrf $file (today=$today mtime_error=$mtime keep=$keep)");
+      $purge = $1*$keep if $purge =~ /(\d+).*keep/;
+      if ($today > $purge*DS+$mtime) {
+        verbose("rmrf $file (today=$today mtime_error=$mtime keep=$keep purge=$purge)");
         logdel($file,"$file deleted");
       }
     } else {
@@ -451,7 +455,7 @@ sub cleanup {
     $delay = 1 if $delay !~ /^\d+$/;
     $delay--;
     $mtime = lmtime($download);
-    if ($mtime and $today > $delay*DS+$mtime 
+    if ($mtime and $today > $delay*DS+$mtime
         and logdel($data,"$data deleted")) {
       if (open $ef,'>',$ef) {
         printf {$ef} "%s has been autodeleted after download at %s\n",
@@ -491,7 +495,7 @@ sub cleanup {
           # also _fexmail_*
           logdel($file,"$file deleted") and
           verbose("rmrf $file (today=$today mtime_upload=$mtime)");
-        } elsif (logdel($data,"$data deleted")) { 
+        } elsif (logdel($data,"$data deleted")) {
           verbose("unlink $data (today=$today mtime=$mtime keep=$keep)");
           if (open $ef,'>',$ef) {
             $filename = $file;
@@ -501,13 +505,13 @@ sub cleanup {
           }
         }
       }
-    } 
+    }
     elsif ($file !~ /STDFEX$/ and
-           $mtime+$warn*DS < $today and 
+           $mtime+$warn*DS < $today and
            $dkey = readlink("$file/dkey") and
-           not -s $download and 
-           not -f $notify and 
-           (readlink("$to/\@REMINDER")||'yes') ne 'no') 
+           not -s $download and
+           not -f $notify and
+           (readlink("$to/\@REMINDER")||'yes') ne 'no')
     {
       my $locale = readlink "$to/\@LOCALE" || readlink "$file/\@LOCALE";
       $locale = 'english' unless $locale and $notify{$locale};
@@ -545,7 +549,7 @@ sub autodelete {
     chomp($autodelete = <$adf>||'');
     close $adf;
   }
-  
+
   return $autodelete||$::autodelete;
 }
 
@@ -563,7 +567,7 @@ sub logdel {
       warn "$file DEL FAILED : $!\n" if -t or $opt_v;
     }
   }
-  
+
   return $status;
 }