diff options
-rw-r--r-- | lib/PublicInbox/MsgIter.pm | 5 | ||||
-rw-r--r-- | lib/PublicInbox/SolverGit.pm | 5 | ||||
-rw-r--r-- | lib/PublicInbox/View.pm | 6 | ||||
-rw-r--r-- | lib/PublicInbox/WwwAtomStream.pm | 4 | ||||
-rw-r--r-- | lib/PublicInbox/WwwAttach.pm | 2 |
5 files changed, 11 insertions, 11 deletions
diff --git a/lib/PublicInbox/MsgIter.pm b/lib/PublicInbox/MsgIter.pm index cdd78b39..f238954b 100644 --- a/lib/PublicInbox/MsgIter.pm +++ b/lib/PublicInbox/MsgIter.pm @@ -12,10 +12,11 @@ use PublicInbox::MIME; # Like Email::MIME::walk_parts, but this is: # * non-recursive # * passes depth and indices to the iterator callback -sub msg_iter ($$;$) { - my ($mime, $cb, $cb_arg) = @_; +sub msg_iter ($$;$$) { + my ($mime, $cb, $cb_arg, $do_undef) = @_; my @parts = $mime->subparts; if (@parts) { + $mime = $_[0] = undef if $do_undef; # saves some memory my $i = 0; @parts = map { [ $_, 1, ++$i ] } @parts; while (my $p = shift @parts) { diff --git a/lib/PublicInbox/SolverGit.pm b/lib/PublicInbox/SolverGit.pm index 8629f0da..b48e8ac4 100644 --- a/lib/PublicInbox/SolverGit.pm +++ b/lib/PublicInbox/SolverGit.pm @@ -233,9 +233,8 @@ sub find_extract_diffs ($$$) { my $diffs = []; foreach my $smsg (@$msgs) { $ibx->smsg_mime($smsg) or next; - my $mime = delete $smsg->{mime}; - msg_iter($mime, \&extract_diff, - [$self, $diffs, $pre, $post, $ibx, $smsg]); + msg_iter(delete $smsg->{mime}, \&extract_diff, + [$self, $diffs, $pre, $post, $ibx, $smsg], 1); } @$diffs ? $diffs : undef; } diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 405da2a9..d88b34da 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -275,7 +275,7 @@ sub index_entry { # scan through all parts, looking for displayable text $ctx->{mhref} = $mhref; $ctx->{rv} = \$rv; - msg_iter($mime, \&add_text_body, $ctx); + msg_iter($mime, \&add_text_body, $ctx, 1); delete $ctx->{rv}; # add the footer @@ -506,12 +506,12 @@ sub thread_html_i { # PublicInbox::WwwStream::getline callback } sub multipart_text_as_html { - my ($mime, $mhref, $ctx) = @_; + my (undef, $mhref, $ctx) = @_; # $mime = $_[0] $ctx->{mhref} = $mhref; $ctx->{rv} = \(my $rv = ''); # scan through all parts, looking for displayable text - msg_iter($mime, \&add_text_body, $ctx); + msg_iter($_[0], \&add_text_body, $ctx, 1); ${delete $ctx->{rv}}; } diff --git a/lib/PublicInbox/WwwAtomStream.pm b/lib/PublicInbox/WwwAtomStream.pm index 9430dd97..9ec1383d 100644 --- a/lib/PublicInbox/WwwAtomStream.pm +++ b/lib/PublicInbox/WwwAtomStream.pm @@ -101,9 +101,9 @@ sub atom_header { sub feed_entry { my ($self, $smsg) = @_; my $ctx = $self->{ctx}; - my $mime = $smsg->{mime}; + my $mid = $smsg->mid; # may extract Message-ID from {mime} + my $mime = delete $smsg->{mime}; my $hdr = $mime->header_obj; - my $mid = $smsg->mid; my $irt = PublicInbox::View::in_reply_to($hdr); my $uuid = to_uuid($mid); my $base = $ctx->{feed_base_url}; diff --git a/lib/PublicInbox/WwwAttach.pm b/lib/PublicInbox/WwwAttach.pm index cda1c6c8..92f47e49 100644 --- a/lib/PublicInbox/WwwAttach.pm +++ b/lib/PublicInbox/WwwAttach.pm @@ -40,7 +40,7 @@ sub get_attach ($$$) { my $mime = $ctx->{-inbox}->msg_by_mid($ctx->{mid}) or return $res; $mime = PublicInbox::MIME->new($mime); $res->[3] = $idx; - msg_iter($mime, \&get_attach_i, $res); + msg_iter($mime, \&get_attach_i, $res, 1); pop @$res; # cleanup before letting PSGI server see it $res } |