X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Fprocess;h=a3ea9b4a08ff0a21d8ea07dfc8d58bca59ae20de;hb=6a7ae426fa7ad96e82d7617420b214a697eab8c7;hp=11c692ed6524cd731c118f36f5731b03b4ae7720;hpb=de819a65ec7c79dad87afb7ce81b08c7da7c93c1;p=debbugs.git diff --git a/scripts/process b/scripts/process index 11c692e..a3ea9b4 100755 --- a/scripts/process +++ b/scripts/process @@ -13,11 +13,11 @@ use IO::File; use MIME::Parser; use Debbugs::MIME qw(decode_rfc1522 create_mime_message getmailbody); -use Debbugs::Mail qw(send_mail_message encode_headers); -use Debbugs::Packages qw(getpkgsrc); +use Debbugs::Mail qw(send_mail_message encode_headers get_addresses); +use Debbugs::Packages qw(getpkgsrc binary_to_source); use Debbugs::User qw(read_usertags write_usertags); -use Debbugs::Common qw(:lock get_hashname); -use Debbugs::Status qw(writebug isstrongseverity lockreadbugmerge lockreadbug read_bug :versions); +use Debbugs::Common qw(:lock get_hashname package_maintainer); +use Debbugs::Status qw(writebug isstrongseverity lockreadbugmerge lockreadbug read_bug splitpackages :versions); use Debbugs::CGI qw(html_escape bug_url); @@ -129,6 +129,7 @@ if ($entity and $entity->head->tags) { my %header; +my @common_headers; for my $hdr (@headerlines) { $hdr = decode_rfc1522($hdr); $_ = $hdr; @@ -140,6 +141,9 @@ for my $hdr (@headerlines) { # print DEBUG ">$_<\n"; if (s/^(\S+):\s*//) { my $v = lc $1; + if ($v eq 'x-loop') { + push @common_headers, 'X-Loop',$_; + } print DEBUG ">$v=$_<\n"; $header{$v} = $_; } else { @@ -148,6 +152,8 @@ for my $hdr (@headerlines) { } $header{'message-id'} = '' if not defined $header{'message-id'}; +push @common_headers, 'X-Loop',$gMaintainerEmail; + # remove blank lines shift @bodylines while @bodylines and $bodylines[0] !~ /\S/; @@ -236,6 +242,7 @@ if ($tryref >= 0) References => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}), Precedence => 'bulk', "X-$gProject-PR-Message" => 'error', + @common_headers, ],message_body_template('mail/process_unknown_bug_number', {subject => $subject, date => $header{date}, @@ -327,6 +334,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F') References => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}), Precedence => 'bulk', "X-$gProject-PR-Message" => 'error', + @common_headers, ],message_body_template('mail/process_no_bug_number', {subject => $subject, date => $header{date}, @@ -397,7 +405,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F') if ($codeletter eq 'F') { &htmllog("Reply","sent",$replyto,"You have marked $gBug as forwarded."); &sendmessage(create_mime_message( - ["X-Loop" => "$gMaintainerEmail", + [@common_headers, From => "$gMaintainerEmail ($gProject $gBug Tracking System)", To => "$replyto", Subject => "$gBug#$ref: marked as forwarded ($data->{subject})", @@ -420,7 +428,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F') } else { &htmllog("Reply","sent",$replyto,"You have taken responsibility."); &sendmessage(create_mime_message( - ["X-Loop" => "$gMaintainerEmail", + [@common_headers, From => "$gMaintainerEmail ($gProject $gBug Tracking System)", To => $replyto, Subject => "$gBug#$ref: marked as done ($data->{subject})", @@ -444,7 +452,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F') &htmllog("Notification","sent",$data->{originator}, "$gBug acknowledged by developer."); &sendmessage(create_mime_message( - ["X-Loop" => "$gMaintainerEmail", + [@common_headers, From => "$gMaintainerEmail ($gProject $gBug Tracking System)", To => "$data->{originator}", Subject => "$gBug#$ref closed by $markedby ($header{'subject'})", @@ -475,7 +483,8 @@ if ($codeletter eq 'D' || $codeletter eq 'F') if ($ref<0) { # new bug report if ($codeletter eq 'U') { # -submitter &sendmessage(create_mime_message( - [From => "$gMaintainerEmail ($gProject $gBug Tracking System)", + [@common_headers, + From => "$gMaintainerEmail ($gProject $gBug Tracking System)", To => $replyto, Subject => "Message with no $gBug number cannot be sent to submitter! ($subject)", 'Message-ID' => "", @@ -510,7 +519,7 @@ if ($ref<0) { # new bug report my $body = message_body_template('mail/process_no_package', ); &sendmessage(create_mime_message( - ["X-Loop" => "$gMaintainerEmail", + [@common_headers, From => "$gMaintainerEmail ($gProject $gBug Tracking System)", To => $replyto, Subject => "Message with no Package: tag cannot be processed! ($subject)", @@ -634,7 +643,7 @@ my $newsubject= $subject; $newsubject =~ s/^$gBug#$ref:*\s*//; my $xcchdr= $header{ 'x-debbugs-cc' } || ''; if ($xcchdr =~ m/\S/) { - push(@resentccs,$xcchdr); + push(@resentccs,get_addresses($xcchdr)); $resentccexplain.= fill_template('mail/xdebbugscc', {xcchdr => $xcchdr}, ); @@ -710,13 +719,20 @@ if (length($resentccval)) { $resentcc= "Resent-CC: $resentccval\n"; } +my $common_headers=''; +{ + my @tmp = @common_headers; + while (my ($key,$value) = splice(@tmp, 0,2)) { + $common_headers .= qq($key: $value\n); + } +} if ($codeletter eq 'U') { # sent to -submitter &htmllog("Message", "sent on", $data->{originator}, "$gBug#$ref."); &sendmessage(<{originator},@resentccs],[@bccs]); Subject: $gBug#$ref: $newsubject Reply-To: $replyto, $ref-quiet\@$gEmailDomain ${orgsender}Resent-To: $data->{originator} -${resentcc}Resent-Date: $tdate +${resentcc}${common_headers}Resent-Date: $tdate Resent-Message-ID: Resent-Sender: $gMaintainerEmail X-$gProject-PR-Message: report $ref @@ -736,7 +752,7 @@ Subject: $gBug#$ref: $newsubject Reply-To: $replyto, $ref\@$gEmailDomain Resent-From: $header{'from'} ${orgsender}Resent-To: $gSubmitList\@$gListDomain -${resentcc}Resent-Date: $tdate +${resentcc}${common_headers}Resent-Date: $tdate Resent-Message-ID: Resent-Sender: $gMaintainerEmail X-$gProject-PR-Message: $report_followup $ref @@ -770,7 +786,7 @@ ${orgsender}Resent-To: $resentccval Resent-Date: $tdate Resent-Message-ID: Resent-Sender: $gMaintainerEmail -X-$gProject-PR-Message: $report_followup $ref +${common_headers}X-$gProject-PR-Message: $report_followup $ref X-$gProject-PR-Package: $data->{package} X-$gProject-PR-Keywords: $data->{keywords} ${source_pr_header}$fwd @@ -863,7 +879,7 @@ if (not exists $header{'x-debbugs-no-ack'} and } ); &sendmessage(create_mime_message( - ["X-Loop" => "$gMaintainerEmail", + [@common_headers, From => "$gMaintainerEmail ($gProject $gBug Tracking System)", To => $replyto, Subject => $t_h{subject}, @@ -1049,57 +1065,38 @@ sub fill_template{ } +# this shole routine is *bad*; will be changed to use +# Debbugs::Recipients and stuff therin in short order. sub checkmaintainers { return if $maintainerschecked++; return if !length($data->{package}); - my %maintainerof; - open(MAINT,"$gMaintainerFile") || die die "maintainers open: $!"; - while () { - m/^\n$/ && next; - m/^\s*$/ && next; - m/^(\S+)\s+(\S.*\S)\s*\n$/ || die "maintainers bogus \`$_'"; - $a= $1; $b= $2; $a =~ y/A-Z/a-z/; - # use the package which is normalized to lower case; we do this because we lc the pseudo headers. - $maintainerof{$a}= $2; - } - close(MAINT); - open(MAINT,"$gMaintainerFileOverride") || die die "maintainers.override open: $!"; - while () { - m/^\n$/ && next; - m/^\s*$/ && next; - m/^(\S+)\s+(\S.*\S)\s*\n$/ || die "maintainers.override bogus \`$_'"; - $a= $1; $b= $2; $a =~ y/A-Z/a-z/; - # use the package which is normalized to lower case; we do this because we lc the pseudo headers. - $maintainerof{$a}= $2; - } - close(MAINT); - my %pkgsrc; - open(SOURCES,"$gPackageSource") || die "pkgsrc open: $!"; - while () { - next unless m/^(\S+)\s+\S+\s+(\S.*\S)\s*$/; - ($a,$b)=($1,$2); - $a =~ y/A-Z/a-z/; - $pkgsrc{$a} = $b; - } - close(SOURCES); + my $anymaintfound=0; my $anymaintnotfound=0; - for my $p (split(m/[ \t?,():]+/,$data->{package})) { + for my $p (splitpackages($data->{package})) { $p =~ y/A-Z/a-z/; - $p =~ /([a-z0-9.+-]+)/; + $p =~ /((?:src:)?[a-z0-9.+-]+)/; $p = $1; next unless defined $p; if (defined $gSubscriptionDomain) { - if (defined($pkgsrc{$p})) { - push @addsrcaddrs, "$pkgsrc{$p}\@$gSubscriptionDomain"; + my @source = binary_to_source(binary => $p, + source_only => 1, + ); + if (@source) { + push @addsrcaddrs, + map {"$_\@$gSubscriptionDomain"} @source; } else { push @addsrcaddrs, "$p\@$gSubscriptionDomain"; } } - if (defined($maintainerof{$p})) { - print DEBUG "maintainer add >$p|$maintainerof{$p}<\n"; - my $addmaint= $maintainerof{$p}; - push(@maintaddrs,$addmaint) unless - $addmaint eq $replyto || grep($_ eq $addmaint, @maintaddrs); + # this is utter hackery until we switch to Debbugs::Recipients + my @maints = package_maintainer(binary => $p); + if (@maints) { + print DEBUG "maintainer add >$p|".join(',',@maints)."<\n"; + my %temp; + @temp{@maintaddrs} = @maintaddrs; + push(@maintaddrs, + grep {$_ ne $replyto and + not exists $temp{$_}} @maints); $anymaintfound++; } else { print DEBUG "maintainer none >$p<\n";