-# Copyright (C) 2019 all contributors <meta@public-inbox.org>
+# Copyright (C) 2019-2020 all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
# Provide an HTTP-accessible listing of inboxes.
use PublicInbox::Linkify;
use PublicInbox::View;
use PublicInbox::Inbox;
-use bytes ();
+use bytes (); # bytes::length
use HTTP::Date qw(time2str);
-require Digest::SHA;
-require File::Spec;
+use Digest::SHA ();
+use File::Spec ();
+use IO::Compress::Gzip qw(gzip);
*try_cat = \&PublicInbox::Inbox::try_cat;
+our $json;
+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 {
my ($ibx, $arg) = @_;
[ $code, $h, [ $out ] ];
}
-my $json;
-sub _json () {
- for my $mod (qw(JSON::MaybeXS JSON JSON::PP)) {
- eval "require $mod" or next;
- # ->ascii encodes non-ASCII to "\uXXXX"
- return $mod->new->ascii(1);
- }
- die;
-}
-
sub fingerprint ($) {
my ($git) = @_;
# TODO: convert to qspawn for fairness when there's
# manifest.js.gz
sub js ($$) {
my ($env, $list) = @_;
- eval { require IO::Compress::Gzip } or return [ 404, [], [] ];
+ # $json won't be defined if IO::Compress::Gzip is missing
+ $json or return [ 404, [], [] ];
my $manifest = { -abs2urlpath => {}, -mtime => 0 };
for my $ibx (@$list) {
$repo->{reference} = $abs2urlpath->{$abs};
}
my $out;
- IO::Compress::Gzip::gzip(\(($json ||= _json())->encode($manifest)) =>
- \$out);
+ gzip(\($json->encode($manifest)) => \$out);
$manifest = undef;
[ 200, [ qw(Content-Type application/gzip),
'Last-Modified', time2str($mtime),