X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bin%2Fadd_bug_to_estraier;h=a83699abc61af0016711e3db00c7113d52988247;hb=refs%2Fheads%2Fmaster;hp=e27f8782393dfb71045f9e6574d97409e79963fe;hpb=229aad8f6f9ce2cbda227aa0d19861e0426b5494;p=debbugs.git diff --git a/bin/add_bug_to_estraier b/bin/add_bug_to_estraier index e27f878..a83699a 100755 --- a/bin/add_bug_to_estraier +++ b/bin/add_bug_to_estraier @@ -16,13 +16,20 @@ use Pod::Usage; =head1 NAME -add_bug_to_estraier +add_bug_to_estraier -- add a bug log to an estraier database =head1 SYNOPSIS add_bug_to_estraier [options] < list_of_bugs_to_add Options: + --url, -u url to estraier node + --user, -U user to log into the estraier node + --pass, -P password for the estraier node + --spool, -s spool location + --conf, -c addbug configuration file + --cron add all bugs to estraier + --timestamp bug timestamp file --debug, -d debugging level (Default 0) --help, -h display this help --man, -m display manual @@ -81,16 +88,24 @@ Display this manual. test_bts --bug 7 --host donbugs.donarmstrong.com +=head1 DATABASE CREATION + +estcmd create -si -xh3 -attr status str -attr subject str \ + -attr date num -attr submitter str -attr package str \ + -attr severity str -attr tags str bts + =cut +use Debbugs::Config qw(:globals); use Debbugs::Mail qw(send_mail_message); use Debbugs::MIME qw(create_mime_message); use Search::Estraier; use Debbugs::Estraier qw(:add); use File::Find; +use File::stat; use vars qw($DEBUG $VERBOSE); @@ -127,7 +142,7 @@ else { chomp; next if /^\s*\#/; my ($key,$value) = split /\s*[:=]\s*/,$_,2; - $options{$key} = $value if not defined $options{$key}; + $options{$key} = $value if defined $key and not defined $options{$key}; } $ERRORS .= "url must be set\n" if not defined $options{url}; $ERRORS .= "user must be set\n" if not defined $options{user}; @@ -143,18 +158,21 @@ pod2usage({verbose=>2}) if $options{man}; $DEBUG = $options{debug}; +$Debbugs::Estraier::DEBUG = $DEBUG; $VERBOSE = 0; my $node = new Search::Estraier::Node (url => $options{url}, user => $options{user}, passwd => $options{passwd}, ); -$Debbugs::Config::gSpoolDir = $options{spool} if defined $options{spool}; +$gSpoolDir = $options{spool} if defined $options{spool}; if ($options{cron}) { my %timestamps; my $start_time = time; + my $unlink = 0; my %seen_dirs; + check_pid($options{timestamp}); # read timestamp file if (defined $options{timestamp}) { my $timestamp_fh = new IO::File $options{timestamp},'r' or @@ -165,30 +183,41 @@ if ($options{cron}) { $timestamps{$key} = $value; } } - find(sub { - print STDERR "Examining $_\n" if $DEBUG; - return if not /^(\d+)\.log$/; - my $bug_num = $1; - my $stat = stat $_ or next; - return unless -f _; - return if exists $timestamps{$File::Find::dir} and - $timestamps{$File::Find::dir} > $stat->mtime; - $seen_dirs{$File::Find::dir} = $start_time; - add_bug_log($node,$1); - }, - map {(-d "$options{spool}/$_")?"$options{spool}/$_":()} - qw(db-h archived db), - ); - # write timestamp file - if (defined $options{timestamp}) { - %timestamps = (%timestamps,%seen_dirs); - my $timestamp_fh = new IO::File $options{timestamp},'w' or - die "Unable to open timestamp $options{timestamp}: $!"; - foreach my $key (keys %timestamps) { - print {$timestamp_fh} $key,' ', - $timestamps{$key}||'',qq(\n); + for my $hash (map {sprintf '%02d',$_ } 0..99) { + find(sub { + print STDERR "Examining $_\n" if $DEBUG > 1; + return if not /^(\d+)\.log$/; + my $bug_num = $1; + my $stat = stat $_ or next; + return unless -f _; + return if exists $timestamps{$File::Find::dir} and + ($timestamps{$File::Find::dir} > $stat->mtime); + $seen_dirs{$File::Find::dir} = $start_time; + print STDERR "Adding $bug_num\n" if $DEBUG; + my $max_message = 0; + eval{ + $max_message = add_bug_log($node,$bug_num); + }; + if ($@) { + print STDERR "Adding $bug_num failed with $@\n"; + } + }, + map {(-d "$options{spool}/$_/$hash")? + "$options{spool}/$_/$hash":()} + qw(db-h archive), + ); + # write timestamp file + if (defined $options{timestamp}) { + %timestamps = (%timestamps,%seen_dirs); + my $timestamp_fh = new IO::File $options{timestamp},'w' or + die "Unable to open timestamp $options{timestamp}: $!"; + foreach my $key (keys %timestamps) { + print {$timestamp_fh} $key,' ', + $timestamps{$key}||'',qq(\n); + } } } + unlink("$options{timestamp}.pid"); } else { while (my $bug_num = ) { @@ -198,5 +227,20 @@ else { } +sub check_pid{ + my ($timestamp) = @_; + if (-e "${timestamp}.pid") { + my $time_fh = new IO::File "${timestamp}.pid", 'r' or die "Unable to read pidfile"; + local $/; + my $pid = <$time_fh>; + if (kill(0,$pid)) { + print STDERR "Another cron is running" and exit 0; + } + } + my $time_fh = new IO::File "${timestamp}.pid", 'w' or + die "Unable to read pidfile"; + print {$time_fh} $$; +} + __END__