- my $xj = $lxs->concurrency($opt);
- my $ovv = PublicInbox::LeiOverview->new($self) or return;
- $self->atfork_prepare_wq($lxs);
- $lxs->wq_workers_start('lei_xsearch', $xj, $self->oldset);
- delete $lxs->{-ipc_atfork_child_close};
- if (my $l2m = $self->{l2m}) {
- my $mj = 4; # TODO: configurable
- $self->atfork_prepare_wq($l2m);
- $l2m->wq_workers_start('lei2mail', $mj, $self->oldset);
- delete $l2m->{-ipc_atfork_child_close};
+ if (@only) {
+ my $only;
+ for my $loc (@only) {
+ my @loc = $self->get_externals($loc) or return;
+ for (@loc) {
+ my $x = $lxs->prepare_external($_);
+ push(@$only, cfg_ext($x)) if $x;
+ }
+ }
+ $opt->{only} = $only if $only;
+ } else {
+ my (@ilocals, @iremotes, $incl);
+ for my $loc (@{$opt->{include} // []}) {
+ my @loc = $self->get_externals($loc) or return;
+ for (@loc) {
+ my $x = $lxs->prepare_external($_);
+ push(@$incl, cfg_ext($x)) if $x;
+ }
+ @ilocals = @{$lxs->{locals} // []};
+ @iremotes = @{$lxs->{remotes} // []};
+ }
+ $opt->{include} = $incl if $incl;
+ # --external is enabled by default, but allow --no-external
+ if ($opt->{external} //= 1) {
+ my $ex = $self->canonicalize_excludes($opt->{exclude});
+ my @excl = keys %$ex;
+ $opt->{exclude} = \@excl if scalar(@excl);
+ $self->externals_each(\&prep_ext, $lxs, $ex);
+ $opt->{remote} //= !($lxs->locals - $opt->{'local'});
+ $lxs->{locals} = \@ilocals if !$opt->{'local'};
+ $lxs->{remotes} = \@iremotes if !$opt->{remote};
+ }