X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FFilter%2FRubyLang.pm;h=06e4ea7545c4e8e4d91e49d4f9a8fdefcf38ce77;hb=a6814118856da197b909d68721d461a3936a085b;hp=094ac1c2e7f6b56fe22b017ba80873c5e522b0ea;hpb=9bd675d33ad1e49bd2ebe12a1d216216e61380de;p=public-inbox.git diff --git a/lib/PublicInbox/Filter/RubyLang.pm b/lib/PublicInbox/Filter/RubyLang.pm index 094ac1c2..06e4ea75 100644 --- a/lib/PublicInbox/Filter/RubyLang.pm +++ b/lib/PublicInbox/Filter/RubyLang.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 all contributors +# Copyright (C) 2017-2020 all contributors # License: AGPL-3.0+ # Filter for lists.ruby-lang.org trailers @@ -22,26 +22,35 @@ sub new { $altid ||= $ibx->{altid}->[0]; } if ($altid) { - require PublicInbox::MID; # mid_clean require PublicInbox::AltId; $self->{-altid} = PublicInbox::AltId->new($ibx, $altid, 1); } $self; } +sub scrub_part ($) { + my ($part) = @_; + my $ct = $part->content_type; + if (!$ct || $ct =~ m{\btext/plain\b}i) { + my $s = eval { $part->body_str }; + if (defined $s && $s =~ s/\n?$l1\n$l2\n\z//os) { + $part->body_str_set($s); + return 1; + } + } + 0; +} + sub scrub { my ($self, $mime, $for_remove) = @_; - # no msg_iter here, that is only for read-only access - $mime->walk_parts(sub { - my ($part) = $_[0]; - my $ct = $part->content_type; - if (!$ct || $ct =~ m{\btext/plain\b}i) { - my $s = eval { $part->body_str }; - if (defined $s && $s =~ s/\n?$l1\n$l2\n\z//os) { - $part->body_str_set($s); - } - } - }); + # no msg_iter here, msg_iter is only for read-only access + if (my @sub = $mime->subparts) { + my $changed = 0; + $changed |= scrub_part($_) for @sub; + $mime->parts_set(\@sub) if $changed; + } else { + scrub_part($mime); + } my $altid = $self->{-altid}; if ($altid && !$for_remove) { my $hdr = $mime->header_obj;