diff options
-rw-r--r-- | lib/PublicInbox/InboxWritable.pm | 22 | ||||
-rw-r--r-- | lib/PublicInbox/WatchMaildir.pm | 12 |
2 files changed, 26 insertions, 8 deletions
diff --git a/lib/PublicInbox/InboxWritable.pm b/lib/PublicInbox/InboxWritable.pm index 7fb5a150..752f1997 100644 --- a/lib/PublicInbox/InboxWritable.pm +++ b/lib/PublicInbox/InboxWritable.pm @@ -9,7 +9,7 @@ use parent qw(PublicInbox::Inbox Exporter); use PublicInbox::Import; use PublicInbox::Filter::Base qw(REJECT); use Errno qw(ENOENT); -our @EXPORT_OK = qw(eml_from_path); +our @EXPORT_OK = qw(eml_from_path warn_ignore_cb); use constant { PERM_UMASK => 0, @@ -278,4 +278,24 @@ sub cleanup ($) { delete @{$_[0]}{qw(over mm git search)}; } +# warnings to ignore when handling spam mailboxes and maybe other places +sub warn_ignore { + my $s = "@_"; + # Email::Address::XS warnings + $s =~ /^Argument contains empty address at / + || $s =~ /^Element at index [0-9]+ contains / + # PublicInbox::MsgTime + || $s =~ /^bogus TZ offset: .+?, ignoring and assuming \+0000/ + || $s =~ /^bad Date: .+? in / +} + +# this expects to be RHS in this assignment: "local $SIG{__WARN__} = ..." +sub warn_ignore_cb { + my $cb = $SIG{__WARN__} // sub { print STDERR @_ }; + sub { + return if warn_ignore(@_); + $cb->(@_); + } +} + 1; diff --git a/lib/PublicInbox/WatchMaildir.pm b/lib/PublicInbox/WatchMaildir.pm index 7d4139a5..142118bd 100644 --- a/lib/PublicInbox/WatchMaildir.pm +++ b/lib/PublicInbox/WatchMaildir.pm @@ -7,7 +7,7 @@ package PublicInbox::WatchMaildir; use strict; use warnings; use PublicInbox::Eml; -use PublicInbox::InboxWritable qw(eml_from_path); +use PublicInbox::InboxWritable qw(eml_from_path warn_ignore_cb); use PublicInbox::Filter::Base qw(REJECT); use PublicInbox::Spamcheck; use PublicInbox::Sigfd; @@ -154,6 +154,7 @@ sub _remove_spam { # path must be marked as (S)een $path =~ /:2,[A-R]*S[T-Za-z]*\z/ or return; my $eml = eml_from_path($path) or return; + local $SIG{__WARN__} = warn_ignore_cb(); $self->{config}->each_inbox(\&remove_eml_i, [ $self, $eml, $path ]); } @@ -197,10 +198,7 @@ sub _try_path { return; } my $warn_cb = $SIG{__WARN__} || sub { print STDERR @_ }; - local $SIG{__WARN__} = sub { - $warn_cb->("path: $path\n"); - $warn_cb->(@_); - }; + local $SIG{__WARN__} = sub { $warn_cb->("path: $path\n", @_) }; if (!ref($inboxes) && $inboxes eq 'watchspam') { return _remove_spam($self, $path); } @@ -393,6 +391,7 @@ sub imap_import_msg ($$$$) { my $x = import_eml($self, $ibx, $eml); } } elsif ($inboxes eq 'watchspam') { + local $SIG{__WARN__} = warn_ignore_cb(); my $eml = PublicInbox::Eml->new($raw); my $arg = [ $self, $eml, "$url UID:$uid" ]; $self->{config}->each_inbox(\&remove_eml_i, $arg); @@ -445,8 +444,7 @@ sub imap_fetch_all ($$$) { my $warn_cb = $SIG{__WARN__} || sub { print STDERR @_ }; local $SIG{__WARN__} = sub { $batch //= '?'; - $warn_cb->("$url UID:$batch\n"); - $warn_cb->(@_); + $warn_cb->("$url UID:$batch\n", @_); }; my $err; do { |