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);
# recipients of mail
my %recipients;
+# affected_packages
+my %affected_packages;
my $ok = 0;
my $unknowns = 0;
my $procline=0;
"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) {
$action= "$gBug assigned to package \`$newpackage'.";
}
do {
+ $affected_packages{$data->{package}} = 1;
add_recipients(data => $data, recipients => \%recipients);
$data->{package}= $newpackage;
$data->{found_versions}= [];
$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}= [];
"$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
$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);
}
"$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);
}
"$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);
}
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.";
$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) {
} 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);
}
$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");
}
$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") {
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) {
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'.";
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);
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);
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);
$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++;
%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;
owner => $newowner,
);
};
- } elsif (m/^noowner\s+\#?(-?\d+)$/i) {
+ } elsif (m/^noowner\s+\#?(-?\d+)\s*$/i) {
$ok++;
$ref = $1;
$bug_affected{$ref} = 1;
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
(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: $!";
&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: $!";