diff options
author | Eric Wong <e@80x24.org> | 2019-03-11 05:32:07 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2019-04-04 09:13:58 +0000 |
commit | 411dc580077c5240e9cfd4808c06623345435b69 (patch) | |
tree | 913d0571dee0c1b76e7fb0d7d909a853ff71494f /lib | |
parent | 7f9cf4cbf5920591a955035555c2969d7d29af66 (diff) | |
download | public-inbox-411dc580077c5240e9cfd4808c06623345435b69.tar.gz |
Requests intended for cgit are unlikely to conflict with requests to inboxes. So we can safely hand those requests off to cgit.cgi.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/Config.pm | 3 | ||||
-rw-r--r-- | lib/PublicInbox/WWW.pm | 20 |
2 files changed, 21 insertions, 2 deletions
diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 4b246720..ec9a469c 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -30,6 +30,7 @@ sub new { $self->{-no_obfuscate} ||= {}; $self->{-limiters} ||= {}; $self->{-code_repos} ||= {}; # nick => PublicInbox::Git object + $self->{-cgitrc_unparsed} = $self->{'publicinbox.cgitrc'}; if (my $no = delete $self->{'publicinbox.noobfuscate'}) { $no = _array($no); @@ -244,7 +245,7 @@ sub _fill_code_repo { my $pfx = "coderepo.$nick"; # TODO: support gitweb and other repository viewers? - if (defined(my $cgitrc = delete $self->{'publicinbox.cgitrc'})) { + if (defined(my $cgitrc = delete $self->{-cgitrc_unparsed})) { parse_cgitrc($self, $cgitrc, 0); } my $dir = $self->{"$pfx.dir"}; # aka "GIT_DIR" diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index 7ed4f654..6e14e8c1 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -15,6 +15,7 @@ use 5.008; use strict; use warnings; use bytes (); # only for bytes::length +use Plack::Util; use PublicInbox::Config; use PublicInbox::Hval; use URI::Escape qw(uri_unescape); @@ -154,6 +155,7 @@ sub preload { eval "require $_;"; } if (ref($self)) { + $self->cgit; $self->stylesheets_prepare($_) for ('', '../', '../../'); } } @@ -188,7 +190,9 @@ sub invalid_inbox ($$) { # generation and link things intended for nntp:// to https?://, # so try to infer links and redirect them to the appropriate # list URL. - $www->news_www->call($ctx->{env}); + my $env = $ctx->{env}; + my $res = $www->news_www->call($env); + $res->[0] == 404 ? $www->cgit->call($env) : $res; } # returns undef if valid, array ref response if invalid @@ -467,6 +471,20 @@ sub news_www { } } +sub cgit { + my ($self) = @_; + $self->{cgit} ||= do { + my $pi_config = $self->{pi_config}; + + if (defined($pi_config->{'publicinbox.cgitrc'})) { + require PublicInbox::Cgit; + PublicInbox::Cgit->new($pi_config); + } else { + Plack::Util::inline_object(call => sub { r404() }); + } + } +} + sub get_attach { my ($ctx, $idx, $fn) = @_; require PublicInbox::WwwAttach; |