X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Fgen-indices;h=1f0e7dfc9b75bf6c999df837a3c0615440cb5af5;hb=1c4ce01f78b112c2247a08f1a0dc9efb5ab3adca;hp=ca115465afc9eaa4ae768a1cdd9cb655cb82e739;hpb=1d60f62c7a38372911e31e108bac2fd14f032dc6;p=debbugs.git diff --git a/scripts/gen-indices b/scripts/gen-indices index ca11546..1f0e7df 100755 --- a/scripts/gen-indices +++ b/scripts/gen-indices @@ -18,7 +18,9 @@ use Getopt::Long; use Pod::Usage; use File::stat; -use List::Util qw(min); +use List::AllUtils qw(min); + +use Debbugs::Common qw(make_list); =head1 NAME @@ -39,7 +41,7 @@ gen-indices - Generates index files for the cgi scripts =over -=itme B<--quick> +=item B<--quick> Only update changed bugs @@ -79,8 +81,9 @@ pod2usage(-verbose=>2) if $options{man}; use Debbugs::Config qw(:config); use Debbugs::Common qw(getparsedaddrs getbugcomponent lockpid); -use Debbugs::Status qw(readbug); +use Debbugs::Status qw(readbug split_status_fields); use Debbugs::Log; +use Debbugs::UTF8 qw(encode_utf8_structure); chdir($config{spool_dir}) or die "chdir $config{spool_dir} failed: $!"; @@ -106,7 +109,7 @@ if (not lockpid($config{spool_dir}.'/lock/gen-indices')) { } # NB: The reverse index is special; it's used to clean up during updates to bugs -my @indexes = ('package', 'tag', 'severity','owner','submitter-email','status','correspondent','reverse'); +my @indexes = ('package', 'tag', 'severity','owner','submitter-email','status','correspondent','affects','reverse'); my $indexes; my %slow_index = (); my %fast_index = (); @@ -174,6 +177,7 @@ sub emailfromrfc822 { return $email; } +my $modification_made = 0; my $cnt = 0; my @dirs = ($initialdir); @@ -195,9 +199,11 @@ while (my $dir = shift @dirs) { next; } next if $stat->mtime < $time; - my $fdata = readbug($bug, $initialdir); - addbugtoindex("package", $bug, split /[\s,]+/, $fdata->{"package"}); - addbugtoindex("tag", $bug, split /[\s,]+/, $fdata->{"keywords"}); + my ($fdata) = encode_utf8_structure(split_status_fields(readbug($bug, $initialdir))); + $modification_made = 1; + addbugtoindex("package", $bug, make_list($fdata->{package})); + addbugtoindex("tag", $bug, make_list($fdata->{keywords})); + addbugtoindex("affects", $bug, make_list($fdata->{"affects"})); addbugtoindex('submitter-email', $bug, map {lc($_->address)} getparsedaddrs($fdata->{originator})); addbugtoindex("severity", $bug, $fdata->{"severity"}); @@ -206,15 +212,15 @@ while (my $dir = shift @dirs) { # handle log entries # do this in eval to avoid exploding on jacked logs eval { - my $log = Debbugs::Log->new(bug_num => $bug); - while (my $record = $log->read_record()) { - next unless $record->{type} eq 'incoming-recv'; - # we use a regex here, because a full mime parse will be slow. - my ($from) = $record->{text} =~ /^From:\s+(.+?)^\S/ism; - addbugtoindex('correspondent',$bug, - map {lc($_->address)} getparsedaddrs($from) - ); - } + my $log = Debbugs::Log->new(bug_num => $bug); + my @correspondents; + while (my $record = $log->read_record()) { + next unless $record->{type} eq 'incoming-recv'; + # we use a regex here, because a full mime parse will be slow. + my ($from) = $record->{text} =~ /^From:\s+(.+?)^\S/ism; + push @correspondents, map {lc($_->address)} getparsedaddrs($from); + } + addbugtoindex('correspondent',$bug,@correspondents) if @correspondents; }; if ($@) { print STDERR "Problem dealing with log of $bug: $@"; @@ -232,12 +238,17 @@ if (not $options{quick}) { } } - for my $i (@indexes) { - untie %{$slow_index{$i}}; + untie %{$slow_index{$i}}; + # Only move if we've made changes, otherwise unlink + if ($modification_made) { move("$indexdest/by-$i$suffix.idx.new", "$indexdest/by-$i$suffix.idx"); # We do this, because old versions of touch don't support -d '@epoch' system('touch','-d',"1/1/1970 UTC + ${start_time}secs","$indexdest/by-$i$suffix.idx"); + } + else { + unlink("$indexdest/by-$i$suffix.idx.new"); + } } unlink($config{spool_dir}.'/lock/gen-indices')