#!/usr/bin/perl # $Id: processall.in,v 1.13 2005/10/06 03:46:13 ajt Exp $ # # Usage: processall # # Uses up: incoming/I.nn # Temps: incoming/[GP].nn # Creates: incoming/E.nn # Stop: stop use warnings; use strict; use Debbugs::Config qw(:globals); use Debbugs::Common qw(:lock); my $lib_path = $gLibPath; use File::Path; chdir( $gSpoolDir ) || die "chdir spool: $!\n"; #open(DEBUG,">&4"); umask(002); $|=1; my %fudged; my @ids; my $ndone = 0; &filelock('incoming-cleaner'); for (;;) { if (-f 'stop') { print(STDERR "stop file created\n") || die $!; last; } if (!@ids) { opendir(DIR,"incoming") || die $!; while ( defined( $_= readdir(DIR) )) { push(@ids,$_) if s/^I//; } last unless @ids; @ids= sort(@ids); } stat("$gMaintainerFile") || die "stat $gMaintainerFile: $!\n"; my $nf= @ids; my $id= shift(@ids); unless (rename("incoming/I$id","incoming/G$id")) { if ($fudged{$id}) { die "$id already fudged once! $!\n"; } $fudged{$id}= 1; next; } my $c; if ($id =~ m/^[RC]/) { print(STDOUT "[$nf] $id service ...") || die $!; defined($c=fork) || die $!; if (!$c) { exec("$lib_path/service",$id); die "unable to execute $lib_path/service: $!"; } } elsif ($id =~ m/^[BMQFDUL]/) { print(STDOUT "[$nf] $id process ...") || die $!; defined($c=fork) || die $!; if (!$c) { exec("$lib_path/process",$id); die "unable to execute $lib_path/process: $!"; } } else { die "bad name $id"; } my $cc=waitpid($c,0); $cc == $c || die "$cc $c $!"; my $status=$?; if ($status) { print(STDERR "$id: process failed ($status $!) - now in [PG]$id\n") || die $!; } print(STDOUT " done\n") || die $!; rmtree("$gSpoolDir/mime.tmp",0,1); $ndone++; } system("$lib_path/gen-indices",'--quick') == 0 or print STDERR "gen-indices failed\n"; if (@gPostProcessall) { system @gPostProcessall == 0 or print STDERR "\@gPostProcessall failed: ".join(' ',@gPostProcessall)."\n"; } &unfilelock; exit(0);