]> git.donarmstrong.com Git - debbugs.git/commitdiff
* use affected_packages
authorDon Armstrong <don@donarmstrong.com>
Sat, 9 Aug 2008 03:37:41 +0000 (20:37 -0700)
committerDon Armstrong <don@donarmstrong.com>
Sat, 9 Aug 2008 03:37:41 +0000 (20:37 -0700)
 * switch totally to Debbugs::Recipients and use determine_recipients

scripts/service

index b606745fda288f4d2056a5fd2c456dd633a5751d..df289c9c40406fa20a2df0c83547891c143693b8 100755 (executable)
@@ -29,7 +29,7 @@ use Debbugs::Versions::Dpkg;
 use Debbugs::Status qw(splitpackages);
 
 use Debbugs::CGI qw(html_escape);
-use Debbugs::Control qw(:archive :log);
+use Debbugs::Control qw(:archive :log :owner);
 use Debbugs::Log qw(:misc);
 use Debbugs::Text qw(:templates);
 
@@ -157,6 +157,8 @@ our $action;
 
 # recipients of mail
 my %recipients;
+# affected_packages
+my %affected_packages;
 my $ok = 0;
 my $unknowns = 0;
 my $procline=0;
@@ -447,15 +449,12 @@ END
                         "closed") .
                     ", send any further explanations to $data->{originator}";
                 do {
-                    add_recipients(data => $data, recipients => \%recipients);
-                   if ( length( $gDoneList ) > 0 and
-                        length( $gListDomain ) > 0 ) {
-                        add_recipients(recipients => \%recipients,
-                                       type => 'cc',
-                                       address => "$gDoneList\@$gListDomain",
-                                      );
-                   }
-                    $data->{done}= $replyto;
+                  $affected_packages{$data->{package}} = 1;
+                   add_recipients(data => $data,
+                                  recipients => \%recipients,
+                                  actions_taken => {done => 1},
+                                 );
+                   $data->{done}= $replyto;
                     my @keywords= split ' ', $data->{keywords};
                    my $extramessage = '';
                     if (grep $_ eq 'pending', @keywords) {
@@ -509,6 +508,7 @@ END
                 $action= "$gBug assigned to package \`$newpackage'.";
             }
             do {
+               $affected_packages{$data->{package}} = 1;
                 add_recipients(data => $data, recipients => \%recipients);
                 $data->{package}= $newpackage;
                 $data->{found_versions}= [];
@@ -537,6 +537,7 @@ END
                     $noriginator eq '' ? "$gBug reopened, originator not changed." :
                         "$gBug reopened, originator set to $noriginator.";
                 do {
+                   $affected_packages{$data->{package}} = 1;
                     add_recipients(data => $data, recipients => \%recipients);
                     $data->{originator}= $noriginator eq '' ?  $data->{originator} : $noriginator;
                     $data->{fixed_versions}= [];
@@ -561,7 +562,8 @@ END
                         "$gBug marked as found in version $version." :
                         "$gBug reopened.";
                 do {
-                    add_recipients(data => $data, recipients => \%recipients);
+                    $affected_packages{$data->{package}} = 1;
+                   add_recipients(data => $data, recipients => \%recipients);
                     # The 'done' field gets a bit weird with version
                     # tracking, because a bug may be closed by multiple
                     # people in different branches. Until we have something
@@ -600,7 +602,8 @@ END
                 $extramessage= "(By the way, this $gBug is currently marked as done.)\n";
             }
             do {
-                add_recipients(data => $data, recipients => \%recipients);
+                $affected_packages{$data->{package}} = 1;
+               add_recipients(data => $data, recipients => \%recipients);
                 removefoundversions($data, $data->{package}, $version, 'binary');
             } while (&getnextbug);
        }
@@ -617,7 +620,8 @@ END
                       "$gBug marked as fixed in version $version." :
                            "$gBug reopened.";
                 do {
-                    add_recipients(data => $data, recipients => \%recipients);
+                    $affected_packages{$data->{package}} = 1;
+                   add_recipients(data => $data, recipients => \%recipients);
                     addfixedversions($data, $data->{package}, $version, 'binary');
               } while (&getnextbug);
        }
@@ -634,7 +638,8 @@ END
                       "$gBug no longer marked as fixed in version $version." :
                            "$gBug reopened.";
                 do {
-                    add_recipients(data => $data, recipients => \%recipients);
+                    $affected_packages{$data->{package}} = 1;
+                   add_recipients(data => $data, recipients => \%recipients);
                     removefixedversions($data, $data->{package}, $version, 'binary');
               } while (&getnextbug);
        }
