X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=script%2Fpublic-inbox-watch;h=1d164aa39ab2df0b77c765ec60378ad087a0d8d8;hb=d73d783ab2cf14ba28ca63723223d8c85a68cdd5;hp=0249186000b6ee47ea45cd5d03e50a49e04bf333;hpb=cee907599bb7eda0695ae91cf8d633670a88d6c7;p=public-inbox.git diff --git a/script/public-inbox-watch b/script/public-inbox-watch index 02491860..1d164aa3 100755 --- a/script/public-inbox-watch +++ b/script/public-inbox-watch @@ -1,28 +1,51 @@ #!/usr/bin/perl -w # Copyright (C) 2016-2020 all contributors # License: AGPL-3.0+ +my $help = <autoflush use PublicInbox::Watch; use PublicInbox::Config; use PublicInbox::DS; use PublicInbox::Sigfd; use PublicInbox::Syscall qw($SFD_NONBLOCK); +my $do_scan = 1; +GetOptions('scan!' => \$do_scan, # undocumented, testing only + 'help|h' => \(my $show_help)) or do { print STDERR $help; exit 1 }; +if ($show_help) { print $help; exit 0 }; my $oldset = PublicInbox::Sigfd::block_signals(); STDOUT->autoflush(1); STDERR->autoflush(1); -my ($config, $watch); +local $0 = $0; # local since this script may be eval-ed +my $watch = PublicInbox::Watch->new(PublicInbox::Config->new); my $reload = sub { - $config = PublicInbox::Config->new; - $watch->quit if $watch; - $watch = PublicInbox::Watch->new($config); + my $prev = $watch or return; # SIGQUIT issued + $watch->quit; + $watch = PublicInbox::Watch->new(PublicInbox::Config->new); + if ($watch) { + warn("I: reloaded\n"); + } else { + warn("E: reloading failed\n"); + $watch = $prev; + } }; -$reload->(); + if ($watch) { - my $scan = sub { $watch->trigger_scan('full') if $watch }; + my $scan = sub { + return if !$watch; + warn "I: scanning\n"; + $watch->trigger_scan('full'); + }; my $quit = sub { $watch->quit if $watch; $watch = undef; + $0 .= ' quitting'; }; my $sig = { HUP => $reload, @@ -32,9 +55,8 @@ if ($watch) { $sig->{QUIT} = $sig->{TERM} = $sig->{INT} = $quit; # --no-scan is only intended for testing atm, undocumented. - unless (grep(/\A--no-scan\z/, @ARGV)) { - PublicInbox::DS::requeue($scan); - } + PublicInbox::DS::requeue($scan) if $do_scan; + my $sigfd = PublicInbox::Sigfd->new($sig, $SFD_NONBLOCK); local %SIG = (%SIG, %$sig) if !$sigfd; if (!$sigfd) {