From 9c3009655a0d365154f1119803465afc11713e79 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 9 Jun 2021 07:47:48 +0000 Subject: [PATCH] mdir_reader: maildir_each_file: pass flags, skip Trash This is a slight behavior change for "lei q": Trashed (but not-yet-expunged) messages no longer get unlinked when --output is used without --augment. --- lib/PublicInbox/LeiImport.pm | 4 +--- lib/PublicInbox/LeiPmdir.pm | 8 ++++---- lib/PublicInbox/MdirReader.pm | 5 +++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/PublicInbox/LeiImport.pm b/lib/PublicInbox/LeiImport.pm index b0e7ba6b..cddd5619 100644 --- a/lib/PublicInbox/LeiImport.pm +++ b/lib/PublicInbox/LeiImport.pm @@ -30,11 +30,9 @@ sub input_mbox_cb { # MboxReader callback } sub pmdir_cb { # called via wq_io_do from LeiPmdir->each_mdir_fn - my ($self, $f, @args) = @_; + my ($self, $f, $fl) = @_; my ($folder, $bn) = ($f =~ m!\A(.+?)/(?:new|cur)/([^/]+)\z!) or die "BUG: $f was not from a Maildir?\n"; - my $fl = PublicInbox::MdirReader::maildir_basename_flags($bn); - return if index($fl, 'T') >= 0; # no Trashed messages my $kw = PublicInbox::MdirReader::flags2kw($fl); substr($folder, 0, 0) = 'maildir:'; # add prefix my $lms = $self->{-lms_ro}; diff --git a/lib/PublicInbox/LeiPmdir.pm b/lib/PublicInbox/LeiPmdir.pm index b71efe70..aa9ce713 100644 --- a/lib/PublicInbox/LeiPmdir.pm +++ b/lib/PublicInbox/LeiPmdir.pm @@ -42,13 +42,13 @@ sub ipc_atfork_child { } sub each_mdir_fn { # maildir_each_file callback - my ($f, $self, @args) = @_; - $self->wq_io_do('mdir_iter', [], $f, @args); + my ($f, $fl, $self, @args) = @_; + $self->wq_io_do('mdir_iter', [], $f, $fl, @args); } sub mdir_iter { # via wq_io_do - my ($self, $f, @args) = @_; - $self->{ipt}->pmdir_cb($f, @args); + my ($self, $f, $fl, @args) = @_; + $self->{ipt}->pmdir_cb($f, $fl, @args); } sub pmd_done_wait { diff --git a/lib/PublicInbox/MdirReader.pm b/lib/PublicInbox/MdirReader.pm index 484bf0a8..dbb74d6d 100644 --- a/lib/PublicInbox/MdirReader.pm +++ b/lib/PublicInbox/MdirReader.pm @@ -42,9 +42,10 @@ sub maildir_each_file { my $pfx = $dir.$d; opendir my $dh, $pfx or next; while (defined(my $bn = readdir($dh))) { - maildir_basename_flags($bn) // next; + my $fl = maildir_basename_flags($bn) // next; next if defined($mod) && !shard_ok($bn, $mod, $shard); - $cb->($pfx.$bn, @arg); + next if index($fl, 'T') >= 0; # no Trashed messages + $cb->($pfx.$bn, $fl, @arg); } } } -- 2.44.0