lib/PublicInbox/MsgIter.pm | 5 +++-- lib/PublicInbox/SolverGit.pm | 5 ++--- lib/PublicInbox/View.pm | 6 +++--- lib/PublicInbox/WwwAtomStream.pm | 4 ++-- lib/PublicInbox/WwwAttach.pm | 2 +- diff --git a/lib/PublicInbox/MsgIter.pm b/lib/PublicInbox/MsgIter.pm index cdd78b39b2afaf75dea36062c40354afab2c1e18..f238954bcdd5b7a04c8f631c8308d067f3146945 100644 --- a/lib/PublicInbox/MsgIter.pm +++ b/lib/PublicInbox/MsgIter.pm @@ -12,10 +12,11 @@ # 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 8629f0dafeb4216b41ac2c0951c866c8e76c2dcf..b48e8ac429e8676687ad97919a1bcfb373b17f7e 100644 --- a/lib/PublicInbox/SolverGit.pm +++ b/lib/PublicInbox/SolverGit.pm @@ -233,9 +233,8 @@ 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 405da2a930a9fe104983cfec75ea20ea45d8bb72..d88b34da431f0975282993f885a6ab0ee44fa443 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -275,7 +275,7 @@ # 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 @@ $$skel; } 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 9430dd97679eed5049d65de63bc96129b8159b27..9ec1383dada276b101a35df7ea3809692609567e 100644 --- a/lib/PublicInbox/WwwAtomStream.pm +++ b/lib/PublicInbox/WwwAtomStream.pm @@ -101,9 +101,9 @@ # returns undef or string 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 cda1c6c8db3a0745e8ad28a1cffaad05e10de6cf..92f47e4913ae7b006da939e612969f3fdf1ad1a4 100644 --- a/lib/PublicInbox/WwwAttach.pm +++ b/lib/PublicInbox/WwwAttach.pm @@ -40,7 +40,7 @@ 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); $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 }