'rediff' => [ '--stdin|LOCATION...',
'regenerate a diff with different options',
'stdin|', # /|\z/ must be first for lone dash
- qw(git-dir=s@ cwd! verbose|v+ color:s no-color),
+ qw(git-dir=s@ cwd! verbose|v+ color:s no-color drq:1 dequote-only:1),
@diff_opt, @lxs_opt, @net_opt, @c_opt ],
'add-external' => [ 'LOCATION',
'add/set priority of a publicinbox|extindex for extra matches',
- qw(boost=i mirror=s inbox-version=i verbose|v+),
+ qw(boost=i mirror=s inbox-version=i epoch=s verbose|v+),
@c_opt, index_opt(), @net_opt ],
'ls-external' => [ '[FILTER]', 'list publicinbox|extindex locations',
qw(format|f=s z|0 globoff|g invert-match|v local remote), @c_opt ],
'remote' => 'limit operations to those requiring network access',
'remote!' => 'prevent operations requiring network access',
-'all:s up' => ['local|remote', 'update all remote or local saved searches' ],
+# up, refresh-mail-sync, export-kw
+'all:s' => ['TYPE|local|remote', 'all remote or local folders' ],
+
'remote-fudge-time=s' => [ 'INTERVAL',
'look for mail INTERVAL older than the last successful query' ],
my ($self, $buf, $exit_code) = @_;
$self->{failed}++;
err($self, $buf) if defined $buf;
- # calls fail_handler
- $self->{pkt_op_p}->pkt_do('!') if $self->{pkt_op_p};
+ $self->{pkt_op_p}->pkt_do('fail_handler') if $self->{pkt_op_p};
x_it($self, ($exit_code // 1) << 8);
undef;
}
sub note_sigpipe { # triggers sigpipe_handler
my ($self, $fd) = @_;
close(delete($self->{$fd})); # explicit close silences Perl warning
- $self->{pkt_op_p}->pkt_do('|') if $self->{pkt_op_p};
+ $self->{pkt_op_p}->pkt_do('sigpipe_handler') if $self->{pkt_op_p};
x_it($self, 13);
}
close $listener if $listener;
undef $listener;
$dir_idle->force_close if $dir_idle;
+ undef $dir_idle;
%PATH2CFG = ();
$MDIR2CFGPATH = {};
eval 'no warnings; undef $PublicInbox::LeiNoteEvent::to_flush';
sub pkt_ops {
my ($lei, $ops) = @_;
- $ops->{'!'} = [ \&fail_handler, $lei ];
- $ops->{'|'} = [ \&sigpipe_handler, $lei ];
- $ops->{x_it} = [ \&x_it, $lei ];
- $ops->{child_error} = [ \&child_error, $lei ];
- $ops->{incr} = [ \&incr, $lei ];
+ $ops->{fail_handler} = [ $lei ];
+ $ops->{sigpipe_handler} = [ $lei ];
+ $ops->{x_it} = [ $lei ];
+ $ops->{child_error} = [ $lei ];
+ $ops->{incr} = [ $lei ];
$ops;
}
my ($self) = @_;
delete $self->{-progress};
_drop_wq($self) if $self->{failed};
- close(delete $self->{1}) if $self->{1}; # may reap_compress
$self->close if $self->{-event_init_done}; # PublicInbox::DS::close
}
# $daemon pipe to `lei' closed, main loop begins:
eval { PublicInbox::DS->EventLoop };
warn "event loop error: $@\n" if $@;
+ # exit() may trigger waitpid via various DESTROY, ensure interruptible
+ PublicInbox::DS::sig_setmask($oldset);
dump_and_clear_log();
exit($exit_code // 0);
}
sub wq_eof { # EOF callback for main daemon
my ($lei) = @_;
my $wq1 = delete $lei->{wq1} // return $lei->fail; # already failed
- $wq1->wq_wait_old(\&wq_done_wait, $lei);
+ $wq1->wq_wait_old($wq1->can('_wq_done_wait') // \&wq_done_wait, $lei);
}
sub watch_state_ok ($) {
sub refresh_watches {
my ($lei) = @_;
+ $dir_idle or return;
my $cfg = _lei_cfg($lei) or return;
my $old = $cfg->{-watches};
my $watches = $cfg->{-watches} //= {};