]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/process.in
[project @ 2001-02-20 09:45:50 by ajt]
[debbugs.git] / scripts / process.in
index 9cd3e7c7cf1c42abf6eb126019876c6615d5802a..d1b6f2d11ac7bc36650566b610d243706dadf59d 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl
-# $Id: process.in,v 1.4 1999/09/16 19:42:50 gecko Exp $
+# $Id: process.in,v 1.22 2000/11/22 10:02:51 joy Exp $
 #
 # Usage: process nn
 # Temps:  incoming/Pnn
@@ -8,9 +8,9 @@ use Mail::Address;
 require( '/etc/debbugs/config' );
 require( '/usr/lib/debbugs/errorlib' );
 chdir( "$gSpoolDir" ) || die 'chdir spool: $!\n';
-@showseverities=();
 
 #open(DEBUG,"> /tmp/debbugs.debug");
+open DEBUG, ">/dev/null";
 
 defined( $intdate= time ) || &quit( "failed to get time: $!" );
 
@@ -51,6 +51,7 @@ Received: via spool by $baddress\@$gEmailDomain id=$nn
           (code $codeletter ref $tryref); $tdate
 END
 
+# Process the message's mail headers
 for ($i=0; $i<=$#msg; $i++) {
     $_ = $msg[$i];
     last unless length($_);
@@ -92,13 +93,15 @@ if ( $msg[$i] =~ /^--/ || $msg[$i] =~ /^\s*$/ )
 
 while (defined ($msg[$i] ) )
 {
-       last if ( $msg[$i] !~ m/^([\w]+):\s*(\S+)/ );
+       last if ( $msg[$i] !~ m/^([\w]+):\s*(\S+)(.*)/ );
        $i++;
        $fn = $1; $fv = $2;
        print DEBUG ">$fn|$'|\n";
     $fwd .= $fn.': '.$fv."\n";
     $fn =~ y/A-Z/a-z/;
+    $fv =~ y/A-Z/a-z/;
     $pheader{$fn}= $fv;
+    $pfullheader{$fn}= $2.$3;
        print DEBUG ">$fn~$fv<\n";
 }
 
@@ -263,7 +266,7 @@ END
         $x= join('',<O>); close(O);
         if ($codeletter eq 'F') 
                {       &htmllog("Reply","sent",$replyto,"You have marked $gBug as forwarded.");
-            &sendmessage(<<END.$x, '');
+            &sendmessage(<<END, '');
 From: $gMaintainerEmail ($gProject $gBug Tracking System)
 To: $replyto
 ${noticecc}Subject: $gBug#$ref: marked as forwarded ($s_subject)
@@ -274,7 +277,6 @@ X-$gProject-PR-Message: forwarded $ref
 
 Your message dated $header{'date'}
 with message-id $header{'message-id'}
-and subject line $subject
 has caused the $gProject $gBug report #$ref,
 regarding $s_subject
 to be marked as having been forwarded to the upstream software
@@ -290,7 +292,7 @@ $gMaintainer
 END
         } else 
                {   &htmllog("Reply","sent",$replyto,"You have taken responsibility.");
-            &sendmessage(<<END.$x, '');
+            &sendmessage(<<END."--------------------------------------\n".$x."---------------------------------------\n".join( "\n", @msg ), '');
 From: $gMaintainerEmail ($gProject $gBug Tracking System)
 To: $replyto
 ${noticecc}Subject: $gBug#$ref: marked as done ($s_subject)
@@ -321,13 +323,16 @@ END
             &sendmessage(<<END.join("\n",@msg),'');
 From: $gMaintainerEmail ($gProject $gBug Tracking System)
 To: $s_originator
-Subject: $gBug#$ref acknowledged by developer ($s_subject)
+Subject: $gBug#$ref acknowledged by developer
+         ($header{'subject'})
 Message-ID: <handler.$ref.$nn.notifdone\@$gEmailDomain>
 In-Reply-To: $s_msgid
 References: $header{'message-id'} $s_msgid
 X-$gProject-PR-Message: they-closed $ref
 
-This is an automatic notification regarding your $gBug report.
+This is an automatic notification regarding your $gBug report
+#$ref: $s_subject,
+which was filed against the $s_package package.
 
 It has been closed by one of the developers, namely
 $markedby.
@@ -335,7 +340,7 @@ $markedby.
 Their explanation is attached below.  If this explanation is
 unsatisfactory and you have not received a better one in a separate
 message then please contact the developer directly, or email
-submit\@$gEmailDomain or me.
+$ref\@$gEmailDomain or me.
 
 $gMaintainer
 (administrator, $gProject $gBugs database)
@@ -394,7 +399,7 @@ END
     }
     if (!defined($pheader{'package'}))
        {       &htmllog("Warning","sent",$replyto,"Message not forwarded.");
-        &sendmessage(<<END, '');
+        &sendmessage(<<END."---------------------------------------------------------------------------\n".join("\n", @msg), '');
 From: $gMaintainerEmail ($gProject $gBug Tracking System)
 To: $replyto
 Subject: Message with no Package: tag cannot be processed!
@@ -406,15 +411,16 @@ X-$gProject-PR-Message: error
 
 Your message didn't have a Package: line at the start (in the
 pseudo-header following the real mail header), or didn't have a
-psuedo-header at all.
+pseudo-header at all.
 
 This makes it much harder for us to categorise and deal with your
-problem report. Please resubmit your report and tell us which package the
-report is on.  For help, check out http://$gWebDomain/Reporting.html.
+problem report. Please _resubmit_ your report and tell us which package
+the report is on. For help, check out http://$gWebDomain/Reporting.html.
 
 Your message was dated $header{'date'} and had
 message-id $header{'message-id'}
 and subject $subject.
+The complete text of it is attached to this message.
 
 If you need any assistance or explanation please contact me.
 
@@ -424,24 +430,37 @@ $gMaintainer
 END
        &appendlog;
        &finish;
-    } else {
-        $s_package= $pheader{'package'};
-               print "Package: $s_package\n";
-    }
+    } else { $s_package= $pheader{'package'}; }
+    $s_keywords= '';
     if (defined($pheader{'keywords'})) {
-        $s_keywords= $pheader{'keywords'};
+        $s_keywords= $pfullheader{'keywords'};
+    } elsif (defined($pheader{'tags'})) {
+        $s_keywords= $pfullheader{'tags'};
+    }
+    if (length($s_keywords)) {
+        my @kws;
+        my %gkws = map { (%_, 1) } @gTags;
+        foreach my $kw (sort split(/[,\s]+/, lc($s_keywords))) {
+            push @kws, $kw if (defined $gkws{$kw});
+        }
+        $s_keywords = join(" ", @kws);
     }
     $s_severity= '';
