X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=cgi%2Fbugreport.cgi;h=b86a6883f72d9e8c7500e038ab18b1725fbb047a;hb=57f67fcb715a9aba804a891f28ad4202fc11ccf3;hp=c49902e7626ae068869891baa8e2ab1b343a5733;hpb=f20d8eb57ad19b8e6af6d34a6fd6cbb94c59a69a;p=debbugs.git diff --git a/cgi/bugreport.cgi b/cgi/bugreport.cgi index c49902e..b86a688 100755 --- a/cgi/bugreport.cgi +++ b/cgi/bugreport.cgi @@ -11,12 +11,12 @@ use IO::File; use Debbugs::Config qw(:globals :text); # for read_log_records -use Debbugs::Log; +use Debbugs::Log qw(read_log_records); use Debbugs::MIME qw(convert_to_utf8 decode_rfc1522 create_mime_message); use Debbugs::CGI qw(:url :html :util); -use Debbugs::Common qw(buglog); +use Debbugs::Common qw(buglog getmaintainers); use Debbugs::Packages qw(getpkgsrc); -use Debbugs::Status qw(get_bug_status isstrongseverity); +use Debbugs::Status qw(splitpackages get_bug_status isstrongseverity); use Scalar::Util qw(looks_like_number); use CGI::Simple; @@ -122,10 +122,10 @@ sub display_entity ($$$$\$\@) { push @dlargs, (filename=>$filename) if $filename ne ''; my $printname = $filename; $printname = 'Message part ' . ($#$attachments + 1) if $filename eq ''; - $$this .= '
[$printname } .
+	$$this .= '
[$printname } .
 		  "($type, $disposition)]
