user/dev discussion of public-inbox itself
 help / color / Atom feed
From: Eric Wong <e@yhbt.net>
To: meta@public-inbox.org
Subject: [PATCH 4/4] config: assume multiple cgit URLs, too
Date: Sat,  1 Feb 2020 09:12:15 +0000
Message-ID: <20200201091215.30024-5-e@yhbt.net> (raw)
In-Reply-To: <20200201091215.30024-1-e@yhbt.net>

Since we support inboxes with multiple URLs and multiple
infourls to reduce reliance on SPOFs, we'll do the same with
cgit URLs.
---
 lib/PublicInbox/Config.pm  |  8 ++++++--
 lib/PublicInbox/WwwText.pm | 18 +++++++++++-------
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm
index 1ba1225e..e0ca7c5a 100644
--- a/lib/PublicInbox/Config.pm
+++ b/lib/PublicInbox/Config.pm
@@ -190,6 +190,9 @@ sub cgit_repo_merge ($$$) {
 		return unless -e "$path/$se";
 	}
 	return if -e "$path/noweb";
+	# this comes from the cgit config, and AFAIK cgit only allows
+	# repos to have one URL, but that's just the PATH_INFO component,
+	# not the Host: portion
 	# $repo = { url => 'foo.git', dir => '/path/to/foo.git' }
 	my $rel = $repo->{url};
 	unless (defined $rel) {
@@ -207,7 +210,7 @@ sub cgit_repo_merge ($$$) {
 			$rel =~ s!/?\.git\z!!;
 	}
 	$self->{"coderepo.$rel.dir"} //= $path;
-	$self->{"coderepo.$rel.cgiturl"} //= $rel;
+	$self->{"coderepo.$rel.cgiturl"} //= _array($rel);
 }
 
 sub is_git_dir ($) {
@@ -332,8 +335,9 @@ sub _fill_code_repo {
 				_array($self->{lc("$pfx.${t}UrlFormat")});
 	}
 
-	if (my $cgits = $self->{lc("$pfx.cgitUrl")}) {
+	if (defined(my $cgits = $self->{"$pfx.cgiturl"})) {
 		$git->{cgit_url} = $cgits = _array($cgits);
+		$self->{"$pfx.cgiturl"} = $cgits;
 
 		# cgit supports "/blob/?id=%s", but it's only a plain-text
 		# display and requires an unabbreviated id=
diff --git a/lib/PublicInbox/WwwText.pm b/lib/PublicInbox/WwwText.pm
index fbbe8e3b..c084b5bf 100644
--- a/lib/PublicInbox/WwwText.pm
+++ b/lib/PublicInbox/WwwText.pm
@@ -168,17 +168,21 @@ EOS
 
 		my $pi_config = $ctx->{www}->{pi_config};
 		for my $cr_name (@$cr) {
-			my $url = $pi_config->{"coderepo.$cr_name.cgiturl"};
+			my $urls = $pi_config->{"coderepo.$cr_name.cgiturl"};
 			my $path = "/path/to/$cr_name";
 			$cr_name = dq_escape($cr_name);
 
 			$$txt .= qq([coderepo "$cr_name"]\n);
-			if (defined($url)) {
-				my $cpath = $path;
-				if ($path !~ m![a-z0-9_/\.\-]!i) {
-					$cpath = dq_escape($cpath);
-				}
-				$$txt .= qq(\t; git clone $url "$cpath"\n);
+			if ($urls && scalar(@$urls)) {
+				$$txt .= "\t; ";
+				$$txt .= join(" ||\n\t;\t", map {;
+					my $cpath = $path;
+					if ($path !~ m![a-z0-9_/\.\-]!i) {
+						$cpath = dq_escape($cpath);
+					}
+					qq(git clone $_ "$cpath");
+				} @$urls);
+				$$txt .= "\n";
 			}
 			$$txt .= "\tdir = $path\n";
 			$$txt .= "\tcgiturl = https://example.com/";

      parent reply index

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-01  9:12 [PATCH 0/4] flesh out multi-URL support Eric Wong
2020-02-01  9:12 ` [PATCH 1/4] wwwtext: show multiple infourl values properly Eric Wong
2020-02-01  9:12 ` [PATCH 2/4] wwwtext: give "url" examples in sample config Eric Wong
2020-02-01  9:12 ` [PATCH 3/4] solver: join multiple URLs with "||" Eric Wong
2020-02-01  9:12 ` 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=20200201091215.30024-5-e@yhbt.net \
    --to=e@yhbt.net \
    --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

user/dev discussion of public-inbox itself

Archives are clonable:
	git clone --mirror https://public-inbox.org/meta
	git clone --mirror http://czquwvybam4bgbro.onion/meta
	git clone --mirror http://hjrcffqmbrq6wope.onion/meta
	git clone --mirror http://ou63pmih66umazou.onion/meta

Example config snippet for mirrors

Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.mail.public-inbox.meta
	nntp://ou63pmih66umazou.onion/inbox.comp.mail.public-inbox.meta
	nntp://czquwvybam4bgbro.onion/inbox.comp.mail.public-inbox.meta
	nntp://hjrcffqmbrq6wope.onion/inbox.comp.mail.public-inbox.meta
	nntp://news.gmane.io/gmane.mail.public-inbox.general

 note: .onion URLs require Tor: https://www.torproject.org/

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git