]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Xapcmd.pm
treewide: fix %SIG localization, harder
[public-inbox.git] / lib / PublicInbox / Xapcmd.pm
index e37eece5937f52bead48cb24aa8cd18737eea40c..b962fa848c8ada9e0b3b029876cce808deb194a5 100644 (file)
@@ -8,7 +8,6 @@ use PublicInbox::Over;
 use PublicInbox::SearchIdx;
 use File::Temp 0.19 (); # ->newdir
 use File::Path qw(remove_tree);
-use File::Basename qw(dirname);
 use POSIX qw(WNOHANG _exit);
 
 # support testing with dev versions of Xapian which installs
@@ -150,7 +149,7 @@ sub process_queue {
 
        # run in parallel:
        my %pids;
-       local %SIG = %SIG;
+       local @SIG{keys %SIG} = values %SIG;
        setup_signals(\&kill_pids, \%pids);
        while (@$queue) {
                while (scalar(keys(%pids)) < $max && scalar(@$queue)) {
@@ -199,7 +198,7 @@ sub prepare_run {
                        warn
 "--reshard=$reshard ignored for v1 $ibx->{inboxdir}\n";
                }
-               my $dir = dirname($old);
+               my ($dir) = ($old =~ m!(.*?/)[^/]+/*\z!);
                same_fs_or_die($dir, $old);
                my $v = PublicInbox::Search::SCHEMA_VERSION();
                my $wip = File::Temp->newdir("xapian$v-XXXX", DIR => $dir);
@@ -286,7 +285,7 @@ sub run {
                PublicInbox::SearchIdx::load_xapian_writable();
        }
 
-       local %SIG = %SIG;
+       local @SIG{keys %SIG} = values %SIG;
        setup_signals();
        $ibx->with_umask(\&_run, $ibx, $cb, $opt);
 }
@@ -344,7 +343,7 @@ sub compact ($$) { # cb_spawn callback
        $pr->("$pfx `".join(' ', @$cmd)."'\n") if $pr;
        push @$cmd, $src, $dst;
        my ($rd, $pid);
-       local %SIG = %SIG;
+       local @SIG{keys %SIG} = values %SIG;
        setup_signals(\&kill_compact, \$pid);
        ($rd, $pid) = popen_rd($cmd, undef, $rdr);
        while (<$rd>) {
@@ -406,7 +405,7 @@ sub cpdb ($$) { # cb_spawn callback
        my $new = $newdir->dirname;
        my ($src, $cur_shard);
        my $reshard;
-       PublicInbox::SearchIdx::load_xapian_writable() or die;
+       PublicInbox::SearchIdx::load_xapian_writable();
        my $XapianDatabase = $PublicInbox::Search::X{Database};
        if (ref($old) eq 'ARRAY') {
                ($cur_shard) = ($new =~ m!(?:xap|ei)[0-9]+/([0-9]+)\b!);
@@ -429,9 +428,9 @@ sub cpdb ($$) { # cb_spawn callback
        }
 
        my ($tmp, $ft);
-       local %SIG = %SIG;
+       local @SIG{keys %SIG} = values %SIG;
        if ($opt->{compact}) {
-               my $dir = dirname($new);
+               my ($dir) = ($new =~ m!(.*?/)[^/]+/*\z!);
                same_fs_or_die($dir, $new);
                $ft = File::Temp->newdir("$new.compact-XXXX", DIR => $dir);
                setup_signals();