From a5968dc059f655a9ac62f1b8bf0bed2b90080b02 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 16 Mar 2021 23:02:16 -0800 Subject: config: lazy-load coderepos, support extindex Extsearch objects are duck-types of Inbox objects, and are capable of supporting code repos all the same. --- lib/PublicInbox/Config.pm | 48 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 14 deletions(-) (limited to 'lib/PublicInbox/Config.pm') diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 113975dd..1037c884 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -355,6 +355,12 @@ sub _fill_code_repo { $git; } +sub get_all { + my ($self, $key) = @_; + my $v = $self->{$key} // return; + _array($v); +} + sub git_bool { my ($val) = $_[-1]; # $_[0] may be $self, or $val if ($val =~ /\A(?:false|no|off|[\-\+]?(?:0x)?0+)\z/i) { @@ -384,6 +390,34 @@ sub _one_val { $v->[-1]; } +sub repo_objs { + my ($self, $ibxish) = @_; + my $ibx_code_repos = $ibxish->{coderepo} or return; + $ibxish->{-repo_objs} //= do { + my $code_repos = $self->{-code_repos}; + my @repo_objs; + for my $nick (@$ibx_code_repos) { + my @parts = split(m!/!, $nick); + for (@parts) { + @parts = () unless valid_foo_name($_); + } + unless (@parts) { + warn "invalid coderepo name: `$nick'\n"; + next; + } + my $repo = $code_repos->{$nick} //= + _fill_code_repo($self, $nick); + push @repo_objs, $repo if $repo; + } + if (scalar @repo_objs) { + \@repo_objs; + } else { + delete $ibxish->{coderepo}; + undef; + } + } +} + sub _fill_ibx { my ($self, $name) = @_; my $pfx = "publicinbox.$name"; @@ -467,20 +501,6 @@ sub _fill_ibx { $ibx->{-no_obfuscate_re} = $self->{-no_obfuscate_re}; fill_all($self); # noop to populate -no_obfuscate } - if (my $ibx_code_repos = $ibx->{coderepo}) { - my $code_repos = $self->{-code_repos}; - my $repo_objs = $ibx->{-repo_objs} = []; - foreach my $nick (@$ibx_code_repos) { - my @parts = split(m!/!, $nick); - my $valid = 0; - $valid += valid_foo_name($_) foreach (@parts); - $valid == scalar(@parts) or next; - - my $repo = $code_repos->{$nick} //= - _fill_code_repo($self, $nick); - push @$repo_objs, $repo if $repo; - } - } if (my $es = ALL($self)) { require PublicInbox::Isearch; $ibx->{isrch} = PublicInbox::Isearch->new($ibx, $es); -- cgit v1.2.3-24-ge0c7