From 9ebb1544ac677d3ed37231cfd78624916b6f2945 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 27 Oct 2020 07:54:48 +0000 Subject: extsearchidx: handle edits We can now handle cases where messages are edited in one inbox but not another, bifurcating the message. V2Writable::log_range handles some edge-cases which could happen in v2-only code paths, as well, but weren't usually triggered due to default git-gc knobs not pruning immediately --- t/extsearch.t | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 't') diff --git a/t/extsearch.t b/t/extsearch.t index 108ffaeb..8d2c1507 100644 --- a/t/extsearch.t +++ b/t/extsearch.t @@ -35,8 +35,8 @@ run_script(['-index', "$home/v1test"]) or BAIL_OUT "index $?"; ok(run_script([qw(-eindex --all), "$home/eindex"]), 'eindex init'); +my $es = PublicInbox::ExtSearch->new("$home/eindex"); { - my $es = PublicInbox::ExtSearch->new("$home/eindex"); my $smsg = $es->over->get_art(1); ok($smsg, 'got first article'); is($es->over->get_art(2), undef, 'only one added'); @@ -46,4 +46,30 @@ ok(run_script([qw(-eindex --all), "$home/eindex"]), 'eindex init'); is(scalar(@$xref3), 2, 'only to entries'); } +{ + my ($in, $out, $err); + $in = $out = $err = ''; + my $opt = { 0 => \$in, 1 => \$out, 2 => \$err }; + my $env = { MAIL_EDITOR => "$^X -i -p -e 's/test message/BEST MSG/'" }; + my $cmd = [ qw(-edit -Ft/utf8.eml), "$home/v2test" ]; + ok(run_script($cmd, $env, $opt), '-edit'); + ok(run_script([qw(-eindex --all), "$home/eindex"], undef, $opt), + 'eindex again'); + like($err, qr/discontiguous range/, 'warned about discontiguous range'); + my $msg1 = $es->over->get_art(1) or BAIL_OUT 'msg1 missing'; + my $msg2 = $es->over->get_art(2) or BAIL_OUT 'msg2 missing'; + is($msg1->{mid}, $msg2->{mid}, 'edited message indexed'); + isnt($msg1->{blob}, $msg2->{blob}, 'blobs differ'); + my $eml2 = $es->smsg_eml($msg2); + like($eml2->body, qr/BEST MSG/, 'edited body in #2'); + unlike($eml2->body, qr/test message/, 'old body discarded in #2'); + my $eml1 = $es->smsg_eml($msg1); + like($eml1->body, qr/test message/, 'original body in #1'); + my $x1 = $es->over->get_xref3(1); + my $x2 = $es->over->get_xref3(2); + is(scalar(@$x1), 1, 'original only has one xref3'); + is(scalar(@$x2), 1, 'new message has one xref3'); + isnt($x1->[0], $x2->[0], 'xref3 differs'); +} + done_testing; -- cgit v1.2.3-24-ge0c7