diff options
-rw-r--r-- | Documentation/RelNotes/v2.0.0.wip | 3 | ||||
-rw-r--r-- | lib/PublicInbox/LeiStore.pm | 8 | ||||
-rw-r--r-- | t/lei-import.t | 17 |
3 files changed, 26 insertions, 2 deletions
diff --git a/Documentation/RelNotes/v2.0.0.wip b/Documentation/RelNotes/v2.0.0.wip index cd90bdae..cccf11ae 100644 --- a/Documentation/RelNotes/v2.0.0.wip +++ b/Documentation/RelNotes/v2.0.0.wip @@ -60,6 +60,9 @@ lei * fix `lei q -tt' on locally-indexed messages (still broken for remotes: https://public-inbox.org/meta/20230226170931.M947721@dcvr/ ) + * `lei import' now set labels+keywords consistently on all + already-imported messages + solver (used by lei (rediff|blob), and PublicInbox::WWW) * handle copies in patches properly diff --git a/lib/PublicInbox/LeiStore.pm b/lib/PublicInbox/LeiStore.pm index cf5a03a0..727de066 100644 --- a/lib/PublicInbox/LeiStore.pm +++ b/lib/PublicInbox/LeiStore.pm @@ -387,8 +387,14 @@ sub add_eml { _lms_rw($self)->set_src($smsg->oidbin, @{$vmd->{sync_info}}); } unless ($im_mark) { # duplicate blob returns undef - return unless wantarray; + return unless wantarray || $vmd; my @docids = $oidx->blob_exists($smsg->{blob}); + if ($vmd) { + for my $docid (@docids) { + my $idx = $eidx->idx_shard($docid); + _add_vmd($self, $idx, $docid, $vmd); + } + } return _docids_and_maybe_kw $self, \@docids; } diff --git a/t/lei-import.t b/t/lei-import.t index 6e9a853c..c9e668a3 100644 --- a/t/lei-import.t +++ b/t/lei-import.t @@ -1,5 +1,5 @@ #!perl -w -# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org> +# Copyright (C) all contributors <meta@public-inbox.org> # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> use strict; use v5.10.1; use PublicInbox::TestCommon; test_lei(sub { @@ -110,6 +110,21 @@ $res = json_utf8->decode($lei_out); is_deeply($res->[0]->{kw}, ['seen'], 'keyword set'); is_deeply($res->[0]->{L}, ['inbox'], 'label set'); +# idempotent import can add label +lei_ok([qw(import -F eml - +L:boombox)], + undef, { %$lei_opt, 0 => \$eml_str }); +lei_ok(qw(q m:inbox@example.com)); +$res = json_utf8->decode($lei_out); +is_deeply($res->[0]->{kw}, ['seen'], 'keyword remains set'); +is_deeply($res->[0]->{L}, [qw(boombox inbox)], 'new label added'); + +# idempotent import can add keyword +lei_ok([qw(import -F eml - +kw:answered)], + undef, { %$lei_opt, 0 => \$eml_str }); +lei_ok(qw(q m:inbox@example.com)); +$res = json_utf8->decode($lei_out); +is_deeply($res->[0]->{kw}, [qw(answered seen)], 'keyword added'); +is_deeply($res->[0]->{L}, [qw(boombox inbox)], 'labels preserved'); # see t/lei_to_mail.t for "import -F mbox*" }); |