user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
From: Eric Wong <e@80x24.org>
To: meta@public-inbox.org
Subject: [PATCH 4/4] config: use inbox names to map inboxes <-> coderepos
Date: Tue, 10 Jan 2023 11:49:21 +0000	[thread overview]
Message-ID: <20230110114921.2668377-5-e@80x24.org> (raw)
In-Reply-To: <20230110114921.2668377-1-e@80x24.org>

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

      parent reply	other threads:[~2023-01-10 11:49 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-10 11:49 [PATCH 0/4] www: more coderepo tweaks Eric Wong
2023-01-10 11:49 ` [PATCH 1/4] www_coderepo: handle "?h=$tip" in summary view Eric Wong
2023-01-10 11:49 ` [PATCH 2/4] www_coderepo: show tree root as "(root)" Eric Wong
2023-01-10 11:49 ` [PATCH 3/4] viewvcs: update comment about show_other_result Eric Wong
2023-01-10 11:49 ` Eric Wong [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://public-inbox.org/README

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230110114921.2668377-5-e@80x24.org \
    --to=e@80x24.org \
    --cc=meta@public-inbox.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).