X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Fprocess.in;h=5cd9f1358f35bc95599685dfdd6962e1ba002bea;hb=69211a7468249d41bff8efb9d8c2375242f4e5e7;hp=dc0f4650c26eeb395f83f7813bd8233debc79644;hpb=15ad7ba922dbba5ae88a566167783fa813babe30;p=debbugs.git diff --git a/scripts/process.in b/scripts/process.in old mode 100644 new mode 100755 index dc0f465..5cd9f13 --- a/scripts/process.in +++ b/scripts/process.in @@ -11,9 +11,14 @@ tzset(); use MIME::Parser; use Debbugs::MIME qw(decode_rfc1522 create_mime_message); use Debbugs::Mail qw(send_mail_message encode_headers); +use Debbugs::Packages qw(getpkgsrc); -$config_path = '/etc/debbugs'; -$lib_path = '/usr/lib/debbugs'; +my $config_path = '/etc/debbugs'; +my $lib_path = '/usr/lib/debbugs'; + +# TODO DLA; needs config reworking and errorlib reworking +# use warnings; +# use strict; require "$config_path/config"; require "$lib_path/errorlib"; @@ -25,13 +30,13 @@ chdir( "$gSpoolDir" ) || die "chdir spool: $!\n"; umask(002); open DEBUG, ">/dev/null"; -defined( $intdate= time ) || &quit( "failed to get time: $!" ); +my $intdate = time or quit("failed to get time: $!"); $_=shift; -m/^([BMQFDUL])(\d*)\.\d+$/ || &quit("bad argument"); -$codeletter= $1; -$tryref= length($2) ? $2+0 : -1; -$nn= $_; +m/^([BMQFDUL])(\d*)\.\d+$/ or quit("bad argument: $_"); +my $codeletter= $1; +my $tryref= length($2) ? $2 : -1; +my $nn= $_; if (!rename("incoming/G$nn","incoming/P$nn")) { @@ -39,7 +44,7 @@ if (!rename("incoming/G$nn","incoming/P$nn")) &quit("renaming to lock: $!"); } -$baddress= 'submit' if $codeletter eq 'B'; +my $baddress= 'submit' if $codeletter eq 'B'; $baddress= 'maintonly' if $codeletter eq 'M'; $baddress= 'quiet' if $codeletter eq 'Q'; $baddress= 'forwarded' if $codeletter eq 'F'; @@ -47,20 +52,20 @@ $baddress= 'done' if $codeletter eq 'D'; $baddress= 'submitter' if $codeletter eq 'U'; bug_list_forward($nn) if $codeletter eq 'L'; $baddress || &quit("bad codeletter $codeletter"); -$baddressroot= $baddress; +my $baddressroot= $baddress; $baddress= "$tryref-$baddress" if $tryref>=0; open(M,"incoming/P$nn"); -@log=; +my @log=; close(M); -@msg=@log; +my @msg = @log; chomp @msg; print DEBUG "###\n",join("##\n",@msg),"\n###\n"; -$tdate = strftime "%a, %d %h %Y %T UTC", localtime; -$fwd= <output_under("$gSpoolDir/mime.tmp"); my $entity = eval { $parser->parse_data(join('',@log)) }; +my $i; if ($entity and $entity->head->tags) { @headerlines = @{$entity->head->header}; chomp @headerlines; @@ -144,7 +150,8 @@ for my $phline (@bodylines) $fv =~ s/\s*$//; print DEBUG ">$fn|$fv|\n"; $fn = lc $fn; - $fv = lc $fv; + # Don't lc owner or forwarded + $fv = lc $fv unless $fh =~ /^(?:owner|forwarded)$/; $pheader{$fn} = $fv; print DEBUG ">$fn~$fv<\n"; } @@ -163,7 +170,7 @@ if (defined $header{'resent-from'} && !defined $header{'from'}) { } defined($header{'from'}) || &quit("no From header"); -$replyto = $header{'reply-to'}; +my $replyto = $header{'reply-to'}; $replyto = '' unless defined $replyto; $replyto =~ s/^ +//; $replyto =~ s/ +$//; @@ -171,11 +178,7 @@ unless (length $replyto) { $replyto = $header{'from'}; } -$_= $replyto; -$_= "$2 <$1>" if m/^([^\<\> \t\n\(\)]+) \(([^\(\)\<\>]+)\)$/; -$replytocompare= $_; -print DEBUG "replytocompare >$replytocompare<\n"; - +my $subject = '(no subject)'; if (!defined($header{'subject'})) { $brokenness.= <{package} or defined $pheader{package}) { + my $pkg_src = getpkgsrc(); + $source_package = $pkg_src->{defined $data->{package}?$data->{package}:$pheader{package}}; +} +$source_pr_header = "X-$gProject-PR-Source: $source_package\n" + if defined $source_package and length $source_package; + +# Done and Forwarded Bugs if ($codeletter eq 'D' || $codeletter eq 'F') { if ($replyto =~ m/$gBounceFroms/o || @@ -263,7 +277,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F') $markedby= $header{'from'} eq $replyto ? $replyto : "$header{'from'} (reply to $replyto)"; my @generalcc; - if ($codeletter eq 'F') { + if ($codeletter eq 'F') { # Forwarded (&appendlog,&finish) if length($data->{forwarded}); $receivedat= "forwarded\@$gEmailDomain"; $markaswhat= 'forwarded'; @@ -274,7 +288,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F') } else { $generalcc=''; } - } else { + } else { # Done if (length($data->{done}) and not defined $pheader{'source-version'} and not defined $pheader{'version'}) { @@ -346,7 +360,6 @@ END $noticeccval.= join(', ', grep($_ ne $replyto,@maintaddrs)); $noticeccval =~ s/\s+\n\s+/ /g; $noticeccval =~ s/^\s+/ /; $noticeccval =~ s/\s+$//; - if (length($noticeccval)) { $noticecc= "Cc: $noticeccval\n"; } @process= ($ref,split(/ /,$data->{mergedwith})); $orgref= $ref; @@ -395,7 +408,9 @@ END Precedence => 'bulk', "X-$gProject-PR-Message" => "forwarded $ref", "X-$gProject-PR-Package" => $data->{package}, - "X-$gProject-PR-Keywords" => $data->{keywords} + "X-$gProject-PR-Keywords" => $data->{keywords}, + # Only have a X-$gProject-PR-Source when we know the source package + length($source_package)?("X-$gProject-PR-Source" => $source_package):(), ],< 'bulk', "X-$gProject-PR-Message" => "closed $ref", "X-$gProject-PR-Package" => $data->{package}, - "X-$gProject-PR-Keywords" => $data->{keywords} + "X-$gProject-PR-Keywords" => $data->{keywords}, + # Only have a X-$gProject-PR-Source when we know the source package + length($source_package)?("X-$gProject-PR-Source" => $source_package):(), ],< "they-closed $ref", "X-$gProject-PR-Package" => "$data->{package}", "X-$gProject-PR-Keywords" => "$data->{keywords}", + # Only have a X-$gProject-PR-Source when we know the source package + length($source_package)?("X-$gProject-PR-Source" => $source_package):(), "Reply-To" => "$ref\@$gEmailDomain", "Content-Type" => 'text/plain; charset="utf-8"', ],<{package} X-$gProject-PR-Keywords: $data->{keywords} -$fwd +${source_pr_header}$fwd END -} elsif ($codeletter eq 'B') { +} elsif ($codeletter eq 'B') { # Sent to submit &htmllog($newref ? "Report" : "Information", "forwarded", join(', ',"$gSubmitList\@$gListDomain",@resentccs), "$gBug#$ref". @@ -735,9 +754,9 @@ Resent-Sender: $gMaintainerEmail X-$gProject-PR-Message: report $ref X-$gProject-PR-Package: $data->{package} X-$gProject-PR-Keywords: $data->{keywords} -$fwd +${source_pr_header}$fwd END -} elsif (@resentccs or @bccs) { +} elsif (@resentccs or @bccs) { # Quiet or Maintainer # D and F done far earlier; B just done - so this must be M or Q # We preserve whichever it was in the Reply-To (possibly adding # the $gBug#). @@ -765,7 +784,7 @@ Resent-Sender: $gMaintainerEmail X-$gProject-PR-Message: report $ref X-$gProject-PR-Package: $data->{package} X-$gProject-PR-Keywords: $data->{keywords} -$fwd +${source_pr_header}$fwd END } @@ -781,20 +800,23 @@ unless (exists $header{'x-debbugs-no-ack'}) { ($veryquiet ? "New $gBug report received and filed, but not forwarded." : "New $gBug report received and forwarded."). $htmlbreak); - &sendmessage($veryquiet ? < -In-Reply-To: $header{'message-id'} -References: $header{'message-id'} -Precedence: bulk -X-$gProject-PR-Message: ack-quiet $ref -X-$gProject-PR-Package: $data->{package} -X-$gProject-PR-Keywords: $data->{keywords} -Reply-To: $ref-quiet\@$gEmailDomain - + if ($veryquiet) { + &sendmessage(create_mime_message( + ["X-Loop" => "$gMaintainerEmail", + From => "$gMaintainerEmail ($gProject $gBug Tracking System)", + To => $replyto, + Subject => "$gBug#$ref: Acknowledgement of QUIET report ($subject)", + "Message-ID" => "", + "In-Reply-To" => $header{'message-id'}, + References => $header{'message-id'}, + Precedence => 'bulk', + "X-$gProject-PR-Message" => "ack-quiet $ref", + "X-$gProject-PR-Package" => $data->{package}, + "X-$gProject-PR-Keywords" => $data->{keywords}, + # Only have a X-$gProject-PR-Source when we know the source package + length($source_package)?("X-$gProject-PR-Source" => $source_package):(), + "Reply-To" => "$ref-quiet\@$gEmailDomain", + ],< -In-Reply-To: $header{'message-id'} -References: $header{'message-id'} -Precedence: bulk -X-$gProject-PR-Message: ack-maintonly $ref -X-$gProject-PR-Package: $data->{package} -X-$gProject-PR-Keywords: $data->{keywords} -Reply-To: $ref-maintonly\@$gEmailDomain - + } + elsif ($codeletter eq 'M') { # Maintonly + &sendmessage(create_mime_message( + ["X-Loop" => "$gMaintainerEmail", + From => "$gMaintainerEmail ($gProject $gBug Tracking System)", + To => $replyto, + Subject => "$gBug#$ref: Acknowledgement of maintainer-only report ($subject)", + "Message-ID" => "", + "In-Reply-To" => $header{'message-id'}, + References => $header{'message-id'}, + Precedence => 'bulk', + "X-$gProject-PR-Message" => "ack-maintonly $ref", + "X-$gProject-PR-Package" => $data->{package}, + "X-$gProject-PR-Keywords" => $data->{keywords}, + # Only have a X-$gProject-PR-Source when we know the source package + length($source_package)?("X-$gProject-PR-Source" => $source_package):(), + "Reply-To" => "$ref-maintonly\@$gEmailDomain", + ],< -In-Reply-To: $header{'message-id'} -References: $header{'message-id'} -Precedence: bulk -X-$gProject-PR-Message: ack $ref -X-$gProject-PR-Package: $data->{package} -X-$gProject-PR-Keywords: $data->{keywords} -Reply-To: $ref\@$gEmailDomain - + } + else { + &sendmessage(create_mime_message( + ["X-Loop" => "$gMaintainerEmail", + From => "$gMaintainerEmail ($gProject $gBug Tracking System)", + To => $replyto, + Subject => "$gBug#$ref: Acknowledgement ($subject)", + "Message-ID" => "", + "In-Reply-To" => $header{'message-id'}, + References => $header{'message-id'}, + Precedence => 'bulk', + "X-$gProject-PR-Message" => "ack $ref", + "X-$gProject-PR-Package" => $data->{package}, + "X-$gProject-PR-Keywords" => $data->{keywords}, + # Only have a X-$gProject-PR-Source when we know the source package + length($source_package)?("X-$gProject-PR-Source" => $source_package):(), + "Reply-To" => "$ref\@$gEmailDomain", + ],< -In-Reply-To: $header{'message-id'} -References: $header{'message-id'} -Precedence: bulk -X-$gProject-PR-Message: ack-info-quiet $ref -X-$gProject-PR-Package: $data->{package} -X-$gProject-PR-Keywords: $data->{keywords} -Reply-To: $ref-quiet\@$gEmailDomain - + if ($veryquiet) { + &sendmessage(create_mime_message( + ["X-Loop" => "$gMaintainerEmail", + From => "$gMaintainerEmail ($gProject $gBug Tracking System)", + To => $replyto, + Subject => "$gBug#$ref: Info received and FILED only (was $subject)", + "Message-ID" => "", + "In-Reply-To" => $header{'message-id'}, + References => $header{'message-id'}, + Precedence => 'bulk', + "X-$gProject-PR-Message" => "ack-info-quiet $ref", + "X-$gProject-PR-Package" => $data->{package}, + "X-$gProject-PR-Keywords" => $data->{keywords}, + # Only have a X-$gProject-PR-Source when we know the source package + length($source_package)?("X-$gProject-PR-Source" => $source_package):(), + "Reply-To" => "$ref-maintonly\@$gEmailDomain", + ],< -In-Reply-To: $header{'message-id'} -References: $header{'message-id'} -Precedence: bulk -X-$gProject-PR-Message: ack-info-maintonly $ref -X-$gProject-PR-Package: $data->{package} -X-$gProject-PR-Keywords: $data->{keywords} -Reply-To: $ref-maintonly\@$gEmailDomain - + } + elsif ($codeletter eq 'M') { + &sendmessage(create_mime_message( + ["X-Loop" => "$gMaintainerEmail", + From => "$gMaintainerEmail ($gProject $gBug Tracking System)", + To => $replyto, + Subject => "$gBug#$ref: Info received for maintainer only (was $subject)", + "Message-ID" => "", + "In-Reply-To" => $header{'message-id'}, + References => "$header{'message-id'} $data->{msgid}", + Precedence => 'bulk', + "X-$gProject-PR-Message" => "ack-info-maintonly $ref", + "X-$gProject-PR-Package" => $data->{package}, + "X-$gProject-PR-Keywords" => $data->{keywords}, + "Reply-To" => "$ref-maintonly\@$gEmailDomain", + ],< -In-Reply-To: $header{'message-id'} -References: $header{'message-id'} -Precedence: bulk -X-$gProject-PR-Message: ack-info $ref -X-$gProject-PR-Package: $data->{package} -X-$gProject-PR-Keywords: $data->{keywords} - + } + else { + &sendmessage(create_mime_message( + ["X-Loop" => "$gMaintainerEmail", + From => "$gMaintainerEmail ($gProject $gBug Tracking System)", + To => $replyto, + Subject => "$gBug#$ref: Info received ($subject)", + "Message-ID" => "", + "In-Reply-To" => $header{'message-id'}, + References => "$header{'message-id'} $data->{msgid}", + Precedence => 'bulk', + "X-$gProject-PR-Message" => "ack-info $ref", + "X-$gProject-PR-Package" => $data->{package}, + "X-$gProject-PR-Keywords" => $data->{keywords}, + # Only have a X-$gProject-PR-Source when we know the source package + length($source_package)?("X-$gProject-PR-Source" => $source_package):(), + "Reply-To" => "$ref\@$gEmailDomain", + ],< $recips); } +my $maintainerschecked = 0; sub checkmaintainers { return if $maintainerschecked++; return if !length($data->{package});