X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiToMail.pm;h=4c33c7529a1042f0a58eb0f2540756fb2eb144da;hb=5565abd5ca88deec5cf505d2fb75ad5bac54bbcf;hp=847e5cb9700f6fe0fd37a34199dbb20e74151b4a;hpb=9d08d49c68541babf0e618b20f5a1cd11c7c256e;p=public-inbox.git diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm index 847e5cb9..4c33c752 100644 --- a/lib/PublicInbox/LeiToMail.pm +++ b/lib/PublicInbox/LeiToMail.pm @@ -227,24 +227,25 @@ sub _mbox_write_cb ($$) { sub update_kw_maybe ($$$$) { my ($lei, $lse, $eml, $kw) = @_; return unless $lse; - my $x = $lse->kw_changed($eml, $kw); + my $lse_oids = $lse->kw_changed($eml, $kw); my $vmd = { kw => $kw }; - if ($x) { + if ($lse_oids) { # already in lei/store + $lei->{sto}->ipc_do('set_eml', $eml, $vmd); + } elsif (my $xoids = $lei->{ale}->xoids_for($eml)) { + # it's in an external, only set kw, here + $lei->{sto}->ipc_do('set_xvmd', $xoids, $eml, $vmd); + } else { # never-before-seen, import the whole thing + # XXX this is critical in protecting against accidental + # data loss without --augment $lei->{sto}->ipc_do('set_eml', $eml, $vmd); - } elsif (!defined($x)) { - if (my $xoids = $lei->{ale}->xoids_for($eml)) { - $lei->{sto}->ipc_do('set_xvmd', $xoids, $eml, $vmd); - } else { - $lei->{sto}->ipc_do('set_eml', $eml, $vmd); - } } } sub _augment_or_unlink { # maildir_each_eml cb my ($f, $kw, $eml, $lei, $lse, $mod, $shard, $unlink) = @_; if ($mod) { - # can't get dirent.d_ino w/ pure Perl, so we extract the OID - # if it looks like one: + # can't get dirent.d_ino w/ pure Perl readdir, so we extract + # the OID if it looks like one instead of doing stat(2) my $hex = $f =~ m!\b([a-f0-9]{40,})[^/]*\z! ? $1 : sha256_hex($f); my $recno = hex(substr($hex, 0, 8)); @@ -564,7 +565,7 @@ sub do_post_auth { my $shard = $self->{-wq_worker_nr}; if (my $net = $lei->{net}) { $net->{shard_info} = [ $mod, $shard ]; - } else { # Maildir (MH?) + } else { # Maildir $self->{shard_info} = [ $mod, $shard ]; } $aug = '+'; # incr_post_augment @@ -595,7 +596,7 @@ sub ipc_atfork_child { } sub lock_free { - $_[0]->{base_type} =~ /\A(?:maildir|mh|imap|jmap)\z/ ? 1 : 0; + $_[0]->{base_type} =~ /\A(?:maildir|imap|jmap)\z/ ? 1 : 0; } sub poke_dst {