@@ -654,7 +659,8 @@ END
         elsif (&getbug) {
             if (&checkpkglimit) {
                 &foundbug;
-                add_recipients(data => $data, recipients => \%recipients);
+                $affected_packages{$data->{package}} = 1;
+               add_recipients(data => $data, recipients => \%recipients);
                 $oldsubmitter= $data->{originator};
                 $data->{originator}= $newsubmitter;
                 $action= "Changed $gBug submitter from $oldsubmitter to $newsubmitter.";
@@ -714,14 +720,12 @@ END
                 $extramessage= "(By the way, this $gBug is currently marked as done.)\n";
             }
             do {
-                add_recipients(data => $data, recipients => \%recipients);
-               if (length($gForwardList)>0 && length($gListDomain)>0 ) {
-                    add_recipients(recipients => \%recipients,
-                                   type => 'cc',
-                                   address => "$gForwardList\@$gListDomain",
-                                  );
-               }
-                $data->{forwarded}= $whereto;
+                $affected_packages{$data->{package}} = 1;
+               add_recipients(data => $data,
+                              recipients => \%recipients,
+                              actions_taken => {forwarded => 1},
+                             );
+               $data->{forwarded}= $whereto;
             } while (&getnextbug);
         }
     } elsif (m/^notforwarded\s+\#?(-?\d+)$/i) {
@@ -735,7 +739,8 @@ END
             } else {
     $action= "Removed annotation that $gBug had been forwarded to $data->{forwarded}.";
                 do {
-                    add_recipients(data => $data, recipients => \%recipients);
+                    $affected_packages{$data->{package}} = 1;
+                   add_recipients(data => $data, recipients => \%recipients);
                     $data->{forwarded}= '';
                 } while (&getnextbug);
             }
