We can avoid having to deal with weakening references and then
later creating strong references in WwwCoderepo.
---
 lib/PublicInbox/Config.pm      |  4 +---
 lib/PublicInbox/ViewVCS.pm     | 27 +++++++++++++++------------
 lib/PublicInbox/WwwCoderepo.pm |  2 --
 3 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm
index c48ab2bd..cdf06d85 100644
--- a/lib/PublicInbox/Config.pm
+++ b/lib/PublicInbox/Config.pm
@@ -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 {
diff --git a/lib/PublicInbox/ViewVCS.pm b/lib/PublicInbox/ViewVCS.pm
index 9a559687..6b641b32 100644
--- a/lib/PublicInbox/ViewVCS.pm
+++ b/lib/PublicInbox/ViewVCS.pm
@@ -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 {
diff --git a/lib/PublicInbox/WwwCoderepo.pm b/lib/PublicInbox/WwwCoderepo.pm
index 53126e19..e89a6456 100644
--- a/lib/PublicInbox/WwwCoderepo.pm
+++ b/lib/PublicInbox/WwwCoderepo.pm
@@ -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
        }
 }
 

Reply via email to