-    if (defined($pheader{'severity'})) {
-        $s_severity= $pheader{'severity'};
-       if (!grep($_ eq $s_severity, @severities, "$gDefaultSeverity")) {
+       if (defined($pheader{'severity'}) || defined($pheader{'priority'})) 
+       {       $s_severity= $pheader{'severity'};
+           $s_severity= $pheader{'priority'} unless ($s_severity);
+
+               if (!grep($_ eq $s_severity, @severities, "$gDefaultSeverity")) {
             $brokenness.= <<END;
 
-Your message specified a Severity: in the psuedo-header, but
+Your message specified a Severity: in the pseudo-header, but
 the severity value $s_severity was not recognised.
 The default severity $gDefaultSeverity is being used instead.
-The recognised values are: @showseverities.
+The recognised values are: $gShowSeverities.
 END
+# if we use @gSeverityList array in the above line, perl -c gives:
+# In string, @gSeverityList now must be written as \@gSeverityList at
+#          process line 452, near "$gDefaultSeverity is being used instead.
             $s_severity= '';
         }
     }
@@ -466,7 +485,7 @@ print DEBUG "maintainers >@maintaddrs<\n";
 $orgsender= defined($header{'sender'}) ? "Orignal-Sender: $header{'sender'}\n" : '';
 $newsubject= $subject;  $newsubject =~ s/^$gBug#$ref\W*\s*//;
 
-$xcchdr= $header{X-Debbugs-CC};
+$xcchdr= $header{ 'x-debbugs-cc' };
 if ($xcchdr =~ m/\S/) {
     push(@resentccs,$xcchdr);
     $resentccexplain.= <<END;
@@ -492,7 +511,7 @@ if ($codeletter eq 'M' && !@maintaddrs) {
 
 You requested that the message be sent to the package maintainer(s)
 but either the $gBug report is not associated with any package (probably
-because of a missing Package psuedo-header field in the original $gBug
+because of a missing Package pseudo-header field in the original $gBug
 report), or the package(s) specified do not have any maintainer(s).
 
 Your message has *not* been sent to any package maintainers; it has
@@ -516,7 +535,6 @@ Resent-Message-ID: <handler.$ref.$nn\@$gEmailDomain>
 Resent-Sender: $gMaintainerEmail
 X-$gProject-PR-Message: report $ref
 X-$gProject-PR-Package: $s_package
-X-$gProject-PR-Keywords: $s_keywords
 $fwd
 END
 } elsif ($codeletter eq 'B') {
@@ -524,7 +542,6 @@ END
              join(', ',"$gSubmitList\@$gListDomain",@resentccs),
              "<code>$gBug#$ref</code>".
              (length($s_package)? "; Package <code>".&sani($s_package)."</code>" : '').
-             (length($s_keywords)? "; Keywords <code>".&sani($s_keywords)."</code>":'').
              ".");
     &sendmessage(<<END,"$gSubmitList\@$gListDomain",@resentccs);
 Subject: $gBug#$ref: $newsubject
@@ -536,7 +553,6 @@ Resent-Message-ID: <handler.$ref.$nn\@$gEmailDomain>
 Resent-Sender: $gMaintainerEmail
 X-$gProject-PR-Message: report $ref
 X-$gProject-PR-Package: $s_package
-X-$gProject-PR-Keywords: $s_keywords
 $fwd
 END
 } elsif (@resentccs) {
@@ -547,7 +563,6 @@ END
              $resentccval,
              "<code>$gBug#$ref</code>".
              (length($s_package)? "; Package <code>".&sani($s_package)."</code>" : '').
-             (length($s_keywords)? "; Keywords <code>".&sani($s_keywords)."</code>":'').
              ".");
     &sendmessage(<<END,@resentccs);
 Subject: $gBug#$ref: $newsubject
@@ -559,7 +574,6 @@ Resent-Message-ID: <handler.$ref.$nn\@$gEmailDomain>
 Resent-Sender: $gMaintainerEmail
 X-$gProject-PR-Message: report $ref
 X-$gProject-PR-Package: $s_package
-X-$gProject-PR-Keywords: $s_keywords
 $fwd
 END
 }
@@ -779,12 +793,23 @@ sub get_addresses {
 sub sendmessage {
     local ($msg,@recips) = @_;
     if ($recips[0] eq '' && $#recips == 0) { @recips= ('-t'); }
+
+       #save email to the log
     open(AP,">>db/$ref.log") || &quit("opening db/$ref.log (lo): $!");
     print(AP "\2\n",join("\4",@recips),"\n\5\n$msg\n\3\n") ||
         &quit("writing db/$ref.log (lo): $!");
     close(AP) || &quit("closing db/$ref.log (lo): $!");
     
-    print DEBUG "mailing to >",join('|',@recips),"<\n";
+       #if debbuging.. save email to a log
+#      open AP, ">>debug";
+#      print AP join( '|', @recips )."\n>>";
+#      print AP get_addresses( @recips );
+#      print AP "<<\n".$msg;
+#      print AP "\n--------------------------------------------------------\n";
+#      close AP;
+
+       #start mailing
+       $_ = '';
     $SIG{'CHLD'}='chldhandle';
        #print DEBUG "mailing sigchild set up<\n";
        $chldexit = 'no';
@@ -843,6 +868,8 @@ sub checkmaintainers {
     return if !length($s_package);
     open(MAINT,"$gMaintainerFile") || die &quit("maintainers open: $!");
     while (<MAINT>) {
+       m/^\n$/ && next;
+       m/^\s*$/ && next;
         m/^(\S+)\s+(\S.*\S)\n$/ || &quit("maintainers bogus \`$_'");
         $a= $1; $b= $2; $a =~ y/A-Z/a-z/;
         $maintainerof{$1}= $2;