]> Sergey Matveev's repositories - public-inbox.git/commitdiff
searchidxshard: allow msgref to be undef
authorEric Wong <e@80x24.org>
Tue, 27 Oct 2020 07:54:12 +0000 (07:54 +0000)
committerEric Wong <e@80x24.org>
Sat, 7 Nov 2020 10:18:40 +0000 (10:18 +0000)
We don't need to keep it in code paths which are guaranteed to
only see PublicInbox::Eml (and not Email::MIME or PublicInbox::MIME
which did not round-trip properly).  However, we must set
{raw_bytes} since PublicInbox::Eml may add an extra "\n" for
rare messages with no bodies.

lib/PublicInbox/SearchIdxShard.pm

index 8e24aa1b61cd992867695b0b81653491b2510a33..8ff9ab8bdf037a43f846923f680f90a8c19049f2 100644 (file)
@@ -107,13 +107,15 @@ sub shard_worker_loop ($$$$$) {
 sub index_raw {
        my ($self, $msgref, $eml, $smsg) = @_;
        if (my $w = $self->{w}) {
+               $msgref //= \($eml->as_string);
+               $smsg->{raw_bytes} //= length($$msgref);
                # mid must be last, it can contain spaces (but not LF)
                print $w join(' ', @$smsg{qw(raw_bytes bytes
                                                num blob ds ts tid mid)}),
                        "\n", $$msgref or die "failed to write shard $!\n";
        } else {
                if ($eml) {
-                       undef $$msgref;
+                       undef($$msgref) if $msgref;
                } else { # --xapian-only + --sequential-shard:
                        $eml = PublicInbox::Eml->new($msgref);
                }