]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/InboxWritable.pm
nntp: small speed up for multi-line responses
[public-inbox.git] / lib / PublicInbox / InboxWritable.pm
index 7fb5a150ce14b70d234d19a101e8749c849752f7..e97c7e2d7588b903a0917c803cc8f0cde4b81a91 100644 (file)
@@ -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,45 @@ 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->(@_);
+       }
+}
+
+# v2+ only
+sub git_dir_n { "$_[0]->{inboxdir}/git/$_[1].git" }
+
+# v2+ only
+sub git_dir_latest {
+       my ($self, $max) = @_;
+       $$max = -1;
+       my $pfx = "$self->{inboxdir}/git";
+       return unless -d $pfx;
+       my $latest;
+       opendir my $dh, $pfx or die "opendir $pfx: $!\n";
+       while (defined(my $git_dir = readdir($dh))) {
+               $git_dir =~ m!\A([0-9]+)\.git\z! or next;
+               if ($1 > $$max) {
+                       $$max = $1;
+                       $latest = "$pfx/$git_dir";
+               }
+       }
+       $latest;
+}
+
 1;