]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/process.in
use full path to spamscan-sa
[debbugs.git] / scripts / process.in
index 7828244e6c272dd15852aa19a24268ca73cb8461..deaadf2a56d0166ec363c9ed80711b04454e7a93 100755 (executable)
@@ -15,7 +15,7 @@ use Debbugs::Mail qw(send_mail_message encode_headers);
 use Debbugs::Packages qw(getpkgsrc);
 use Debbugs::User qw(read_usertags write_usertags);
 use Debbugs::Common qw(:lock get_hashname);
-use Debbugs::Status qw(writebug isstrongseverity lockreadbugmerge);
+use Debbugs::Status qw(writebug isstrongseverity lockreadbugmerge lockreadbug);
 
 use Debbugs::CGI qw(html_escape bug_url);
 
@@ -75,6 +75,8 @@ END
 # header and decoded body respectively
 my (@headerlines, @bodylines);
 
+# whether maintainer addresses have been checked
+our $maintainerschecked = 0;
 #maintainer address for this message
 our @maintaddrs;
 # other src addresses
@@ -226,7 +228,7 @@ if ($tryref >= 0)
           Subject       => "Unknown problem report $gBug#$tryref ($subject)",
           'Message-ID'  => "<handler.x.$nn.unknown\@$gEmailDomain>",
           'In-Reply-To' => $header{'message-id'},
