X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=cgi%2Fbugreport.cgi;h=b68eac64b7f9ba7c92d38e0d151ce1431362d18f;hb=2e9c5a7baf46c2fed7baa3616cb451adabf6e0b2;hp=9064ca8c0565abf666dd397031f3973f86bc2998;hpb=1cda40c7b331de6c31df360b48ed28cbc7b4db5a;p=debbugs.git diff --git a/cgi/bugreport.cgi b/cgi/bugreport.cgi index 9064ca8..b68eac6 100755 --- a/cgi/bugreport.cgi +++ b/cgi/bugreport.cgi @@ -18,7 +18,7 @@ use IO::File; use Debbugs::Config qw(:globals :text); # for read_log_records -use Debbugs::Log qw(read_log_records); +use Debbugs::Log qw(:read); use Debbugs::CGI qw(:url :html :util); use Debbugs::CGI::Bugreport qw(:all); use Debbugs::Common qw(buglog getmaintainers make_list bug_status); @@ -73,6 +73,17 @@ my $mbox = $param{'mbox'} eq 'yes'; my $mime = $param{'mime'} eq 'yes'; my $avatars = $param{avatars} eq 'yes'; +my $trim_headers = ($param{trim} || ((defined $msg and $msg)?'no':'yes')) eq 'yes'; + +my $mbox_status_message = $param{mboxstat} eq 'yes'; +my $mbox_maint = $param{mboxmaint} eq 'yes'; +$mbox = 1 if $mbox_status_message or $mbox_maint; + +# Not used by this script directly, but fetch these so that pkgurl() and +# friends can propagate them correctly. +my $archive = $param{'archive'} eq 'yes'; +my $repeatmerged = $param{'repeatmerged'} eq 'yes'; + my %bugusertags; my %ut; my %seen_users; @@ -80,16 +91,24 @@ my %seen_users; my $buglog = buglog($ref); my $bug_status = bug_status($ref); if (not defined $buglog or not defined $bug_status) { - print $q->header(-status => "404 No such bug", - -type => "text/html", - -charset => 'utf-8', - ); - print fill_in_template(template=>'cgi/no_such_bug', - variables => {modify_time => strftime('%a, %e %b %Y %T UTC', gmtime), - bug_num => $ref, - }, - ); - exit 0; + no_such_bug($q,$ref); +} + +sub no_such_bug { + my ($q,$ref) = @_; + print $q->header(-status => 404, + -content_type => "text/html", + -charset => 'utf-8', + -cache_control => 'public, max-age=600', + ); + print fill_in_template(template=>'cgi/no_such_bug', + variables => {modify_time => strftime('%a, %e %b %Y %T UTC', gmtime), + bug_num => $ref, + }, + ); + exit 0; +} + } # the log should almost always be newer, but just in case @@ -124,20 +143,6 @@ if (defined $param{usertag}) { } -my $trim_headers = ($param{trim} || ((defined $msg and $msg)?'no':'yes')) eq 'yes'; - -my $mbox_status_message = $param{mboxstat} eq 'yes'; -my $mbox_maint = $param{mboxmaint} eq 'yes'; -$mbox = 1 if $mbox_status_message or $mbox_maint; - - -# Not used by this script directly, but fetch these so that pkgurl() and -# friends can propagate them correctly. -my $archive = $param{'archive'} eq 'yes'; -my $repeatmerged = $param{'repeatmerged'} eq 'yes'; - - - my $buglogfh; if ($buglog =~ m/\.gz$/) { my $oldpath = $ENV{'PATH'}; @@ -156,7 +161,7 @@ my %status = my @records; eval{ - @records = read_log_records($buglogfh); + @records = read_log_records(logfh => $buglogfh,inner_file => 1); }; if ($@) { quitcgi("Bad bug log for $gBug $ref. Unable to read records: $@"); @@ -225,23 +230,33 @@ END my $wanted_type = $mbox_maint?'recips':'incoming-recv'; # we want to include control messages anyway my $record_wanted_anyway = 0; - my ($msg_id) = $record->{text} =~ /^Message-Id:\s+<(.+)>/im; + my ($msg_id) = record_regex($record,qr/^Message-Id:\s+<(.+)>/im); next if defined $msg_id and exists $seen_message_ids{$msg_id}; next if defined $msg_id and $msg_id =~/handler\..+\.ack(?:info|done)?\@/; - $record_wanted_anyway = 1 if $record->{text} =~ /^Received: \(at control\)/; + $record_wanted_anyway = 1 if record_regex($record,qr/^Received: \(at control\)/); next if not $boring and not $record->{type} eq $wanted_type and not $record_wanted_anyway and @records > 1; $seen_message_ids{$msg_id} = 1 if defined $msg_id; - my @lines = split( "\n", $record->{text}, -1 ); + my @lines; + if ($record->{inner_file}) { + push @lines, $record->{fh}->getline; + push @lines, $record->{fh}->getline; + chomp $lines[0]; + chomp $lines[1]; + } else { + @lines = split( "\n", $record->{text}, -1 ); + } if ( $lines[ 1 ] =~ m/^From / ) { - my $tmp = $lines[ 0 ]; - $lines[ 0 ] = $lines[ 1 ]; - $lines[ 1 ] = $tmp; + @lines = reverse @lines; } if ( !( $lines[ 0 ] =~ m/^From / ) ) { unshift @lines, "From unknown $date"; - } - map { s/^(>*From )/>$1/ } @lines[ 1 .. $#lines ]; - print join( "\n", @lines ) . "\n"; + } + print $lines[0]."\n"; + print map { s/^(>*From )/>$1/; $_."\n" } @lines[ 1 .. $#lines ]; + if ($record->{inner_file}) { + my $fh = $record->{fh}; + print $_ while (<$fh>); + } } exit 0; } @@ -250,7 +265,7 @@ else { if (defined $att and defined $msg and @records) { binmode(STDOUT,":raw"); $msg_num++; - print handle_email_message($records[0]->{text}, + print handle_email_message($records[0], ref => $ref, msg_num => $msg_num, att => $att, @@ -293,16 +308,7 @@ my $tmain; my $dtime = strftime "%a, %e %b %Y %T UTC", gmtime; unless (%status) { - print $q->header(-type => "text/html", - -charset => 'utf-8', - (length $mtime)?(-last_modified => $mtime):(), - ); - print fill_in_template(template=>'cgi/no_such_bug', - variables => {modify_time => $dtime, - bug_num => $ref, - }, - ); - exit 0; + no_such_bug($q,$ref); } #$|=1;