about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-05-07 21:05:50 +0000
committerEric Wong <e@yhbt.net>2020-05-09 08:59:10 +0000
commit46742d95647c7a80cb2f60d5c134717dd91e22e2 (patch)
tree43b6ef4aebba979e48eb9143cd491f1a5b3f7eea /lib
parent3b1b7abf814dbc7f2a737b2ca0e12b0fa518ff44 (diff)
downloadpublic-inbox-46742d95647c7a80cb2f60d5c134717dd91e22e2.tar.gz
PublicInbox::Eml has enough functionality to replace the
Email::MIME-based PublicInbox::MIME.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/Admin.pm2
-rw-r--r--lib/PublicInbox/Filter/Vger.pm4
-rw-r--r--lib/PublicInbox/Import.pm3
-rw-r--r--lib/PublicInbox/Inbox.pm4
-rw-r--r--lib/PublicInbox/InboxWritable.pm4
-rw-r--r--lib/PublicInbox/MDA.pm1
-rw-r--r--lib/PublicInbox/SearchIdx.pm6
-rw-r--r--lib/PublicInbox/SearchIdxShard.pm3
-rw-r--r--lib/PublicInbox/TestCommon.pm3
-rw-r--r--lib/PublicInbox/V2Writable.pm17
-rw-r--r--lib/PublicInbox/View.pm2
-rw-r--r--lib/PublicInbox/WWW.pm2
-rw-r--r--lib/PublicInbox/WatchMaildir.pm4
-rw-r--r--lib/PublicInbox/WwwAttach.pm5
14 files changed, 32 insertions, 28 deletions
diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm
index 62ddbe82..2c8d191a 100644
--- a/lib/PublicInbox/Admin.pm
+++ b/lib/PublicInbox/Admin.pm
@@ -122,7 +122,7 @@ EOF
 }
 
 # TODO: make Devel::Peek optional, only used for daemon
-my @base_mod = qw(Email::MIME Devel::Peek);
+my @base_mod = qw(Devel::Peek);
 my @over_mod = qw(DBD::SQLite DBI);
 my %mod_groups = (
         -index => [ @base_mod, @over_mod ],
diff --git a/lib/PublicInbox/Filter/Vger.pm b/lib/PublicInbox/Filter/Vger.pm
index e746238c..2c73738d 100644
--- a/lib/PublicInbox/Filter/Vger.pm
+++ b/lib/PublicInbox/Filter/Vger.pm
@@ -5,7 +5,7 @@
 package PublicInbox::Filter::Vger;
 use base qw(PublicInbox::Filter::Base);
 use strict;
-use warnings;
+use PublicInbox::Eml;
 
 my $l0 = qr/-+/; # older messages only had one '-'
 my $l1 =
@@ -25,7 +25,7 @@ sub scrub {
         # so in multipart (e.g. GPG-signed) messages, the list trailer
         # becomes invisible to MIME-aware email clients.
         if ($s =~ s/$l0\n$l1\n$l2\n$l3\n($l4\n)?\z//os) {
-                $mime = PublicInbox::MIME->new(\$s);
+                $mime = PublicInbox::Eml->new(\$s);
         }
         $self->ACCEPT($mime);
 }
diff --git a/lib/PublicInbox/Import.pm b/lib/PublicInbox/Import.pm
index de8ff55f..98aa7785 100644
--- a/lib/PublicInbox/Import.pm
+++ b/lib/PublicInbox/Import.pm
@@ -15,6 +15,7 @@ use PublicInbox::Address;
 use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp);
 use PublicInbox::ContentId qw(content_digest);
 use PublicInbox::MDA;
