]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/LeiQuery.pm
lei: improve management around short-lived workers
[public-inbox.git] / lib / PublicInbox / LeiQuery.pm
index 743fa3f7b23600874f008ffdc9833273515529e9..84996e7e2f4b4e3d8985917f224eb56a67824eff 100644 (file)
@@ -50,6 +50,10 @@ sub lei_q {
        # --local is enabled by default unless --only is used
        # we'll allow "--only $LOCATION --local"
        my $sto = $self->_lei_store(1);
+       if (($opt->{'import-remote'} //= 1) |
+                       (($opt->{'import-before'} //= \1) ? 1 : 0)) {
+               $sto->write_prepare($self);
+       }
        my $lse = $sto->search;
        if ($opt->{'local'} //= scalar(@only) ? 0 : 1) {
                $lxs->prepare_external($lse);
@@ -60,9 +64,12 @@ sub lei_q {
                        $lxs->prepare_external($_) for @loc;
                }
        } else {
+               my (@ilocals, @iremotes);
                for my $loc (@{$opt->{include} // []}) {
                        my @loc = $self->get_externals($loc) or return;
                        $lxs->prepare_external($_) for @loc;
+                       @ilocals = @{$lxs->{locals} // []};
+                       @iremotes = @{$lxs->{remotes} // []};
                }
                # --external is enabled by default, but allow --no-external
                if ($opt->{external} //= 1) {
@@ -74,15 +81,16 @@ sub lei_q {
                        my $ne = $self->externals_each(\&prep_ext, $lxs, \%x);
                        $opt->{remote} //= !($lxs->locals - $opt->{'local'});
                        if ($opt->{'local'}) {
-                               delete($lxs->{remotes}) if !$opt->{remote};
+                               $lxs->{remotes} = \@iremotes if !$opt->{remote};
                        } else {
-                               delete($lxs->{locals});
+                               $lxs->{locals} = \@ilocals;
                        }
                }
        }
        unless ($lxs->locals || $lxs->remotes) {
                return $self->fail('no local or remote inboxes to search');
        }
+       $self->ale->refresh_externals($lxs);
        my ($xj, $mj) = split(/,/, $opt->{jobs} // '');
        if (defined($xj) && $xj ne '' && $xj !~ /\A[1-9][0-9]*\z/) {
                return $self->fail("`$xj' search jobs must be >= 1");