lib/PublicInbox/LEI.pm | 3 +-- lib/PublicInbox/LeiALE.pm | 19 ++++++++++++++++--- lib/PublicInbox/LeiExternal.pm | 6 ------ lib/PublicInbox/LeiQuery.pm | 4 ---- t/lei_xsearch.t | 2 +- diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index 0da26a32825755c7f3534d2c50b9c70e04fc06f0..72a0e52c62d148a7b61da1ce063c0ac26e81583d 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -108,8 +108,7 @@ sub ale { my ($self) = @_; $self->{ale} //= do { require PublicInbox::LeiALE; - PublicInbox::LeiALE->new(cache_dir($self). - '/all_locals_ever.git'); + $self->_lei_cfg(1)->{ale} //= PublicInbox::LeiALE->new($self); }; } diff --git a/lib/PublicInbox/LeiALE.pm b/lib/PublicInbox/LeiALE.pm index bdb50a1a08a2b34b16531d5f9e1ca96f9ab1f404..45748435b53407995a66f337359b6833ba40eb6b 100644 --- a/lib/PublicInbox/LeiALE.pm +++ b/lib/PublicInbox/LeiALE.pm @@ -11,16 +11,29 @@ use v5.10.1; use parent qw(PublicInbox::LeiSearch PublicInbox::Lock); use PublicInbox::Git; use PublicInbox::Import; +use PublicInbox::LeiXSearch; use Fcntl qw(SEEK_SET); -sub new { - my ($cls, $d) = @_; +sub _new { + my ($d) = @_; PublicInbox::Import::init_bare($d, 'ale'); bless { git => PublicInbox::Git->new($d), lock_path => "$d/lei_ale.state", # dual-duty lock + state ibxish => [], # Inbox and ExtSearch (and LeiSearch) objects - }, $cls; + }, __PACKAGE__ +} + +sub new { + my ($self, $lei) = @_; + ref($self) or $self = _new($lei->cache_dir . '/all_locals_ever.git'); + my $lxs = PublicInbox::LeiXSearch->new; + $lxs->prepare_external($lei->_lei_store(1)->search); + for my $loc ($lei->externals_each) { # locals only + $lxs->prepare_external($loc) if -d $loc; + } + $self->refresh_externals($lxs); + $self; } sub over {} # undef for xoids_for diff --git a/lib/PublicInbox/LeiExternal.pm b/lib/PublicInbox/LeiExternal.pm index aa09be9ea980035d4a2024497c69d025c7bf523e..b5dd85e158b18f007cf53f97e6e6c08f896430e0 100644 --- a/lib/PublicInbox/LeiExternal.pm +++ b/lib/PublicInbox/LeiExternal.pm @@ -139,12 +139,6 @@ my $new_boost = $self->{opt}->{boost} // 0; my $key = "external.$location.boost"; my $cur_boost = $cfg->{$key}; return if defined($cur_boost) && $cur_boost == $new_boost; # idempotent - if (-d $location) { - require PublicInbox::LeiXSearch; - my $lxs = PublicInbox::LeiXSearch->new; - $lxs->prepare_external($location); - $self->ale->refresh_externals($lxs); - } $self->lei_config($key, $new_boost); } diff --git a/lib/PublicInbox/LeiQuery.pm b/lib/PublicInbox/LeiQuery.pm index 007e35fc41cf061b4ce963afc0ba99e0fda37d94..148e8524d6d97b716885ba8e0eff59d693b14225 100644 --- a/lib/PublicInbox/LeiQuery.pm +++ b/lib/PublicInbox/LeiQuery.pm @@ -57,10 +57,6 @@ $sto->write_prepare($self); } if ($opt->{'local'} //= scalar(@only) ? 0 : 1) { $lxs->prepare_external($lse); - } else { - my $tmp = PublicInbox::LeiXSearch->new; - $tmp->prepare_external($lse); - $self->ale->refresh_externals($tmp); } if (@only) { for my $loc (@only) { diff --git a/t/lei_xsearch.t b/t/lei_xsearch.t index 68211d181339d574b69d43b3681b1fe86a8623b0..e56b28204ca13f1e0fb616a0c2c60f24d48798e1 100644 --- a/t/lei_xsearch.t +++ b/t/lei_xsearch.t @@ -90,7 +90,7 @@ is($mset->size, 1, 'got m: match on medium+full XSearch mix'); my $mitem = ($mset->items)[0]; my $smsg = $lxs->smsg_for($mitem) or BAIL_OUT 'smsg_for broken'; - my $ale = PublicInbox::LeiALE->new("$home/ale"); + my $ale = PublicInbox::LeiALE::_new("$home/ale"); $ale->refresh_externals($lxs); my $exp = [ $smsg->{blob}, 'blob', -s 't/utf8.eml' ]; is_deeply([ $ale->git->check($smsg->{blob}) ], $exp, 'ale->git->check');