+use PublicInbox::Eml;
 use POSIX qw(strftime);
 
 sub new {
@@ -137,7 +138,7 @@ sub check_remove_v1 {
         $info =~ m!\A100644 blob ([a-f0-9]{40})\t!s or die "not blob: $info";
         my $oid = $1;
         my $msg = _cat_blob($r, $w, $oid) or die "BUG: cat-blob $1 failed";
-        my $cur = PublicInbox::MIME->new($msg);
+        my $cur = PublicInbox::Eml->new($msg);
         my $cur_s = $cur->header('Subject');
         $cur_s = '' unless defined $cur_s;
         my $cur_m = $mime->header('Subject');
diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm
index 186eb420..617b692b 100644
--- a/lib/PublicInbox/Inbox.pm
+++ b/lib/PublicInbox/Inbox.pm
@@ -7,7 +7,7 @@ use strict;
 use warnings;
 use PublicInbox::Git;
 use PublicInbox::MID qw(mid2path);
-use PublicInbox::MIME;
+use PublicInbox::Eml;
 
 # Long-running "git-cat-file --batch" processes won't notice
 # unlinked packs, so we need to restart those processes occasionally.
@@ -328,7 +328,7 @@ sub msg_by_smsg ($$;$) {
 sub smsg_mime {
         my ($self, $smsg, $ref) = @_;
         if (my $s = msg_by_smsg($self, $smsg, $ref)) {
-                $smsg->{mime} = PublicInbox::MIME->new($s);
+                $smsg->{mime} = PublicInbox::Eml->new($s);
                 return $smsg;
         }
 }
diff --git a/lib/PublicInbox/InboxWritable.pm b/lib/PublicInbox/InboxWritable.pm
index 31aa76c6..3558403b 100644
--- a/lib/PublicInbox/InboxWritable.pm
+++ b/lib/PublicInbox/InboxWritable.pm
@@ -117,7 +117,7 @@ sub mime_from_path ($) {
                 local $/;
                 my $str = <$fh>;
                 $str or return;
-                return PublicInbox::MIME->new(\$str);
+                return PublicInbox::Eml->new(\$str);
         } elsif ($!{ENOENT}) {
                 # common with Maildir
                 return;
@@ -162,7 +162,7 @@ sub mb_add ($$$$) {
         } elsif ($variant eq 'mboxo') {
                 $$msg =~ s/^>From /From /gms;
         }
-        my $mime = PublicInbox::MIME->new($msg);
+        my $mime = PublicInbox::Eml->new($msg);
         if ($filter) {
                 my $ret = $filter->scrub($mime) or return;
                 return if $ret == REJECT();
diff --git a/lib/PublicInbox/MDA.pm b/lib/PublicInbox/MDA.pm
index 33696528..57b436b9 100644
--- a/lib/PublicInbox/MDA.pm
+++ b/lib/PublicInbox/MDA.pm
@@ -5,7 +5,6 @@
 package PublicInbox::MDA;
 use strict;
 use warnings;
-use Email::Simple;
 use PublicInbox::MsgTime;
 use constant MAX_SIZE => 1024 * 500; # same as spamc default, should be tunable
 use constant MAX_MID_SIZE => 244; # max term size - 1 in Xapian
diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm
index f357a8fa..4bdd69f5 100644
--- a/lib/PublicInbox/SearchIdx.pm
+++ b/lib/PublicInbox/SearchIdx.pm
@@ -10,7 +10,7 @@ package PublicInbox::SearchIdx;
 use strict;
 use warnings;
 use base qw(PublicInbox::Search PublicInbox::Lock);
-use PublicInbox::MIME;
+use PublicInbox::Eml;
 use PublicInbox::InboxWritable;
 use PublicInbox::MID qw/mid_clean mid_mime mids_for_index/;
 use PublicInbox::MsgIter;
@@ -371,7 +371,7 @@ sub _msgmap_init ($) {
 }
 
 sub add_message {
-        # mime = Email::MIME object
+        # mime = PublicInbox::Eml or Email::MIME object
         my ($self, $mime, $smsg) = @_;
         my $hdr = $mime->header_obj;
         my $mids = mids_for_index($hdr);
@@ -560,7 +560,7 @@ sub do_cat_mail {
         my ($git, $blob, $sizeref) = @_;
         my $str = $git->cat_file($blob, $sizeref) or
                 die "BUG: $blob not found in $git->{git_dir}";
-        PublicInbox::MIME->new($str);
+        PublicInbox::Eml->new($str);
 }
 
 # called by public-inbox-index
diff --git a/lib/PublicInbox/SearchIdxShard.pm b/lib/PublicInbox/SearchIdxShard.pm
index 06bcd403..e754b038 100644
--- a/lib/PublicInbox/SearchIdxShard.pm
+++ b/lib/PublicInbox/SearchIdxShard.pm
@@ -8,6 +8,7 @@ use strict;
 use warnings;
 use base qw(PublicInbox::SearchIdx);
 use IO::Handle (); # autoflush
+use PublicInbox::Eml;
 
 sub new {
         my ($class, $v2writable, $shard) = @_;
@@ -75,7 +76,7 @@ sub shard_worker_loop ($$$$$) {
                         $self->begin_txn_lazy;
                         my $n = read($r, my $msg, $bytes) or die "read: $!\n";
                         $n == $bytes or die "short read: $n != $bytes\n";
-                        my $mime = PublicInbox::MIME->new(\$msg);
+                        my $mime = PublicInbox::Eml->new(\$msg);
                         my $smsg = bless {
                                 bytes => $bytes,
                                 num => $num + 0,
diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm
index 600843f0..978c3cd7 100644
--- a/lib/PublicInbox/TestCommon.pm
+++ b/lib/PublicInbox/TestCommon.pm
@@ -8,12 +8,15 @@ use parent qw(Exporter);
 use Fcntl qw(FD_CLOEXEC F_SETFD F_GETFD :seek);
 use POSIX qw(dup2);
 use IO::Socket::INET;
+use PublicInbox::MIME; # temporary
 our @EXPORT = qw(tmpdir tcp_server tcp_connect require_git require_mods
         run_script start_script key2sub xsys xqx mime_load eml_load);
 
 sub mime_load ($) {
         my ($path) = @_;
         open(my $fh, '<', $path) or die "open $path: $!";
+        # test should've called: require_mods('Email::MIME')
+        require PublicInbox::MIME;
         PublicInbox::MIME->new(\(do { local $/; <$fh> }));
 }
 
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm
index 01b8bed6..f599e0a0 100644
--- a/lib/PublicInbox/V2Writable.pm
+++ b/lib/PublicInbox/V2Writable.pm
@@ -9,7 +9,7 @@ use warnings;
 use base qw(PublicInbox::Lock);
 use 5.010_001;
 use PublicInbox::SearchIdxShard;
-use PublicInbox::MIME;
+use PublicInbox::Eml;
 use PublicInbox::Git;
 use PublicInbox::Import;
 use PublicInbox::MID qw(mids references);
@@ -357,9 +357,10 @@ sub content_ids ($) {
         my ($mime) = @_;
         my @cids = ( content_id($mime) );
 
+        # We still support Email::MIME, here, and
         # Email::MIME->as_string doesn't always round-trip, so we may
         # use a second content_id
-        my $rt = content_id(PublicInbox::MIME->new(\($mime->as_string)));
+        my $rt = content_id(PublicInbox::Eml->new(\($mime->as_string)));
         push @cids, $rt if $cids[0] ne $rt;
         \@cids;
 }
@@ -405,7 +406,7 @@ sub rewrite_internal ($$;$$$) {
                                 next; # continue
                         }
                         my $orig = $$msg;
-                        my $cur = PublicInbox::MIME->new($msg);
+                        my $cur = PublicInbox::Eml->new($msg);
                         if (content_matches($cids, $cur)) {
                                 $gone{$smsg->{num}} = [ $smsg, $cur, \$orig ];
                         }
@@ -842,7 +843,7 @@ sub content_exists ($$$) {
                         warn "broken smsg for $mid\n";
                         next;
                 }
-                my $cur = PublicInbox::MIME->new($msg);
+                my $cur = PublicInbox::Eml->new($msg);
                 return 1 if content_matches($cids, $cur);
 
                 # XXX DEBUG_DIFF is experimental and may be removed
@@ -870,7 +871,7 @@ sub mark_deleted ($$$$) {
         my ($self, $sync, $git, $oid) = @_;
         return if PublicInbox::SearchIdx::too_big($self, $git, $oid);
         my $msgref = $git->cat_file($oid);
-        my $mime = PublicInbox::MIME->new($$msgref);
+        my $mime = PublicInbox::Eml->new($$msgref);
         my $mids = mids($mime->header_obj);
         my $cid = content_id($mime);
         foreach my $mid (@$mids) {
@@ -901,7 +902,7 @@ sub reindex_oid_m ($$$$;$) {
         $self->{current_info} = "multi_mid $oid";
         my ($num, $mid0, $len);
         my $msgref = $git->cat_file($oid, \$len);
-        my $mime = PublicInbox::MIME->new($$msgref);
+        my $mime = PublicInbox::Eml->new($$msgref);
         my $mids = mids($mime->header_obj);
         my $cid = content_id($mime);
         die "BUG: reindex_oid_m called for <=1 mids" if scalar(@$mids) <= 1;
@@ -999,7 +1000,7 @@ sub reindex_oid ($$$$) {
         my ($num, $mid0, $len);
         my $msgref = $git->cat_file($oid, \$len);
         return if $len == 0; # purged
-        my $mime = PublicInbox::MIME->new($$msgref);
+        my $mime = PublicInbox::Eml->new($$msgref);
         my $mids = mids($mime->header_obj);
         my $cid = content_id($mime);
 
@@ -1193,7 +1194,7 @@ sub unindex_oid ($$$;$) {
         my ($self, $git, $oid, $unindexed) = @_;
         my $mm = $self->{mm};
         my $msgref = $git->cat_file($oid);
-        my $mime = PublicInbox::MIME->new($msgref);
+        my $mime = PublicInbox::Eml->new($msgref);
         my $mids = mids($mime->header_obj);
         $mime = $msgref = undef;
         my $over = $self->{over};
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 3328c865..ef5f4b3a 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -56,7 +56,7 @@ sub msg_page {
         } else {
                 $first = $ibx->msg_by_mid($mid) or return;
         }
-        my $mime = PublicInbox::MIME->new($first);
+        my $mime = PublicInbox::Eml->new($first);
         $ctx->{-obfs_ibx} = $ibx->{obfuscate} ? $ibx : undef;
         my $hdr = $ctx->{hdr} = $mime->header_obj;
         $ctx->{obuf} = _msg_page_prepare_obuf($hdr, $ctx, 0);
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index 1ff857de..289d0ce4 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -152,7 +152,7 @@ sub preload {
         require PublicInbox::Feed;
         require PublicInbox::View;
         require PublicInbox::SearchThread;
-        require PublicInbox::MIME;
+        require PublicInbox::Eml;
         require PublicInbox::Mbox;
         require PublicInbox::ViewVCS;
         require PublicInbox::WwwText;
diff --git a/lib/PublicInbox/WatchMaildir.pm b/lib/PublicInbox/WatchMaildir.pm
index 71bd84fc..7ca35403 100644
--- a/lib/PublicInbox/WatchMaildir.pm
+++ b/lib/PublicInbox/WatchMaildir.pm
@@ -6,7 +6,7 @@
 package PublicInbox::WatchMaildir;
 use strict;
 use warnings;
-use PublicInbox::MIME;
+use PublicInbox::Eml;
 use PublicInbox::InboxWritable;
 use File::Temp 0.19 (); # 0.19 for ->newdir
 use PublicInbox::Filter::Base qw(REJECT);
@@ -282,7 +282,7 @@ sub _spamcheck_cb {
                 my ($mime) = @_;
                 my $tmp = '';
                 if ($sc->spamcheck($mime, \$tmp)) {
-                        return PublicInbox::MIME->new(\$tmp);
+                        return PublicInbox::Eml->new(\$tmp);
                 }
                 warn $mime->header('Message-ID')." failed spam check\n";
                 undef;
diff --git a/lib/PublicInbox/WwwAttach.pm b/lib/PublicInbox/WwwAttach.pm
index b1009907..5b2914b3 100644
--- a/lib/PublicInbox/WwwAttach.pm
+++ b/lib/PublicInbox/WwwAttach.pm
@@ -7,8 +7,7 @@ use strict;
 use warnings;
 use bytes (); # only for bytes::length
 use Email::MIME::ContentType qw(parse_content_type);
-use PublicInbox::MIME;
-use PublicInbox::MsgIter;
+use PublicInbox::Eml;
 
 sub get_attach_i { # ->each_part callback
         my ($part, $depth, $idx) = @{$_[0]};
@@ -38,7 +37,7 @@ sub get_attach ($$$) {
         my ($ctx, $idx, $fn) = @_;
         my $res = [ 404, [ 'Content-Type', 'text/plain' ], [ "Not found\n" ] ];
         my $mime = $ctx->{-inbox}->msg_by_mid($ctx->{mid}) or return $res;
-        $mime = PublicInbox::MIME->new($mime);
+        $mime = PublicInbox::Eml->new($mime);
         $res->[3] = $idx;
         $mime->each_part(\&get_attach_i, $res, 1);
         pop @$res; # cleanup before letting PSGI server see it