X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiStore.pm;h=6888afb40d3568a9003e9ccf51d4e5d171d5aeaa;hb=ff96ecca608fbb444cce464d74047354585d852d;hp=af5edbc24732817eb3b2dcfd51b4d9da2dacc17d;hpb=1d6e1f9a6a66a42d18f109aea406237cf8571597;p=public-inbox.git diff --git a/lib/PublicInbox/LeiStore.pm b/lib/PublicInbox/LeiStore.pm index af5edbc2..6888afb4 100644 --- a/lib/PublicInbox/LeiStore.pm +++ b/lib/PublicInbox/LeiStore.pm @@ -183,7 +183,7 @@ sub add_eml_vmd { \@docids; } -sub remove_eml_vmd { +sub remove_eml_vmd { # remove just the VMD my ($self, $eml, $vmd) = @_; my ($eidx, $tl) = eidx_init($self); my @docids = _docids_for($self, $eml); @@ -204,6 +204,33 @@ sub set_sync_info { })->set_src($oidhex, $folder, $id); } +sub _remove_if_local { # git->cat_async arg + my ($bref, $oidhex, $type, $size, $self) = @_; + $self->{im}->remove($bref) if $bref; +} + +# remove the entire message from the index, does not touch mail_sync.sqlite3 +sub remove_eml { + my ($self, $eml) = @_; + my $im = $self->importer; # may create new epoch + my ($eidx, $tl) = eidx_init($self); + my $oidx = $eidx->{oidx}; + my @docids = _docids_for($self, $eml); + my $git = $eidx->git; + for my $docid (@docids) { + my $xr3 = $oidx->get_xref3($docid, 1); + for my $row (@$xr3) { + my (undef, undef, $oidbin) = @$row; + my $oidhex = unpack('H*', $oidbin); + $git->cat_async($oidhex, \&_remove_if_local, $self); + } + $eidx->idx_shard($docid)->ipc_do('xdb_remove', $docid); + $oidx->delete_by_num($docid); + } + $git->cat_async_wait; + \@docids; +} + sub add_eml { my ($self, $eml, $vmd, $xoids) = @_; my $im = $self->{-fake_im} // $self->importer; # may create new epoch