X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=cgi%2Fbugreport.cgi;h=db4619d85d7fb3047978e153a41fa1bce131f51d;hb=ec74d9703b7f7045ec85d9c66ae19a0710fd0bd9;hp=3899a9defe715f2486770d1285cafe01fd17cb4b;hpb=507e7fb021c286bcb59d961f9f25c89410d451a2;p=debbugs.git diff --git a/cgi/bugreport.cgi b/cgi/bugreport.cgi index 3899a9d..db4619d 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); @@ -156,7 +156,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 +225,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 +260,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, @@ -307,24 +317,30 @@ unless (%status) { #$|=1; -my %package; + my @packages = make_list($status{package}); -foreach my $pkg (@packages) { - if ($pkg =~ /^src\:/) { - my ($srcpkg) = $pkg =~ /^src:(.*)/; - $package{$pkg} = {maintainer => exists($maintainer{$srcpkg}) ? $maintainer{$srcpkg} : '(unknown)', - source => $srcpkg, - package => $pkg, - is_source => 1, - }; - } - else { - $package{$pkg} = {maintainer => exists($maintainer{$pkg}) ? $maintainer{$pkg} : '(unknown)', - exists($pkgsrc{$pkg}) ? (source => $pkgsrc{$pkg}) : (), - package => $pkg, - }; - } + +my %packages_affects; +for my $p_a (qw(package affects)) { + foreach my $pkg (make_list($status{$p_a})) { + if ($pkg =~ /^src\:/) { + my ($srcpkg) = $pkg =~ /^src:(.*)/; + $packages_affects{$p_a}{$pkg} = + {maintainer => exists($maintainer{$srcpkg}) ? $maintainer{$srcpkg} : '(unknown)', + source => $srcpkg, + package => $pkg, + is_source => 1, + }; + } + else { + $packages_affects{$p_a}{$pkg} = + {maintainer => exists($maintainer{$pkg}) ? $maintainer{$pkg} : '(unknown)', + exists($pkgsrc{$pkg}) ? (source => $pkgsrc{$pkg}) : (), + package => $pkg, + }; + } + } } # fixup various bits of the status @@ -387,7 +403,8 @@ print $q->header(-type => "text/html", print fill_in_template(template => 'cgi/bugreport', variables => {status => \%status, - package => \%package, + package => $packages_affects{'package'}, + affects => $packages_affects{'affects'}, log => $log, bug_num => $ref, version_graph => $version_graph,