]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/LEI.pm
dir_idle: treat IN_MOVED_FROM as a gone event
[public-inbox.git] / lib / PublicInbox / LEI.pm
index 6b989b33647ebb58ac75eb3323b50c03e0cd7ac9..b68e526bf365e056b8044a5fc89ff7527ca75a93 100644 (file)
@@ -19,7 +19,7 @@ use IO::Handle ();
 use Fcntl qw(SEEK_SET);
 use PublicInbox::Config;
 use PublicInbox::Syscall qw(EPOLLIN);
-use PublicInbox::DS qw(now dwaitpid);
+use PublicInbox::DS qw(dwaitpid);
 use PublicInbox::Spawn qw(spawn popen_rd);
 use PublicInbox::Lock;
 use PublicInbox::Eml;
@@ -178,8 +178,8 @@ our %CMD = ( # sorted in order of importance/use:
        shared color! mail-sync!), @c_opt, opt_dash('limit|n=i', '[0-9]+') ],
 
 'up' => [ 'OUTPUT...|--all', 'update saved search',
-       qw(jobs|j=s lock=s@ alert=s@ mua=s verbose|v+
-       remote-fudge-time=s all:s), @c_opt ],
+       qw(jobs|j=s lock=s@ alert=s@ mua=s verbose|v+ exclude=s@
+       remote-fudge-time=s all:s remote! local! external!), @c_opt ],
 
 'lcat' => [ '--stdin|MSGID_OR_URL...', 'display local copy of message(s)',
        'stdin|', # /|\z/ must be first for lone dash
@@ -510,10 +510,10 @@ sub sigpipe_handler { # handles SIGPIPE from @WQ_KEYS workers
 }
 
 sub fail ($$;$) {
-       my ($self, $buf, $exit_code) = @_;
+       my ($self, $msg, $exit_code) = @_;
        local $current_lei = $self;
        $self->{failed}++;
-       warn($buf, "\n") if defined $buf;
+       warn(substr($msg, -1, 1) eq "\n" ? $msg : "$msg\n") if defined $msg;
        $self->{pkt_op_p}->pkt_do('fail_handler') if $self->{pkt_op_p};
        x_it($self, ($exit_code // 1) << 8);
        undef;
@@ -534,7 +534,7 @@ sub child_error { # passes non-fatal curl exit codes to user
        my ($self, $child_error, $msg) = @_; # child_error is $?
        local $current_lei = $self;
        $child_error ||= 1 << 8;
-       warn($msg, "\n") if defined $msg;
+       warn(substr($msg, -1, 1) eq "\n" ? $msg : "$msg\n") if defined $msg;
        if ($self->{pkt_op_p}) { # to top lei-daemon
                $self->{pkt_op_p}->pkt_do('child_error', $child_error);
        } elsif ($self->{sock}) { # to lei(1) client
@@ -1198,7 +1198,7 @@ sub dir_idle_handler ($) { # PublicInbox::DirIdle callback
        my $fn = $ev->fullname;
        if ($fn =~ m!\A(.+)/(new|cur)/([^/]+)\z!) { # Maildir file
                my ($mdir, $nc, $bn) = ($1, $2, $3);
-               $nc = '' if $ev->IN_DELETE;
+               $nc = '' if $ev->IN_DELETE || $ev->IN_MOVED_FROM;
                for my $f (keys %{$MDIR2CFGPATH->{$mdir} // {}}) {
                        my $cfg = $PATH2CFG{$f} // next;
                        eval {
@@ -1315,11 +1315,10 @@ sub lazy_start {
                        $quit->();
                }
                return 1 if defined($path);
-               my $now = now();
                my $n = 0;
                for my $s (values %$dmap) {
                        $s->can('busy') or next;
-                       if ($s->busy($now)) {
+                       if ($s->busy) {
                                ++$n;
                        } else {
                                $s->close;