X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FWWW.pm;h=2434f2f581b2b0fbd1d48d1a08881bf0a1c1187b;hb=31ec75b69e02df6330bc16dd2bd48d354726f4c1;hp=3ce7cc2a7b6ddb2ef74616898e60accd3f92b0ae;hpb=c5ce0f75020db9b3fa7dae9958bedcdb08452e04;p=public-inbox.git
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index 3ce7cc2a..2434f2f5 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2019 all contributors
+# Copyright (C) 2014-2020 all contributors
# License: AGPL-3.0+
#
# Main web interface for mailing list archives
@@ -19,7 +19,6 @@ use PublicInbox::Config;
use PublicInbox::Hval;
use URI::Escape qw(uri_unescape);
use PublicInbox::MID qw(mid_escape);
-require PublicInbox::Git;
use PublicInbox::GitHTTPBackend;
use PublicInbox::UserContent;
use PublicInbox::WwwStatic qw(r path_info_raw);
@@ -85,6 +84,8 @@ sub call {
invalid_inbox($ctx, $1) || get_atom($ctx);
} elsif ($path_info =~ m!$INBOX_RE/new\.html\z!o) {
invalid_inbox($ctx, $1) || get_new($ctx);
+ } elsif ($path_info =~ m!$INBOX_RE/description\z!o) {
+ get_description($ctx, $1);
} elsif ($path_info =~ m!$INBOX_RE/(?:(?:git/)?([0-9]+)(?:\.git)?/)?
($PublicInbox::GitHTTPBackend::ANY)\z!ox) {
my ($epoch, $path) = ($2, $3);
@@ -131,31 +132,47 @@ sub call {
}
}
-# for CoW-friendliness, MOOOOO!
+# for CoW-friendliness, MOOOOO! Even for single-process setups,
+# we want to get all immortal allocations done early to avoid heap
+# fragmentation since common allocators favor a large contiguous heap.
sub preload {
my ($self) = @_;
+ require PublicInbox::ExtMsg;
require PublicInbox::Feed;
require PublicInbox::View;
require PublicInbox::SearchThread;
require PublicInbox::MIME;
- require Digest::SHA;
- require POSIX;
+ require PublicInbox::Mbox;
+ require PublicInbox::ViewVCS;
+ require PublicInbox::WwwText;
+ require PublicInbox::WwwAttach;
eval {
require PublicInbox::Search;
PublicInbox::Search::load_xapian();
};
- foreach (qw(PublicInbox::SearchView
- PublicInbox::Mbox IO::Compress::Gzip
- PublicInbox::NewsWWW)) {
+ foreach (qw(PublicInbox::SearchView PublicInbox::MboxGz)) {
eval "require $_;";
}
if (ref($self)) {
+ my $pi_config = $self->{pi_config};
+ if (defined($pi_config->{'publicinbox.cgitrc'})) {
+ $pi_config->limiter('-cgit');
+ }
$self->cgit;
$self->stylesheets_prepare($_) for ('', '../', '../../');
$self->www_listing;
+ $self->news_www;
+ $pi_config->each_inbox(\&preload_inbox);
}
}
+sub preload_inbox {
+ my $ibx = shift;
+ $ibx->cloneurl;
+ $ibx->description;
+ $ibx->base_url;
+}
+
# private functions below
sub r404 {
@@ -621,4 +638,13 @@ sub get_css ($$$) {
[ 200, $h, [ $css ] ];
}
+sub get_description {
+ my ($ctx, $inbox) = @_;
+ invalid_inbox($ctx, $inbox) || do {
+ my $d = $ctx->{-inbox}->description . "\n";
+ [ 200, [ 'Content-Length', bytes::length($d),
+ 'Content-Type', 'text/plain' ], [ $d ] ];
+ };
+}
+
1;