-          References    => "$header{'message-id'} $data->{msgid}",
+          References    => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
           Precedence    => 'bulk',
           "X-$gProject-PR-Message" => 'error',
          ],message_body_template('process_unknown_bug_number',
@@ -262,8 +264,9 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
 {
     if ($replyto =~ m/$gBounceFroms/o ||
         $header{'from'} =~ m/$gBounceFroms/o)
-    { 
-        &quit("bounce detected !  Mwaap! Mwaap!"); 
+    {
+        print STDERR "bounce detected !  Mwaap! Mwaap!";
+        exit 1;
     }
     my $markedby= $header{'from'} eq $replyto ? $replyto :
                "$header{'from'} (reply to $replyto)";
@@ -274,7 +277,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
     my $generalcc;
     my $set_done;
     if ($codeletter eq 'F') { # Forwarded
-        (&appendlog,&finish) if length($data->{forwarded});
+        (&appendlog,&finish) if defined $data->{forwarded} and length($data->{forwarded});
         $receivedat= "forwarded\@$gEmailDomain";
         $markaswhat= 'forwarded';
         $set_forwarded= $header{'to'};
@@ -289,7 +292,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
            $generalcc=''; 
         }
     } else { # Done
-        if (length($data->{done}) and
+        if (defined $data->{done} and length($data->{done}) and
                 not defined $pheader{'source-version'} and
                 not defined $pheader{'version'}) {
             &appendlog;
@@ -317,10 +320,10 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
           Subject       => "Message with no $gBug number ignored by $receivedat ($subject)",
           'Message-ID'  => "<handler.x.$nn.warnignore\@$gEmailDomain>",
           'In-Reply-To' => $header{'message-id'},
-          References    => "$header{'message-id'} $data->{msgid}",
+          References    => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
           Precedence    => 'bulk',
           "X-$gProject-PR-Message" => 'error',
-         ],message_body_template('process_no_bug_number',
+         ],message_body_template('mail/process_no_bug_number',
                                  {subject => $subject,
                                   date    => $header{date},
                                   markaswhat => $markaswhat,
@@ -382,7 +385,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
               Subject       => "$gBug#$ref: marked as forwarded ($data->{subject})",
               "Message-ID"  => "<header.$ref.$nn.ackfwdd\@$gEmailDomain>",
               "In-Reply-To" => $header{'message-id'},
-              References    => "$header{'message-id'} $data->{msgid}",
+              References    => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
               Precedence    => 'bulk',
               "X-$gProject-PR-Message"  => "forwarded $ref",
               "X-$gProject-PR-Package"  => $data->{package},
@@ -405,7 +408,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
               Subject       => "$gBug#$ref: marked as done ($data->{subject})",
               "Message-ID"  => "<handler.$ref.$nn.ackdone\@$gEmailDomain>",
               "In-Reply-To" => $header{'message-id'},
-              References    => "$header{'message-id'} $data->{msgid}",
+              References    => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
               Precedence    => 'bulk',
               "X-$gProject-PR-Message"  => "closed $ref",
               "X-$gProject-PR-Package"  => $data->{package},
@@ -429,7 +432,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
               Subject       => "$gBug#$ref closed by $markedby ($header{'subject'})",
               "Message-ID"  => "<handler.$ref.$nn.notifdone\@$gEmailDomain>",
               "In-Reply-To" => "$data->{msgid}",
-              References    => "$header{'message-id'} $data->{msgid}",
+              References    => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
               "X-$gProject-PR-Message"  => "they-closed $ref",
               "X-$gProject-PR-Package"  => "$data->{package}",
               "X-$gProject-PR-Keywords" => "$data->{keywords}",
@@ -437,9 +440,11 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
              (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',
+             ],message_body_template('mail/process_your_bug_done',
                                     {data      => $data,
                                      markedby  => $markedby,
+                                     messageid => $header{'message-id'},
+                                     subject   => $header{subject},
                                     },
                                    ),
             [join("\n",@msg),$orig_report]),'',undef,1);
@@ -458,10 +463,10 @@ if ($ref<0) {
           Subject       => "Message with no $gBug number cannot be sent to submitter! ($subject)",
           'Message-ID'  => "<handler.x.$nn.nonumnosub\@$gEmailDomain>",
           'In-Reply-To' => $header{'message-id'},
-          References    => "$header{'message-id'} $data->{msgid}",
+          References    => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
           Precedence    => 'bulk',
           "X-$gProject-PR-Message" => 'error',
-         ],message_body_template('process_no_bug_number',
+         ],message_body_template('mail/process_no_bug_number',
                                  {subject => $subject,
                                   date    => $header{date},
                                   markaswhat => 'submitter',
@@ -480,7 +485,10 @@ if ($ref<0) {
         $data->{package} = $pheader{source};
     } elsif (defined $pheader{package}) {
         $data->{package} = $pheader{package};
-    } else {
+    } elsif (defined $config{default_package}) {
+       $data->{package} = $config{default_package},
+    }
+    else {
        &htmllog("Warning","sent",$replyto,"Message not forwarded.");
        my $body = message_body_template('mail/process_no_package',
                                        );
@@ -491,11 +499,11 @@ if ($ref<0) {
                         Subject       => "Message with no Package: tag cannot be processed! ($subject)",
                         "Message-ID"  => "<handler.x.$nn.nonumnosub\@$gEmailDomain>",
                         "In-Reply-To" => $header{'message-id'},
-                        References    => "$header{'message-id'} $data->{msgid}",
+                        References    => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
                         Precedence    => 'bulk',
                         "X-$gProject-PR-Message" => 'error'
                       ],
-          message_body_template('mail/process_mark_as_done',
+          message_body_template('mail/process_no_package',
                                 {date => $header{date},
                                  subject => $subject,
                                  messageid => $header{'message-id'},
@@ -506,6 +514,22 @@ if ($ref<0) {
        &finish;
     }
 
+    if (defined $config{default_package}) {
+        &checkmaintainers;
+        # if there are no maintainers for this package, assign it to the default package
+        if (not @maintaddrs) {
+             $data->{package} = $config{default_package};
+             $brokenness.= fill_template('mail/process_default_package_selected',
+                                         {old_package => $pheader{source} || $pheader{package} || 'No package',
+                                          new_package => $data->{package},
+                                         }
+                                        );
+             # force the maintainers to be rechecked
+             $maintainerschecked = 0;
+             &checkmaintainers;
+        }
+    }
+
     $data->{keywords}= '';
     if (defined($pheader{'keywords'})) {
         $data->{keywords}= $pheader{'keywords'};
@@ -527,9 +551,9 @@ if ($ref<0) {
        $data->{severity} =~ s/^\s*(.+)\s*$/$1/;
 
        if (!grep($_ eq $data->{severity}, @gSeverityList, "$gDefaultSeverity")) {
-            $brokenness.= fill_in_template('mail/invalid_severity',
-                                          {severity=>$data->{severity}}
-                                         );
+            $brokenness.= fill_template('mail/invalid_severity',
+                                       {severity=>$data->{severity}}
+                                      );
             $data->{severity}= '';
         }
     }
@@ -567,7 +591,7 @@ if ($ref<0) {
              for my $tag (split /[,\s]+/, $pheader{usertags}) {
                   if ($tag =~ /^[a-zA-Z0-9.+\@-]+/) {
                        my %bugs_with_tag; 
-                       @bugs_with_tag{@{$user_tags{$tag}}} = (1) x @{$user_tags{$tag}};
+                       @bugs_with_tag{@{$user_tags{$tag}||[]}} = (1) x @{$user_tags{$tag}||[]};
                        $bugs_with_tag{$ref} = 1;
                        $user_tags{$tag} = [keys %bugs_with_tag];
                   }
@@ -575,9 +599,9 @@ if ($ref<0) {
              write_usertags(\%user_tags,$user);
         }
         else {
-             $brokenness .= fill_in_template('mail/invalid_user',
-                                             {user => $user}
-                                            );
+             $brokenness .= fill_template('mail/invalid_user',
+                                          {user => $user}
+                                         );
         }
     }
     &overwrite("db-h/$hash/$ref.report",
@@ -722,8 +746,9 @@ if (length($resentccval)) {
 if (not exists $header{'x-debbugs-no-ack'} and
     ($newref or
      ($codeletter ne 'U' and
-      not defined $header{precedence} or
-      $header{'precedence'} !~ /\b(?:bulk|junk|list)\b/
+      (not defined $header{precedence} or
+       $header{'precedence'} !~ /\b(?:bulk|junk|list)\b/
+      )
      )
     )
    ){
@@ -784,7 +809,7 @@ if (not exists $header{'x-debbugs-no-ack'} and
          $t_h{pr_message} = "ack${infod} $ref";
          $t_h{reply_to}   = "$ref\@$gEmailDomain";
          $extra_vars->{refreplyto} = "$ref\@$gEmailDomain";
-         $t_h{subject}    = length($info)?
+         $t_h{subject}    = (defined $info and length($info))?
               "$gBug#$ref: Info received ($subject)" :
               "$gBug#$ref: Acknowledgement ($subject)";
      }
@@ -982,7 +1007,6 @@ sub fill_template{
 }
 
 
-my $maintainerschecked = 0;
 sub checkmaintainers {
     return if $maintainerschecked++;
     return if !length($data->{package});