From 7b0ba33ee90396dda20d69fe548d73b479c3912d Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 1 Feb 2020 09:12:15 +0000 Subject: config: assume multiple cgit URLs, too 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/"; -- cgit v1.2.3-24-ge0c7