about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-03-20 19:04:07 +0900
committerEric Wong <e@80x24.org>2021-03-21 09:45:50 +0000
commit0b3d4d72297f82cb43993074dfc4650a01f75683 (patch)
tree1e63ab9604b7c9ac71e5b5866e763d946a988895
parentbd287d742b81dab13e936727724e5c4de55c44c7 (diff)
downloadpublic-inbox-0b3d4d72297f82cb43993074dfc4650a01f75683.tar.gz
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".
-rw-r--r--lib/PublicInbox/LEI.pm3
-rw-r--r--lib/PublicInbox/LeiALE.pm19
-rw-r--r--lib/PublicInbox/LeiExternal.pm6
-rw-r--r--lib/PublicInbox/LeiQuery.pm4
-rw-r--r--t/lei_xsearch.t2
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');