about summary refs log tree commit homepage
path: root/lib/PublicInbox/InboxWritable.pm
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-08-02 11:22:07 +0000
committerEric Wong <e@yhbt.net>2020-08-03 04:29:03 +0000
commit11c4929d7ee08b4174918fd9e3d10e10636a054c (patch)
tree7458c013a0a14f922c1f093e4d3f8725c2bb7ea3 /lib/PublicInbox/InboxWritable.pm
parent70d93f6bd20a90dadcac4843a5759751fcec4e6d (diff)
downloadpublic-inbox-11c4929d7ee08b4174918fd9e3d10e10636a054c.tar.gz
Email::Address::XS and PublicInbox::MsgTime both emit warnings
which are likely to trigger from spam messages.  Since this can
be configured to remove spam, just filter out those warnings to
avoid cluttering up stderr with useless information.
Diffstat (limited to 'lib/PublicInbox/InboxWritable.pm')
-rw-r--r--lib/PublicInbox/InboxWritable.pm22
1 files changed, 21 insertions, 1 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;