about summary refs log tree commit homepage
path: root/script/public-inbox-watch
diff options
context:
space:
mode:
Diffstat (limited to 'script/public-inbox-watch')
-rwxr-xr-xscript/public-inbox-watch24
1 files changed, 18 insertions, 6 deletions
diff --git a/script/public-inbox-watch b/script/public-inbox-watch
index 02491860..b6c6b202 100755
--- a/script/public-inbox-watch
+++ b/script/public-inbox-watch
@@ -11,18 +11,30 @@ use PublicInbox::Syscall qw($SFD_NONBLOCK);
 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,