]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/process
support -done being set in a psuedoheader
[debbugs.git] / scripts / process
index 089fa46888be91a6234ddaa0cbb80f8d18f5498d..265bd5835b6fb2f96e671fef5895cd409b7401c4 100755 (executable)
@@ -7,7 +7,6 @@
 use warnings;
 use strict;
 
-use locale;
 use POSIX qw(strftime locale_h);
 setlocale(LC_TIME, "C");
 
@@ -35,6 +34,7 @@ use Debbugs::Control qw(append_action_to_log);
 use Debbugs::Control::Service qw(valid_control control_line);
 use Debbugs::Recipients qw(determine_recipients);
 use Encode qw(encode_utf8 decode);
+use List::AllUtils qw(first uniqnum);
 
 =head1 NAME
 
@@ -180,8 +180,10 @@ for my $hdr (@headerlines) {
     $_ = $hdr;
     s/\n\s/ /g;
     finish() if m/^x-loop: (\S+)$/i && $1 eq "$gMaintainerEmail";
-    my $ins = !m/^subject:/i && !m/^reply-to:/i && !m/^return-path:/i
-           && !m/^From / && !m/^X-Debbugs-/i;
+    my $ins = !m/^(?:(?:subject|reply-to|return-path|
+                        mail-followup-to|
+                        references):
+                |From\s|X-Debbugs-)/xi;
     $fwd .= encode_utf8($hdr)."\n" if $ins;
     # print {$debugfh} ">$_<\n";
     if (s/^(\S+):\s*//) {
@@ -225,16 +227,21 @@ for my $phline (@bodylines)
     # Fixes #488554
     $phline =~ s/\xef\xbb\xbf//g;
     $phline =~ s/\N{U+FEFF}//g;
-    last if $phline !~ m/^([\w-]+):\s*(\S.*)/;
+    last if $phline !~ m/^([\w-]+): # psuedoheader
+                        (?:\s|\N{U+00A0})* # zero or more spaces, including
+                                            # non-breaking space
+                        (\S.*)/x; # pseudoheader value
     my ($fn, $fv) = ($1, $2);
     $fv =~ s/\s*$//;
+    # pluralize tag/usertag
+    $fn = $fn.'s' if $fn =~ /^(?:tag|usertag)$/;
     print {$debugfh} ">$fn|$fv|\n";
     $fn = lc $fn;
     if ($fn =~ /^control$/) {
        push @control_bits,$fv;
     } else {
        # Don't lc owner or forwarded
-       $fv = lc $fv unless $fn =~ /^(?:owner|forwarded|usertags|version|source-version)$/;
+       $fv = lc $fv unless $fn =~ /^(?:owner|forwarded|usertags|version|source-version|done)$/;
        $pheader{$fn} = $fv;
     }
     print {$debugfh} ">$fn~$fv<\n";
@@ -306,7 +313,7 @@ if (defined $tryref) {
         $ref= $tryref;
     } else {
         &sendmessage(create_mime_message(
-          [From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+          [From          =>  qq("$gProject $gBug Tracking System" <$gMaintainerEmail>),
           To            => $replyto,
           Subject       => "Unknown problem report $gBug#$tryref ($subject)",
           'Message-ID'  => "<handler.x.$nn.unknown\@$gEmailDomain>",
@@ -383,7 +390,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
         }
         $receivedat= "done\@$gEmailDomain";
         $markaswhat= 'done';
-        $set_done= $header{'from'};
+        $set_done= $pheader{'done'} // $header{'from'};
        if ( length( $gListDomain ) > 0 && length( $gDoneList ) > 0 ) {
             $generalcc= "$gDoneList\@$gListDomain";
            push @generalcc, "$gDoneList\@$gListDomain";
@@ -397,7 +404,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
     }
     if ($ref<0) {
        &sendmessage(create_mime_message(
-          [From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+          [From          => qq("$gProject $gBug Tracking System" <$gMaintainerEmail>),
           To            => $replyto,
           Subject       => "Message with no $gBug number ignored by $receivedat ($subject)",
           'Message-ID'  => "<handler.x.$nn.warnignore\@$gEmailDomain>",
@@ -489,7 +496,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
            &htmllog("Reply","sent",$replyto,"You have marked $gBug as forwarded.");
             &sendmessage(create_mime_message(
             [@common_headers,
-             From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+             From          => qq("$gProject $gBug Tracking System" <$gMaintainerEmail>),
               To            => "$replyto",
               Subject       => "$gBug#$ref: marked as forwarded ($data->{subject})",
               "Message-ID"  => "<header.$ref.$nn.ackfwdd\@$gEmailDomain>",
@@ -501,6 +508,8 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
               "X-$gProject-PR-Keywords" => $data->{keywords},
              # Only have a X-$gProject-PR-Source when we know the source package
              (defined($source_package) and length($source_package))?("X-$gProject-PR-Source" => $source_package):(),
+              "Reply-To"                => "$ref\@$gEmailDomain",
+              "Content-Type"            => 'text/plain; charset="utf-8"',
              ],message_body_template('mail/process_mark_as_forwarded',
                                     {date => $header{date},
                                      messageid => $header{'message-id'},
@@ -512,7 +521,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
            &htmllog("Reply","sent",$replyto,"You have taken responsibility.");
             &sendmessage(create_mime_message(
             [@common_headers,
-             From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+             From          => qq("$gProject $gBug Tracking System" <$gMaintainerEmail>),
               To            => $replyto,
               Subject       => "$gBug#$ref: marked as done ($data->{subject})",
               "Message-ID"  => "<handler.$ref.$nn.ackdone\@$gEmailDomain>",
@@ -524,6 +533,8 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
               "X-$gProject-PR-Keywords" => $data->{keywords},
              # Only have a X-$gProject-PR-Source when we know the source package
              (defined($source_package) and length($source_package))?("X-$gProject-PR-Source" => $source_package):(),
+              "Reply-To"                => "$ref\@$gEmailDomain",
+              "Content-Type"            => 'text/plain; charset="utf-8"',
              ],message_body_template('mail/process_mark_as_done',
                                     {date => $header{date},
                                      messageid => $header{'message-id'},
@@ -536,7 +547,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
                "$gBug acknowledged by developer.");
             &sendmessage(create_mime_message(
             [@common_headers,
-             From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+             From          => qq("$gProject $gBug Tracking System" <$gMaintainerEmail>),
               To            => "$data->{originator}",
               Subject       => "$gBug#$ref closed by $markedby ($header{'subject'})",
               "Message-ID"  => "<handler.$ref.$nn.notifdone\@$gEmailDomain>",
@@ -567,7 +578,7 @@ if ($ref<0) { # new bug report
     if ($codeletter eq 'U') { # -submitter
        &sendmessage(create_mime_message(
           [@common_headers,
-          From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+          From          => qq("$gProject $gBug Tracking System" <$gMaintainerEmail>),
           To            => $replyto,
           Subject       => "Message with no $gBug number cannot be sent to submitter! ($subject)",
           'Message-ID'  => "<handler.x.$nn.nonumnosub\@$gEmailDomain>",
@@ -607,7 +618,7 @@ if ($ref<0) { # new bug report
                                        );
         &sendmessage(create_mime_message(
                        [@common_headers,
-                       From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+                       From          => qq("$gProject $gBug Tracking System" <$gMaintainerEmail>),
                         To            => $replyto,
                         Subject       => "Message with no Package: tag cannot be processed! ($subject)",
                         "Message-ID"  => "<handler.x.$nn.nonumnosub\@$gEmailDomain>",
@@ -803,6 +814,12 @@ if (length($resentccval)) {
     $resentcc= "Resent-CC: $resentccval\n"; 
 }
 
+my $referencesval = join(' ',grep {defined $_} $header{'references'},$data->{msgid});
+my $references = '';
+if (!$newref && length($referencesval)) {
+    $references = "References: $referencesval\n";
+}
+
 my $common_headers='';
 {
     my @tmp = @common_headers;
@@ -822,7 +839,7 @@ Resent-Sender: $gMaintainerEmail
 X-$gProject-PR-Message: report $ref
 X-$gProject-PR-Package: $data->{package}
 X-$gProject-PR-Keywords: $data->{keywords}
-${source_pr_header}
+${references}${source_pr_header}
 END
     chomp $enc_msg;
     $enc_msg = encode_utf8($enc_msg).$fwd."\n";
@@ -845,7 +862,7 @@ Resent-Sender: $gMaintainerEmail
 X-$gProject-PR-Message: $report_followup $ref
 X-$gProject-PR-Package: $data->{package}
 X-$gProject-PR-Keywords: $data->{keywords}
-${source_pr_header}
+${references}${source_pr_header}
 END
     chomp $enc_msg;
     $enc_msg = encode_utf8($enc_msg).$fwd."\n";
@@ -879,7 +896,7 @@ Resent-Sender: $gMaintainerEmail
 ${common_headers}X-$gProject-PR-Message: $report_followup $ref
 X-$gProject-PR-Package: $data->{package}
 X-$gProject-PR-Keywords: $data->{keywords}
-${source_pr_header}
+${references}${source_pr_header}
 END
     chomp $enc_msg;
     $enc_msg = encode_utf8($enc_msg).$fwd."\n";
@@ -973,7 +990,7 @@ if (not exists $header{'x-debbugs-no-ack'} and
                                     );
      &sendmessage(create_mime_message(
                       [@common_headers,
-                       From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+                       From          => qq("$gProject $gBug Tracking System" <$gMaintainerEmail>),
                        To            => $replyto,
                        Subject       => $t_h{subject},
                        "Message-ID"  => $t_h{messageid},
@@ -1074,7 +1091,7 @@ if (@control_bits) {
     my $error_text = $errors > 0 ? " (with $errors error" . ($errors > 1 ? "s" : "") . ")" : "";
     my $reply =
        create_mime_message(['X-Loop'      => $gMaintainerEmail,
-                            From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+                            From          => qq("$gProject $gBug Tracking System" <$gMaintainerEmail>),
                             To            => $replyto,
                             @maintccs ? (Cc => join(', ',@maintccs)):(),
                             Subject       => "Processed${error_text}: $header{subject}",
@@ -1257,20 +1274,15 @@ sub fill_template{
      my $variables = {config => \%config,
                      defined($ref)?(ref    => $ref):(),
                      defined($data)?(data  => $data):(),
-                     refs => [map {exists $clonebugs{$_}?$clonebugs{$_}:$_} keys %bug_affected],
+                     refs => [sort
+                              uniqnum(defined($ref)?($ref):(),
+                                      map {exists $clonebugs{$_}?$clonebugs{$_}:$_}
+                                      keys %bug_affected)],
                      %{$extra_var},
                     };
-     my $hole_var = {'&bugurl' =>
-                    sub{"$_[0]: ".
-                             $config{cgi_domain}.'/'.
-                                  Debbugs::CGI::bug_links(bug=>$_[0],
-                                                          links_only => 1,
-                                                         );
-                   }
-                   };
      return fill_in_template(template => $template,
                             variables => $variables,
-                            hole_var  => $hole_var,
+                            output_type => 'text',
                            );
 }