$lms->lms_write_prepare->lms_pause; # just create
}
}
- $l2m and $l2m->{-wq_nr_workers} //= $mj //
- int($nproc * 0.75 + 0.5); # keep some CPU for git
+ $l2m and $l2m->{-wq_nr_workers} //= $mj // do {
+ # keep some CPU for git, and don't overload IMAP destinations
+ my $n = int($nproc * 0.75 + 0.5);
+ $self->{net} && $n > 4 ? 4 : $n;
+ };
# descending docid order is cheapest, MUA controls sorting order
$self->{mset_opt}->{relevance} //= -2 if $l2m || $opt->{threads};
$lei->fail($@) if $@;
}
+# make the URI||PublicInbox::{Inbox,ExtSearch} a config-file friendly string
+sub cfg_ext ($) {
+ my ($x) = @_;
+ $x->isa('URI') ? "$x" : ($x->{inboxdir} // $x->{topdir});
+}
+
sub lxs_prepare {
my ($self) = @_;
require PublicInbox::LeiXSearch;
$lxs->prepare_external($self->{lse});
}
if (@only) {
+ my $only;
for my $loc (@only) {
my @loc = $self->get_externals($loc) or return;
- $lxs->prepare_external($_) for @loc;
+ for (@loc) {
+ my $x = $lxs->prepare_external($_);
+ push(@$only, cfg_ext($x)) if $x;
+ }
}
+ $opt->{only} = $only if $only;
} else {
- my (@ilocals, @iremotes);
+ my (@ilocals, @iremotes, $incl);
for my $loc (@{$opt->{include} // []}) {
my @loc = $self->get_externals($loc) or return;
- $lxs->prepare_external($_) for @loc;
+ 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'};