From: Eric Wong <e@80x24.org>
Date: Tue, 10 Jan 2023 11:49:21 +0000 (+0000)
Subject: config: use inbox names to map inboxes <-> coderepos
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=64e922b569c6dc16d7e1d4851253b09da35b7265;p=public-inbox.git

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.
---

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
 	}
 }