X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=script%2Fpublic-inbox-watch;h=2057066a2a9038589120d7ed424550aef44b1444;hb=b2b1006759730507731fcd3fc3e0de68239e3b92;hp=42ae55ae9b760567e4238738329a7457a59994b5;hpb=619b9d46b91cdf0f523b3804ec9a07b0f1ba4efe;p=public-inbox.git
diff --git a/script/public-inbox-watch b/script/public-inbox-watch
index 42ae55ae..2057066a 100755
--- a/script/public-inbox-watch
+++ b/script/public-inbox-watch
@@ -1,16 +1,27 @@
#!/usr/bin/perl -w
-# Copyright (C) 2016 all contributors
+# Copyright (C) 2016-2020 all contributors
# License: AGPL-3.0+
use strict;
use warnings;
use PublicInbox::WatchMaildir;
use PublicInbox::Config;
-my $config = PublicInbox::Config->new;
-my $watch_md = PublicInbox::WatchMaildir->new($config);
+my ($config, $watch_md);
+my $reload = sub {
+ $config = PublicInbox::Config->new;
+ $watch_md->quit if $watch_md;
+ $watch_md = PublicInbox::WatchMaildir->new($config);
+};
+$reload->();
if ($watch_md) {
- my $scan = sub { $watch_md->scan };
+ my $scan = sub { $watch_md->trigger_scan('full') if $watch_md };
+ $SIG{HUP} = $reload;
$SIG{USR1} = $scan;
$SIG{ALRM} = sub { $SIG{ALRM} = 'DEFAULT'; $scan->() };
- alarm(1);
- $watch_md->watch;
+ $SIG{QUIT} = $SIG{TERM} = $SIG{INT} = sub {
+ $watch_md->quit if $watch_md;
+ $watch_md = undef;
+ };
+ # --no-scan is only intended for testing atm, undocumented.
+ alarm(1) unless (grep(/\A--no-scan\z/, @ARGV));
+ $watch_md->watch while ($watch_md);
}