From 64e922b569c6dc16d7e1d4851253b09da35b7265 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 10 Jan 2023 11:49:21 +0000 Subject: [PATCH] config: use inbox names to map inboxes <-> coderepos 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 } } -- 2.44.0