From 4363e6037fa7d597294186f60373e9de8e1b3d74 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 26 Aug 2021 12:33:34 +0000 Subject: [PATCH] www: avoid incorrect instructions for extindex There's no way to clone an extindex, since there's no git storage associated with them. So attempt to link to the HTML listing of public-inboxes, instead. --- lib/PublicInbox/ExtSearch.pm | 4 -- lib/PublicInbox/WwwStream.pm | 111 +++++++++++++++++++---------------- 2 files changed, 62 insertions(+), 53 deletions(-) diff --git a/lib/PublicInbox/ExtSearch.pm b/lib/PublicInbox/ExtSearch.pm index 0b480c7e..bd301158 100644 --- a/lib/PublicInbox/ExtSearch.pm +++ b/lib/PublicInbox/ExtSearch.pm @@ -106,10 +106,6 @@ sub description { '$EXTINDEX_DIR/description missing'; } -sub cloneurl { [] } # TODO - -sub nntp_url { [] } - no warnings 'once'; *base_url = \&PublicInbox::Inbox::base_url; *smsg_eml = \&PublicInbox::Inbox::smsg_eml; diff --git a/lib/PublicInbox/WwwStream.pm b/lib/PublicInbox/WwwStream.pm index 57c23690..d8142824 100644 --- a/lib/PublicInbox/WwwStream.pm +++ b/lib/PublicInbox/WwwStream.pm @@ -120,52 +120,50 @@ sub code_footer ($) { sub _html_end { my ($ctx) = @_; - my $urls = <This inbox may be cloned and mirrored by anyone: -EOF - my $ibx = $ctx->{ibx}; my $desc = ascii_html($ibx->description); - - my @urls; + my $s = ""; my $http = $ctx->{base_url}; - my $max = $ibx->max_git_epoch; my $dir = (split(m!/!, $http))[-1]; my %seen = ($http => 1); - # TODO: some of these URLs may be too long and we may need to - # do something like code_footer() above, but these are local - # admin-defined - if (defined($max)) { # v2 - for my $i (0..$max) { - # old epochs my be deleted: - -d "$ibx->{inboxdir}/git/$i.git" or next; - my $url = "$http/$i"; - $seen{$url} = 1; - push @urls, "$url $dir/git/$i.git"; + if ($ibx->can('cloneurl')) { # PublicInbox::Inbox + $s .= "This inbox may be cloned and mirrored by anyone:\n"; + my @urls; + my $max = $ibx->max_git_epoch; + # TODO: some of these URLs may be too long and we may need to + # do something like code_footer() above, but these are local + # admin-defined + if (defined($max)) { # v2 + for my $i (0..$max) { + # old epochs my be deleted: + -d "$ibx->{inboxdir}/git/$i.git" or next; + my $url = "$http/$i"; + $seen{$url} = 1; + push @urls, "$url $dir/git/$i.git"; + } + my $nr = scalar(@urls); + if ($nr > 1) { + $s .= "\n\t"; + $s .= "# this inbox consists of $nr epochs:"; + $urls[0] .= "\t# oldest"; + $urls[-1] .= "\t# newest"; + } + } else { # v1 + push @urls, $http; } - my $nr = scalar(@urls); - if ($nr > 1) { - $urls .= "\n\t# this inbox consists of $nr epochs:"; - $urls[0] .= "\t# oldest"; - $urls[-1] .= "\t# newest"; + # FIXME: epoch splits can be different in other repositories, + # use the "cloneurl" file as-is for now: + for my $u (@{$ibx->cloneurl}) { + next if $seen{$u}++; + push @urls, ($u =~ /\Ahttps?:/ ? + qq($u) : $u); } - } else { # v1 - push @urls, $http; - } - - # FIXME: epoch splits can be different in other repositories, - # use the "cloneurl" file as-is for now: - foreach my $u (@{$ibx->cloneurl}) { - next if $seen{$u}++; - push @urls, $u =~ /\Ahttps?:/ ? qq($u) : $u; - } - - $urls .= "\n" . join('', map { "\tgit clone --mirror $_\n" } @urls); - if (my $addrs = $ibx->{address}) { - $addrs = join(' ', @$addrs) if ref($addrs) eq 'ARRAY'; - my $v = defined $max ? '-V2' : '-V1'; - $urls .= <{address}) { + $addrs = join(' ', @$addrs) if ref($addrs) eq 'ARRAY'; + my $v = defined $max ? '-V2' : '-V1'; + $s .= < +EOM + my $v = $ctx->{www}->{pi_cfg}->{lc('publicInbox.wwwListing')}; + if (($v // '') =~ /\A(?:all|match=domain)\z/) { + my $upfx = ($ctx->{-upfx} // ''). '../'; + $s .= <listing +EOM + } } + my $cfg_link = ($ctx->{-upfx} // '').'_/text/config/raw'; - $urls .= <config snippet for mirrors. EOF - my @nntp = map { qq($_) } @{$ibx->nntp_url}; - if (@nntp) { - $urls .= @nntp == 1 ? 'Newsgroup' : 'Newsgroups are'; - $urls .= ' available over NNTP:'; - $urls .= "\n\t" . join("\n\t", @nntp) . "\n"; + if ($ibx->can('nntp_url')) { + my @nntp = map { qq($_) } @{$ibx->nntp_url}; + if (@nntp) { + $s .= @nntp == 1 ? 'Newsgroup' : 'Newsgroups are'; + $s .= ' available over NNTP:'; + $s .= "\n\t" . join("\n\t", @nntp) . "\n"; + } } - if ($urls =~ m!\b[^:]+://\w+\.onion/!) { - $urls .= " note: .onion URLs require Tor: "; - $urls .= qq[$TOR_URL]; + if ($s =~ m!\b[^:]+://\w+\.onion/!) { + $s .= " note: .onion URLs require Tor: "; + $s .= qq[$TOR_URL]; } '
'.join("\n\n",
 		$desc,
-		$urls,
+		$s,
 		coderepos($ctx),
 		code_footer($ctx->{env})
 	).'
'; -- 2.44.0