\n"; - if ($msg and defined($att) and $att eq $#$attachments) { + if ($msg and defined($att) and $att == $#$attachments) { my $head = $entity->head; chomp(my $type = $entity->effective_type); my $body = $entity->stringify_body; @@ -176,11 +176,17 @@ sub display_entity ($$$$\$\@) { my $body = $entity->bodyhandle->as_string; $body = convert_to_utf8($body,$charset) if defined $charset; $body = html_escape($body); + # Attempt to deal with format=flowed + if ($content_type =~ m/format\s*=\s*\"?flowed\"?/i) { + $body =~ s{^\ }{}mgo; + # we ignore the other things that you can do with + # flowed e-mails cause they don't really matter. + } # Add links to URLs $body =~ s,((ftp|http|https)://[\S~-]+?/?)((\>\;)?[)]?[']?[:.\,]?(\s|$)),$1$3,go; # Add links to bug closures $body =~ s[(closes:\s*(?:bug)?\#?\s?\d+(?:,?\s*(?:bug)?\#?\s?\d+)*) - ][my $temp = $1; $temp =~ s{(\d+)}{qq($1)}ge; $temp;]gxie; + ][my $temp = $1; $temp =~ s{(\d+)}{qq($1)}ge; $temp;]gxie; $$this .= qq(
$body
\n); } } @@ -231,17 +237,17 @@ if ($status{severity} eq 'normal') { if (@{$status{found_versions}} or @{$status{fixed_versions}}) { $indexentry.= q(
}; + html_escape(version_url($status{package}, + $status{found_versions}, + $status{fixed_versions}, + )). + q(">version graph}; } @@ -257,7 +263,7 @@ foreach my $pkg (@tpacks) { : "Maintainers for $pkg are\n" }, $tmaint); $indexentry .= ";\nSource for $pkg is\n". - '$tsrc" if ($tsrc ne "(unknown)"); + '$tsrc" if ($tsrc ne "(unknown)"); $indexentry .= ".\n"; } @@ -285,7 +291,7 @@ if (@merged) { my $descmerged = 'Merged with '; my $mseparator = ''; for my $m (@merged) { - $descmerged .= $mseparator."#$m"; + $descmerged .= $mseparator."#$m"; $mseparator= ",\n"; } push @descstates, $descmerged; @@ -309,10 +315,10 @@ if (@{$status{fixed_versions}}) { if (@{$status{found_versions}} or @{$status{fixed_versions}}) { push @descstates, 'Version Graph}; + html_escape(version_url($status{package}, + $status{found_versions}, + $status{fixed_versions}, + )).qq{">Version Graph}; } if (length($status{done})) { @@ -320,7 +326,9 @@ if (length($status{done})) { } if (length($status{forwarded})) { - push @descstates, "Forwarded to ".maybelink($status{forwarded}); + my $forward_link = html_escape($status{forwarded}); + $forward_link =~ s,((ftp|http|https)://[\S~-]+?/?)((\>\;)?[)]?[']?[:.\,]?(\s|$)),$1$3,go; + push @descstates, "Forwarded to $forward_link"; } @@ -329,7 +337,7 @@ if (@blockedby && $status{"pending"} ne 'fixed' && ! length($status{done})) { for my $b (@blockedby) { my %s = %{get_bug_status($b)}; next if $s{"pending"} eq 'fixed' || length $s{done}; - push @descstates, "Fix blocked by #$b: ".html_escape($s{subject}); + push @descstates, "Fix blocked by #$b: ".html_escape($s{subject}); } } @@ -338,7 +346,7 @@ if (@blocks && $status{"pending"} ne 'fixed' && ! length($status{done})) { for my $b (@blocks) { my %s = %{get_bug_status($b)}; next if $s{"pending"} eq 'fixed' || length $s{done}; - push @descstates, "Blocking fix for #$b: ".html_escape($s{subject}); + push @descstates, "Blocking fix for #$b: ".html_escape($s{subject}); } } @@ -416,6 +424,7 @@ sub handle_record{ my $output = ''; local $_ = $record->{type}; if (/html/) { + my ($time) = $record->{text} =~ //; my $class = $record->{text} =~ /^(?:Acknowledgement|Reply|Information|Report|Notification)/ ? 'infmessage':'msgreceived'; $output .= decode_rfc1522($record->{text}); # Link to forwarded http:// urls in the midst of the report @@ -426,14 +435,17 @@ sub handle_record{ # Add links to merged bugs $output =~ s{(?<=Merged )([\d\s]+)(?=\.)}{join(' ',map {bug_links($_)} (split /\s+/, $1))}eo; # Add links to blocked bugs - $output =~ s{(?<=Blocking bugs)(?:(of )(\d+))?( (?:added|set to|removed):\s+)([\d\s\,]+)} + $output =~ s{(?<=Blocking bugs)(?:( of )(\d+))?( (?:added|set to|removed):\s+)([\d\s\,]+)} {(defined $2?$1.bug_links($2):'').$3. join(' ',map {bug_links($_)} (split /\,?\s+/, $4))}eo; # Add links to reassigned packages - $output =~ s{(Bug reassigned from package \`)([^\']+)(' to \`)([^\']+)(')} - {$1.q($2).$3.q($4).$5}eo; - $output .= 'Full text and rfc822 format available.'; + $output =~ s{(Bug reassigned from package \`)([^']+?)((?:'|\&\#39;) to \`)([^']+?)((?:'|\&\#39;))} + {$1.q($2).$3.q($4).$5}eo; + if (defined $time) { + $output .= ' ('.strftime('%a, %d %b %Y %T GMT',gmtime($time)).') '; + } + $output .= 'Full text and rfc822 format available.'; $output = qq(

\n\n) . $output . "
\n"; } @@ -445,8 +457,8 @@ sub handle_record{ elsif (defined $msg_id) { $$seen_msg_ids{$msg_id} = 1; } - $output .= qq(
\n); - $output .= 'View this message in rfc822 format'; + $output .= qq(

\n); + $output .= 'View this message in rfc822 format

'; $output .= handle_email_message($record->{text}, ref => $bug_number, msg_number => $msg_number, @@ -465,8 +477,10 @@ sub handle_record{ } # Incomming Mail Message my ($received,$hostname) = $record->{text} =~ m/Received: \(at (\S+)\) by (\S+)\;/; - $output .= qq|

Message received at |. - html_escape("$received\@$hostname") . q| (full text'.q|, mbox)'.":

\n"; + $output .= qq|

Message #$msg_number received at |. + html_escape("$received\@$hostname") . + q| (full text'. + q|, mbox)'.":

\n"; $output .= handle_email_message($record->{text}, ref => $bug_number, msg_number => $msg_number, @@ -536,10 +550,10 @@ END my $record_wanted_anyway = 0; my ($msg_id) = $record->{text} =~ /^Message-Id:\s+<(.+)>/im; next if exists $seen_message_ids{$msg_id}; - $seen_message_ids{$msg_id} = 1; - next if $msg_id =~/handler\..+\.ack(?:info)?\@/; + next if $msg_id =~/handler\..+\.ack(?:info|done)?\@/; $record_wanted_anyway = 1 if $record->{text} =~ /^Received: \(at control\)/; - next if not $boring and $record->{type} ne $wanted_type and not $record_wanted_anyway and @records > 1; + 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; my @lines = split( "\n", $record->{text}, -1 ); if ( $lines[ 1 ] =~ m/^From / ) { my $tmp = $lines[ 0 ]; @@ -593,7 +607,8 @@ function toggle_infmessages() { if (allDivs[i].className == "infmessage") { - allDivs[i].style.display=(allDivs[i].style.display == 'none') ? 'block' : 'none'; + allDivs[i].style.display=(allDivs[i].style.display == 'none' | allDivs[i].style.display == '') ? 'block' : 'none'; + break; } } } @@ -604,17 +619,22 @@ function toggle_infmessages() END print "

" . "$gProject $gBug report logs - $short" . "
" . $title . "

\n"; - print "$descriptivehead\n"; -print qq(

Reply ), - qq(or subscribe ), - qq(to this bug.

\n); -print qq(

Toggle useless messages

); -printf qq(

View this report as an mbox folder, ). - qq(status mbox, maintainer mbox

\n), - html_escape(bug_url($ref, mbox=>'yes')), - html_escape(bug_url($ref, mbox=>'yes',mboxstatus=>'yes')), - html_escape(bug_url($ref, mbox=>'yes',mboxmaint=>'yes')); + +if (looks_like_number($msg)) { + printf qq(

Full log

),html_escape(bug_url($ref)); +} +else { + print qq(

Reply ), + qq(or subscribe ), + qq(to this bug.

\n); + print qq(

Toggle useless messages

); + printf qq(

View this report as an mbox folder, ). + qq(status mbox, maintainer mbox

\n), + html_escape(bug_url($ref, mbox=>'yes')), + html_escape(bug_url($ref, mbox=>'yes',mboxstatus=>'yes')), + html_escape(bug_url($ref, mbox=>'yes',mboxmaint=>'yes')); +} print "$log"; print "
"; print "

Send a report that this bug log contains spam.

\n
\n";