about summary refs log tree commit homepage
path: root/lib/PublicInbox/Config.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-03-16 23:02:16 -0800
committerEric Wong <e@80x24.org>2021-03-17 19:03:13 +0000
commita5968dc059f655a9ac62f1b8bf0bed2b90080b02 (patch)
treead57560f39f94358d93f2d4d492169e8f994f65a /lib/PublicInbox/Config.pm
parentbe940983157a1f8bd353cb1891f6971645c73e5d (diff)
downloadpublic-inbox-a5968dc059f655a9ac62f1b8bf0bed2b90080b02.tar.gz
Extsearch objects are duck-types of Inbox objects, and
are capable of supporting code repos all the same.
Diffstat (limited to 'lib/PublicInbox/Config.pm')
-rw-r--r--lib/PublicInbox/Config.pm48
1 files changed, 34 insertions, 14 deletions
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);