From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 225DC1FB0E for ; Sat, 20 Mar 2021 10:04:08 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 5/5] lei: tie ALE lifetime to config file Date: Sat, 20 Mar 2021 19:04:07 +0900 Message-Id: <20210320100407.15713-6-e@80x24.org> In-Reply-To: <20210320100407.15713-1-e@80x24.org> References: <20210320100407.15713-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: This should make a future change to "lei import" work more nicely, since we'll be needing ALE to vivify external-only messages upon explicit "lei import". --- 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 +- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index 0da26a32..72a0e52c 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 bdb50a1a..45748435 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 aa09be9e..b5dd85e1 100644 --- a/lib/PublicInbox/LeiExternal.pm +++ b/lib/PublicInbox/LeiExternal.pm @@ -139,12 +139,6 @@ sub add_external_finish { 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 007e35fc..148e8524 100644 --- a/lib/PublicInbox/LeiQuery.pm +++ b/lib/PublicInbox/LeiQuery.pm @@ -57,10 +57,6 @@ sub lei_q { } 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 68211d18..e56b2820 100644 --- a/t/lei_xsearch.t +++ b/t/lei_xsearch.t @@ -90,7 +90,7 @@ is($lxs->over, undef, '->over fails'); 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');