Makefile.PL | 5 +++++ ci/deps.perl | 2 +- lib/PublicInbox/Mbox.pm | 17 ++--------------- lib/PublicInbox/NNTP.pm | 11 ++--------- lib/PublicInbox/WwwAltId.pm | 8 +------- lib/PublicInbox/WwwListing.pm | 13 ++++++------- script/public-inbox-nntpd | 2 +- diff --git a/Makefile.PL b/Makefile.PL index ab24b9cf1ae20387846fd4434ce480e7981a4b48..27bb112c31649ec00879f25b08d81bffebdfd7fa 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -132,6 +132,11 @@ # libperl$PERL_VERSION or libencode-perl on Debian, # `perl5' on FreeBSD 'Encode' => 0, + # libperl$PERL_VERSION + perl-modules-$PERL_VERSION + 'Compress::Raw::Zlib' => 0, + 'Compress::Zlib' => 0, + 'IO::Compress::Gzip' => 0, + # Plack is needed for public-inbox-httpd and PublicInbox::WWW # 'Plack' => 0, diff --git a/ci/deps.perl b/ci/deps.perl index b960089f415366a8f6acaac95451701047f7ee2f..06b4fbe0f2f3a0be7a939a94405fcf272528f9c1 100755 --- a/ci/deps.perl +++ b/ci/deps.perl @@ -25,6 +25,7 @@ Email::MIME Email::MIME::ContentType Encode ExtUtils::MakeMaker + IO::Compress::Gzip URI::Escape ), @test_essential ], @@ -35,7 +36,6 @@ BSD::Resource DBD::SQLite DBI Filesys::Notify::Simple - IO::Compress::Gzip Inline::C Net::Server Plack diff --git a/lib/PublicInbox/Mbox.pm b/lib/PublicInbox/Mbox.pm index 9995140cd8228db8b26313927d04e432a3007cf2..97bec5e79a3b468b88faa0b2e8ac72bbf198552f 100644 --- a/lib/PublicInbox/Mbox.pm +++ b/lib/PublicInbox/Mbox.pm @@ -152,8 +152,7 @@ } sub thread_mbox { my ($ctx, $over, $sfx) = @_; - eval { require PublicInbox::MboxGz }; - return need_gzip($ctx) if $@; + require PublicInbox::MboxGz; my $msgs = $ctx->{msgs} = $over->get_thread($ctx->{mid}, {}); return [404, [qw(Content-Type text/plain)], []] if !@$msgs; $ctx->{prev} = $msgs->[-1]; @@ -221,8 +220,7 @@ sub mbox_all { my ($ctx, $query) = @_; - eval { require PublicInbox::MboxGz }; - return need_gzip($ctx) if $@; + require PublicInbox::MboxGz; return mbox_all_ids($ctx) if $query eq ''; my $qopts = $ctx->{qopts} = { mset => 2 }; my $srch = $ctx->{srch} = $ctx->{-inbox}->search or @@ -234,17 +232,6 @@ ["No results found\n"]]; $ctx->{iter} = 0; $ctx->{query} = $query; PublicInbox::MboxGz->response($ctx, \&results_cb, 'results-'.$query); -} - -sub need_gzip { - html_oneshot($_[0], 501, \<gzipped mbox not available - -The administrator needs to install the Compress::Raw::Zlib Perl module -to support gzipped mboxes. - -Return to index -EOF } 1; diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index c79f198beb186f00c441d31e1ca122cad77a58eb..e9c66cd1c7038251ff8081925ad452441333b8a6 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -38,8 +38,7 @@ NEWNEWS\r LIST ACTIVE ACTIVE.TIMES NEWSGROUPS OVERVIEW.FMT\r HDR\r OVER\r - -my $have_deflate; +COMPRESS DEFLATE\r sub greet ($) { $_[0]->write($_[0]->{nntpd}->{greet}) }; @@ -903,7 +902,7 @@ # RFC 8054 sub cmd_compress ($$) { my ($self, $alg) = @_; return '503 Only DEFLATE is supported' if uc($alg) ne 'DEFLATE'; - return r502 if $self->compressed || !$have_deflate; + return r502 if $self->compressed; PublicInbox::NNTPdeflate->enable($self); $self->requeue; undef @@ -988,12 +987,6 @@ # for graceful shutdown in PublicInbox::Daemon: sub busy { my ($self, $now) = @_; ($self->{rbuf} || $self->{wbuf} || $self->not_idle_long($now)); -} - -# this is an import to prevent "perl -c" from complaining about fields -sub import { - $have_deflate = eval { require PublicInbox::NNTPdeflate } and - $CAPABILITIES .= "COMPRESS DEFLATE\r\n"; } 1; diff --git a/lib/PublicInbox/WwwAltId.pm b/lib/PublicInbox/WwwAltId.pm index 630ed6861cfc8d6ff21a167dfbd9a14ea95bca5b..e5476d1f50aeedf467feac6c0af56e57ce4baba7 100644 --- a/lib/PublicInbox/WwwAltId.pm +++ b/lib/PublicInbox/WwwAltId.pm @@ -8,6 +8,7 @@ use PublicInbox::Qspawn; use PublicInbox::WwwStream qw(html_oneshot); use PublicInbox::AltId; use PublicInbox::Spawn qw(which); +use PublicInbox::GzipFilter; our $sqlite3 = $ENV{SQLITE3}; sub sqlite3_missing ($) { @@ -64,13 +65,6 @@ EOF } - eval { require PublicInbox::GzipFilter } or - return html_oneshot($ctx, 501, \<gzip output not available - -The administrator needs to install the Compress::Raw::Zlib Perl module -to support gzipped sqlite3 dumps. -EOF $sqlite3 //= which('sqlite3'); if (!defined($sqlite3)) { return html_oneshot($ctx, 501, \<ascii encodes non-ASCII to "\uXXXX" - $json = $mod->new->ascii(1) and last; - } +for my $mod (qw(JSON::MaybeXS JSON JSON::PP)) { + eval "require $mod" or next; + # ->ascii encodes non-ASCII to "\uXXXX" + $json = $mod->new->ascii(1) and last; } sub list_all_i { @@ -220,7 +219,7 @@ defined(my $abs = $repo->{reference}) or next; $repo->{reference} = $abs2urlpath->{$abs}; } my $out; - IO::Compress::Gzip::gzip(\($json->encode($manifest)) => \$out); + gzip(\($json->encode($manifest)) => \$out); $manifest = undef; [ 200, [ qw(Content-Type application/gzip), 'Last-Modified', time2str($mtime), diff --git a/script/public-inbox-nntpd b/script/public-inbox-nntpd index ce42de2d57c254104bf2eaa234bcf3128291ffa5..f42db6fe03e618458ea0d9faefdd42a3dbb6cebf 100755 --- a/script/public-inbox-nntpd +++ b/script/public-inbox-nntpd @@ -6,7 +6,7 @@ # Standalone NNTP server for public-inbox. use strict; use warnings; use PublicInbox::Daemon; -use PublicInbox::NNTP; # need to call import +use PublicInbox::NNTPdeflate; # loads PublicInbox::NNTP use PublicInbox::NNTPD; my $nntpd = PublicInbox::NNTPD->new; PublicInbox::Daemon::run('0.0.0.0:119',