@@ -759,7 +764,8 @@ END
             $printseverity= "$gDefaultSeverity" if $printseverity eq '';
            $action= "Severity set to \`$newseverity' from \`$printseverity'";
            do {
-                add_recipients(data => $data, recipients => \%recipients);
+                $affected_packages{$data->{package}} = 1;
+               add_recipients(data => $data, recipients => \%recipients);
                 if (defined $gStrongList and isstrongseverity($newseverity)) {
                     addbcc("$gStrongList\@$gListDomain");
                 }
@@ -806,7 +812,8 @@ END
                $action= "Tags removed: " . join(", ", @okaytags);
            }
            do {
-                add_recipients(data => $data, recipients => \%recipients);
+                $affected_packages{$data->{package}} = 1;
+               add_recipients(data => $data, recipients => \%recipients);
                $data->{keywords} = '' if ($addsub eq "set");
                # Allow removing obsolete tags.
                if ($addsub eq "sub") {
@@ -889,7 +896,8 @@ END
            my %removedblocks;
            my %addedblocks;
            do {
-                add_recipients(data => $data, recipients => \%recipients);
+                $affected_packages{$data->{package}} = 1;
+               add_recipients(data => $data, recipients => \%recipients);
                my @oldblockerlist = split ' ', $data->{blockedby};
                $data->{blockedby} = '' if ($addsub eq "set");
                foreach my $b (@okayblockers) {
@@ -938,7 +946,8 @@ END
         if (&getbug) {
             if (&checkpkglimit) {
                 &foundbug;
-                add_recipients(data => $data, recipients => \%recipients);
+                $affected_packages{$data->{package}} = 1;
+               add_recipients(data => $data, recipients => \%recipients);
                my $oldtitle = $data->{subject};
                 $data->{subject}= $newtitle;
                 $action= "Changed $gBug title to `$newtitle' from `$oldtitle'.";
@@ -969,7 +978,8 @@ END
                 my $discref= $ref;
                @bug_affected{@newmergelist} = 1 x @newmergelist;
                 do {
-                    add_recipients(data => $data, recipients => \%recipients);
+                    $affected_packages{$data->{package}} = 1;
+                   add_recipients(data => $data, recipients => \%recipients);
                    $data->{mergedwith}= ($ref == $discref) ? ''
                         : join(' ',grep($_ ne $ref,@newmergelist));
                 } while (&getnextbug);
@@ -1022,7 +1032,8 @@ END
            delete @fixed{keys %found};
            for $ref (@newmergelist) {
                &getbug || die "huh ?  $gBug $ref disappeared during merge";
-                add_recipients(data => $data, recipients => \%recipients);
+                $affected_packages{$data->{package}} = 1;
+               add_recipients(data => $data, recipients => \%recipients);
                @bug_affected{@newmergelist} = 1 x @newmergelist;
                $data->{mergedwith}= join(' ',grep($_ != $ref,@newmergelist));
                $data->{keywords}= join(' ', keys %tags);
@@ -1083,7 +1094,8 @@ END
            delete @fixed{keys %found};
            for $ref (@newmergelist) {
                &getbug || die "huh ?  $gBug $ref disappeared during merge";
-                add_recipients(data => $data, recipients => \%recipients);
+                $affected_packages{$data->{package}} = 1;
+               add_recipients(data => $data, recipients => \%recipients);
                @bug_affected{@newmergelist} = 1 x @newmergelist;
                $data->{mergedwith}= join(' ',grep($_ != $ref,@newmergelist));
                $data->{keywords}= join(' ', keys %tags);
@@ -1106,6 +1118,7 @@ END
        $ref = $origref;
        $bug_affected{$ref} = 1;
        if (&setbug) {
+           $affected_packages{$data->{package}} = 1;
            if (length($data->{mergedwith})) {
                print {$transcript} "$gBug is marked as being merged with others. Use an existing clone.\n\n";
                $errors++;
@@ -1171,7 +1184,7 @@ END
                %limit_pkgs = ();
                print {$transcript} "Not ignoring any bugs.\n\n";
        }
-    } elsif (m/^owner\s+\#?(-?\d+)\s+((?:\S.*\S)|\!)$/i) {
+    } elsif (m/^owner\s+\#?(-?\d+)\s+((?:\S.*\S)|\!)\s*$/i) {
        $ok++;
         $ref = $1;
        my $newowner = $2;
@@ -1190,7 +1203,7 @@ END
                  owner        => $newowner,
                 );
        };
-    } elsif (m/^noowner\s+\#?(-?\d+)$/i) {
+    } elsif (m/^noowner\s+\#?(-?\d+)\s*$/i) {
         $ok++;
         $ref = $1;
        $bug_affected{$ref} = 1;
@@ -1266,45 +1279,18 @@ if (!$ok && !$quickabort) {
     print {$transcript} "\n";
 }
 
-print {$transcript} "MC\n" if $dl>1;
-my @maintccs= ();
-my @maintccaddrs = ();
-my %maintccreasons;
-for my $maint (keys %maintccreasons) {
-print {$transcript} "MM|$maint|\n" if $dl>1;
-    next if $maint eq $replyto;
-    my $reasonstring= '';
-    my $reasonsref= $maintccreasons{$maint};
-print {$transcript} "MY|$maint|\n" if $dl>2;
-    for my $p (sort keys %$reasonsref) {
-print {$transcript} "MP|$p|\n" if $dl>2;
-        $reasonstring.= ', ' if length($reasonstring);
-        $reasonstring.= $p.' ' if length($p);
-        $reasonstring.= join(' ',map("#$_",sort keys %{$$reasonsref{$p}}));
-    }
-    if (length($reasonstring) > 40) {
-       (substr $reasonstring, 37) = "...";
-    }
-    $reasonstring = "" if (!defined($reasonstring));
-    push(@maintccs,"$maint ($reasonstring)");
-    push(@maintccaddrs,"$maint");
-}
-
-my $maintccs = "";
-if (@maintccs) {
-    print {$transcript} "MC|".join(', ',@maintccs)."|\n" if $dl>2;
-    $maintccs .= "Cc: " . join(",\n    ",@maintccs) . "\n";
-}
+my @maintccs = determine_recipients(recipients => \%recipients,
+                                   address_only => 1,
+                                   cc => 1,
+                                  );
+my $maintccs = 'Cc: '.join(",\n    ",
+                   determine_recipients(recipients => \%recipients,
+                                        cc => 1,
+                                       )
+                  )."\n";
 
-my %packagepr;
-for my $maint (keys %maintccreasons) {
-     for my $package (keys %{$maintccreasons{$maint}}) {
-         next unless length $package;
-         $packagepr{$package} = 1;
-     }
-}
 my $packagepr = '';
-$packagepr = "X-${gProject}-PR-Package: " . join(keys %packagepr) . "\n" if keys %packagepr;
+$packagepr = "X-${gProject}-PR-Package: " . join(keys %affected_packages) . "\n" if keys %affected_packages;
 
 # Add Bcc's to subscribed bugs
 # now handled by Debbugs::Recipients
@@ -1335,7 +1321,12 @@ $gMaintainer
 (administrator, $gProject $gBugs database)
 END
 
-my $repliedshow= join(', ',$replyto,@maintccaddrs);
+my $repliedshow= join(', ',$replyto,
+                     determine_recipients(recipients => \%recipients,
+                                          cc => 1,
+                                          address_only => 1,
+                                         )
+                    );
 # -1 is the service.in log
 &filelock("lock/-1");
 open(AP,">>db-h/-1.log") || die "open db-h/-1.log: $!";
@@ -1351,7 +1342,13 @@ close(AP) || die "open db-h/-1.log: $!";
 &unfilelock;
 utime(time,time,"db-h");
 
-&sendmailmessage($reply,exists $header{'x-debbugs-no-ack'}?():$replyto,@maintccaddrs,@bcc);
+&sendmailmessage($reply,
+                exists $header{'x-debbugs-no-ack'}?():$replyto,
+                make_list(values %{{determine_recipients(recipients => \%recipients,
+                                                         address_only => 1,
+                                                        )}}
+                         ),
+               );
 
 unlink("incoming/P$nn") || die "unlinking incoming/P$nn: $!";