X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FWwwListing.pm;h=38a37ddaae977f129081f4b054f4ac9a1076385b;hb=a318e758129d616b3b801db82c4735c680a2fbe8;hp=37ffffc1c3f48684de525806cda82329a54f08d2;hpb=02cdbe1c1638ba8e80351b39029c08343fab018b;p=public-inbox.git diff --git a/lib/PublicInbox/WwwListing.pm b/lib/PublicInbox/WwwListing.pm index 37ffffc1..38a37dda 100644 --- a/lib/PublicInbox/WwwListing.pm +++ b/lib/PublicInbox/WwwListing.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2019 all contributors +# Copyright (C) 2019-2020 all contributors # License: AGPL-3.0+ # Provide an HTTP-accessible listing of inboxes. @@ -10,11 +10,18 @@ use PublicInbox::Hval qw(ascii_html prurl); 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) = @_; @@ -121,16 +128,6 @@ sub html ($$) { [ $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 @@ -201,7 +198,8 @@ sub manifest_add ($$;$$) { # 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) { @@ -221,8 +219,7 @@ sub js ($$) { $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),