From 2b6580afae0c0449fa536b62c8fbad4408337a3f Mon Sep 17 00:00:00 2001 From: "Eric Wong (Contractor, The Linux Foundation)" Date: Wed, 4 Apr 2018 21:11:47 +0000 Subject: searchidx: ensure duplicated Message-IDs can be linked together This allows us to emulate the display of thread-aware MUAs when multiple messages share the same Message-ID. This also is a place where "public-inbox-index --reindex" is useful to fix existing messages and no schema version bump is necessary. --- lib/PublicInbox/SearchIdx.pm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 3412a615..06bce70a 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -334,7 +334,7 @@ sub add_message { }); # populates smsg->references for smsg->to_doc_data - my $refs = parse_references($smsg); + my $refs = parse_references($smsg, $mid0, $mids); my $data = $smsg->to_doc_data($oid, $mid0); foreach my $mid (@$mids) { $tg->index_text($mid, 1, 'XM'); @@ -463,22 +463,23 @@ sub term_generator { # write-only $self->{term_generator} = $tg; } -sub parse_references ($) { - my ($smsg) = @_; +sub parse_references ($$$) { + my ($smsg, $mid0, $mids) = @_; my $mime = $smsg->{mime}; my $hdr = $mime->header_obj; my $refs = references($hdr); + push(@$refs, @$mids) if scalar(@$mids) > 1; return $refs if scalar(@$refs) == 0; - # prevent circular references via References here: - my %mids = map { $_ => 1 } @{mids($hdr)}; + # prevent circular references here: + my %seen = ( $mid0 => 1 ); my @keep; foreach my $ref (@$refs) { if (length($ref) > PublicInbox::MID::MAX_MID_SIZE) { warn "References: <$ref> too long, ignoring\n"; next; } - next if $mids{$ref}; + next if $seen{$ref}++; push @keep, $ref; } $smsg->{references} = '<'.join('> <', @keep).'>' if @keep; -- cgit v1.2.3-24-ge0c7