From 6d534038285ddd760709ba76ea007f9108200097 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 2 Jan 2017 13:16:15 +0000 Subject: [PATCH] watch: watchspam affects all configured inboxes If a message is spam in one mailbox, it is spam in all others a particular user/group will care about. --- Documentation/public-inbox-config.pod | 3 ++- lib/PublicInbox/WatchMaildir.pm | 22 +++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/Documentation/public-inbox-config.pod b/Documentation/public-inbox-config.pod index cfd6c93d..78f12ba2 100644 --- a/Documentation/public-inbox-config.pod +++ b/Documentation/public-inbox-config.pod @@ -105,7 +105,8 @@ Default: none This may be set to C to enable the use of SpamAssassin L for filtering spam before it is imported into git history. Other spam filtering backends may be supported in -the future. This only affects L. +the future. This requires L, but affects +all configured public-inboxes in PI_CONFIG. Default: none diff --git a/lib/PublicInbox/WatchMaildir.pm b/lib/PublicInbox/WatchMaildir.pm index c8ea3ed3..b7c2d17a 100644 --- a/lib/PublicInbox/WatchMaildir.pm +++ b/lib/PublicInbox/WatchMaildir.pm @@ -80,6 +80,7 @@ sub new { mdmap => \%mdmap, mdir => \@mdir, mdre => $mdre, + config => $config, importers => {}, }, $class; } @@ -99,15 +100,18 @@ sub _remove_spam { $path =~ /:2,[A-R]*S[T-Z]*\z/i or return; my $mime = _path_to_mime($path) or return; _force_mid($mime); - foreach my $inbox (values %{$self->{mdmap}}) { - next unless ref $inbox; - my $im = _importer_for($self, $inbox); - $im->remove($mime); - if (my $scrub = _scrubber_for($inbox)) { - my $scrubbed = $scrub->scrub($mime) or next; - $im->remove($scrubbed); - } - } + $self->{config}->each_inbox(sub { + my ($ibx) = @_; + eval { + my $im = _importer_for($self, $ibx); + $im->remove($mime); + if (my $scrub = _scrubber_for($ibx)) { + my $scrubbed = $scrub->scrub($mime) or return; + $im->remove($scrubbed); + } + }; + warn "error removing spam at $path from $ibx->{name}\n" if $@; + }) } # used to hash the relevant portions of a message when there are conflicts -- 2.44.0