]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/process
use splitpackages in process
[debbugs.git] / scripts / process
index 8e4a0f850adf8bddf3d327bfb00110b44bca8ee6..c4c0ffeabb36880a5f80184eba6032f46041150c 100755 (executable)
@@ -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::Mail qw(send_mail_message encode_headers get_addresses);
 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 lockreadbug);
+use Debbugs::Status qw(writebug isstrongseverity lockreadbugmerge lockreadbug read_bug splitpackages :versions);
 
 use Debbugs::CGI qw(html_escape bug_url);
 
@@ -25,7 +25,6 @@ use Debbugs::Log qw(:misc);
 
 use Debbugs::Text qw(:templates);
 
-use Debbugs::Status qw(:versions);
 use Debbugs::Config qw(:globals :config);
 
 use Debbugs::Control qw(append_action_to_log);
@@ -170,6 +169,9 @@ my %pheader;
 # extract pseudo-headers
 for my $phline (@bodylines)
 {
+    # Remove BOM markers from UTF-8 strings
+    # Fixes #488554
+    $phline =~ s/\xef\xbb\xbf//g;
     last if $phline !~ m/^([\w-]+):\s*(\S.*)/;
     my ($fn, $fv) = ($1, $2);
     $fv =~ s/\s*$//;
@@ -222,10 +224,9 @@ if ($tryref >= 0)
 {
      my $bfound;
     ($bfound, $data)= &lockreadbugmerge($tryref);
-    if ($bfound) { 
+    if ($bfound and not $data->{archived}) {
         $ref= $tryref; 
     } else {
-        &htmllog("Reply","sent", $replyto,"Unknown problem report number <code>$tryref</code>.");
         &sendmessage(create_mime_message(
           [From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
           To            => $replyto,
@@ -235,7 +236,7 @@ if ($tryref >= 0)
           References    => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
           Precedence    => 'bulk',
           "X-$gProject-PR-Message" => 'error',
-         ],message_body_template('process_unknown_bug_number',
+         ],message_body_template('mail/process_unknown_bug_number',
                                  {subject => $subject,
                                   date    => $header{date},
                                   baddress => $baddress,
@@ -317,7 +318,6 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
        push @generalcc,"$gStrongList\@$gListDomain";
     }
     if ($ref<0) {
-       &htmllog("Warning","sent",$replyto,"Message ignored.");
        &sendmessage(create_mime_message(
           [From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
           To            => $replyto,
@@ -449,8 +449,8 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
               To            => "$data->{originator}",
               Subject       => "$gBug#$ref closed by $markedby ($header{'subject'})",
               "Message-ID"  => "<handler.$ref.$nn.notifdone\@$gEmailDomain>",
-              "In-Reply-To" => "$data->{msgid}",
-              References    => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
+              (defined $data->{msgid})?("In-Reply-To" => $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}",
@@ -474,7 +474,6 @@ if ($codeletter eq 'D' || $codeletter eq 'F')
 
 if ($ref<0) { # new bug report
     if ($codeletter eq 'U') { # -submitter
-        &htmllog("Warning","sent",$replyto,"Message not forwarded.");
        &sendmessage(create_mime_message(
           [From          => "$gMaintainerEmail ($gProject $gBug Tracking System)",
           To            => $replyto,
@@ -500,14 +499,14 @@ if ($ref<0) { # new bug report
     $data->{fixed_versions} = [];
 
     if (defined $pheader{source}) {
-        $data->{package} = $pheader{source};
+       # source packages are identified by the src: prefix
+        $data->{package} = 'src:'.$pheader{source};
     } elsif (defined $pheader{package}) {
         $data->{package} = $pheader{package};
     } 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',
                                        );
         &sendmessage(create_mime_message(
@@ -635,7 +634,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},
                                    );
@@ -1084,7 +1083,7 @@ sub checkmaintainers {
     }
     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 = $1;
@@ -1132,9 +1131,18 @@ sub bug_list_forward{
      my ($bug_fn) = @_;
      # Read the bug information and package information for passing to
      # the mailing list
+     my $bug_fh = IO::File->new("incoming/P$bug_fn",'r') or
+         die "Unable to open incoming/P$bug_fn $!";
+
+     if (not defined $config{bug_subscription_domain} or not
+        length $config{bug_subscription_domain}) {
+         unlink("incoming/P$bug_fn") or
+              die "unlinking incoming/P$bug_fn: $!";
+         exit 0;
+     }
+
      my ($bug_number) = $bug_fn =~ /^L(\d+)\./;
-     my ($bfound, $data)= lockreadbugmerge($bug_number);
-     my $bug_fh = IO::File->new("incoming/P$bug_fn",'r') or die "Unable to open incoming/P$bug_fn $!";
+     my $data = read_bug(bug => $bug_number);
 
      local $/ = undef;
      my $bug_message = <$bug_fh>;
@@ -1159,10 +1167,10 @@ sub bug_list_forward{
      # If we don't have a bug address, something has gone horribly wrong.
      print STDERR "Doesn't match: $bug_address\n" and exit 1 unless defined $bug_address;
      $bug_address =~ s/\@.+//;
-     print DEBUG "Sending message to bugs=$bug_address\@$gListDomain\n";
+     print DEBUG "Sending message to bugs=$bug_address\@$config{bug_subscription_domain}\n";
      print DEBUG $header.qq(\n\n).$body;
      send_mail_message(message        => $header.qq(\n\n).$body,
-                      recipients     => ["bugs=$bug_address\@$gListDomain"],
+                      recipients     => ["bugs=$bug_address\@$config{bug_subscription_domain}"],
                       envelope_from  => $envelope_from,
                       encode_headers => 0,
                      );