]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/gen-indices
pass uri_escape to templates in bugreport.cgi
[debbugs.git] / scripts / gen-indices
index ca115465afc9eaa4ae768a1cdd9cb655cb82e739..1f0e7dfc9b75bf6c999df837a3c0615440cb5af5 100755 (executable)
@@ -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')