]> Sergey Matveev's repositories - public-inbox.git/commitdiff
config: use inbox names to map inboxes <-> coderepos
authorEric Wong <e@80x24.org>
Tue, 10 Jan 2023 11:49:21 +0000 (11:49 +0000)
committerEric Wong <e@80x24.org>
Wed, 11 Jan 2023 04:41:18 +0000 (04:41 +0000)
We can avoid having to deal with weakening references and then
later creating strong references in WwwCoderepo.

lib/PublicInbox/Config.pm
lib/PublicInbox/ViewVCS.pm
lib/PublicInbox/WwwCoderepo.pm

index c48ab2bd5c43c0c85d7c87fabf71782a2fe5c478..cdf06d850e764c7e46f312043414b0fda12df904 100644 (file)
@@ -404,10 +404,8 @@ sub repo_objs {
                        push @repo_objs, $repo if $repo;
                }
                if (scalar @repo_objs) {
-                       require Scalar::Util;
                        for (@repo_objs) {
-                               push @{$_->{-ibxs}}, $ibxish;
-                               Scalar::Util::weaken($_->{-ibxs}->[-1]);
+                               push @{$_->{ibx_names}}, $ibxish->{name};
                        }
                        $ibxish->{-repo_objs} = \@repo_objs;
                } else {
index 9a5596870bfc445ab600f2db5be7ec3aecd8dca1..6b641b327edda74e4c9ba73539daef7d34878258 100644 (file)
@@ -155,21 +155,24 @@ sub show_commit_start { # ->psgi_qx callback
 
 sub ibx_url_for {
        my ($ctx) = @_;
-       $ctx->{ibx} and return; # just fall back to $upfx
-       $ctx->{git} or return; # /$CODEREPO/$OID/s/ to (eidx|ibx)
+       $ctx->{ibx} and return; # fall back to $upfx
+       $ctx->{git} or return;
        if (my $ALL = $ctx->{www}->{pi_cfg}->ALL) {
-               $ALL->base_url // $ALL->base_url($ctx->{env});
-       } elsif (my $ibxs = $ctx->{git}->{-ibxs}) {
-               for my $ibx (@$ibxs) {
-                       if ($ibx->isrch) {
-                               return defined($ibx->{url}) ?
-                                       prurl($ctx->{env}, $ibx->{url}) :
-                                       "../../../$ibx->{name}/";
-                       }
+               return $ALL->base_url // $ALL->base_url($ctx->{env});
+       } elsif (my $ibx_names = $ctx->{git}->{ibx_names}) {
+               my $by_name = $ctx->{www}->{pi_cfg}->{-by_name};
+               for my $name (@$ibx_names) {
+                       my $ibx = $by_name->{$name} // do {
+                               warn "inbox `$name' no longer exists\n";
+                               next;
+                       };
+                       $ibx->isrch // next;
+                       return defined($ibx->{url}) ?
+                               prurl($ctx->{env}, $ibx->{url}) :
+                               "../../../$name/";
                }
-       } else {
-               undef;
        }
+       undef;
 }
 
 sub cmt_finalize {
index 53126e19b1ef781e2f8bcdbca5efeb0ff41667ba..e89a64565da7436a23f975259847b2b790271d7b 100644 (file)
@@ -42,13 +42,11 @@ sub prepare_coderepos {
                $k = substr($k, length('publicinbox.'), -length('.coderepo'));
                my $ibx = $pi_cfg->lookup_name($k) // next;
                $pi_cfg->repo_objs($ibx);
-               push @{$self->{-strong}}, $ibx; # strengthen {-ibxs} weakref
        }
        for my $k (grep(/\Aextindex\.(?:.+)\.coderepo\z/, keys %$pi_cfg)) {
                $k = substr($k, length('extindex.'), -length('.coderepo'));
                my $eidx = $pi_cfg->lookup_ei($k) // next;
                $pi_cfg->repo_objs($eidx);
-               push @{$self->{-strong}}, $eidx; # strengthen {-ibxs} weakref
        }
 }