From: Eric Wong Date: Mon, 29 Aug 2022 09:26:33 +0000 (+0000) Subject: www: allow html_oneshot to take an array arg X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=95a3cace67ff5297e6fc35972e401b7cb17ee310 www: allow html_oneshot to take an array arg Another step towards making our internal APIs more writev-like and reducing the copies needed for `join' or `.=' concatenation. --- diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 158feb6a..5fbdd1fa 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -64,7 +64,7 @@ sub no_over_html ($) { } delete $ctx->{obuf}; eval { $$obuf .= html_footer($ctx, $eml) }; - html_oneshot($ctx, 200, $obuf); + html_oneshot($ctx, 200, $$obuf); } # public functions: (unstable) @@ -1222,7 +1222,7 @@ sub pagination_footer ($$) { $next = $next ? "$next | " : ' | '; $prev .= qq[ | latest]; } - ($next || $prev) ? \"
page: $next$prev
" : \''; + ($next || $prev) ? "
page: $next$prev
" : ''; } sub paginate_recent ($$) { diff --git a/lib/PublicInbox/ViewVCS.pm b/lib/PublicInbox/ViewVCS.pm index b04a5672..23524ac0 100644 --- a/lib/PublicInbox/ViewVCS.pm +++ b/lib/PublicInbox/ViewVCS.pm @@ -36,11 +36,11 @@ my $BIN_DETECT = 8000; # same as git my $SHOW_FMT = '--pretty=format:'.join('%n', '%P', '%p', '%H', '%T', '%s', '%an <%ae> %ai', '%cn <%ce> %ci', '%b%x00'); -sub html_page ($$$) { - my ($ctx, $code, $str) = @_; +sub html_page ($$;@) { + my ($ctx, $code) = @_[0, 1]; my $wcb = delete $ctx->{-wcb}; $ctx->{-upfx} = '../../'; # from "/$INBOX/$OID/s/" - my $res = html_oneshot($ctx, $code, \$str); + my $res = html_oneshot($ctx, $code, @_[2..$#_]); $wcb ? $wcb->($res) : $res; } diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index 77f463d3..1df5572d 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -320,7 +320,7 @@ sub get_altid_dump { sub need { my ($ctx, $extra) = @_; require PublicInbox::WwwStream; - PublicInbox::WwwStream::html_oneshot($ctx, 501, \<$extra is not available for this public-inbox Return to index EOF diff --git a/lib/PublicInbox/WwwAltId.pm b/lib/PublicInbox/WwwAltId.pm index e107dfe0..47056160 100644 --- a/lib/PublicInbox/WwwAltId.pm +++ b/lib/PublicInbox/WwwAltId.pm @@ -33,14 +33,14 @@ sub sqldump ($$) { my $altid_map = $ibx->altid_map; my $fn = $altid_map->{$altid_pfx}; unless (defined $fn) { - return html_oneshot($ctx, 404, \<`$altid_pfx' is not a valid altid for this inbox EOF } if ($env->{REQUEST_METHOD} ne 'POST') { my $url = $ibx->base_url($ctx->{env}) . "$altid_pfx.sql.gz"; - return html_oneshot($ctx, 405, \<A POST request is required to retrieve $altid_pfx.sql.gz curl -d '' -O $url @@ -54,7 +54,7 @@ or EOF } - $sqlite3 //= which('sqlite3') // return html_oneshot($ctx, 501, \<sqlite3 not available The administrator needs to install the sqlite3(1) binary diff --git a/lib/PublicInbox/WwwStream.pm b/lib/PublicInbox/WwwStream.pm index ab006c40..f2777fdc 100644 --- a/lib/PublicInbox/WwwStream.pm +++ b/lib/PublicInbox/WwwStream.pm @@ -164,8 +164,8 @@ sub getline { $ctx->zflush(_html_end($ctx)); } -sub html_oneshot ($$;$) { - my ($ctx, $code, $sref) = @_; +sub html_oneshot ($$;@) { + my ($ctx, $code) = @_[0, 1]; my $res_hdr = [ 'Content-Type' => 'text/html; charset=UTF-8', 'Content-Length' => undef ]; bless $ctx, __PACKAGE__; @@ -174,8 +174,7 @@ sub html_oneshot ($$;$) { $ctx->zmore(html_top($ctx)); $ctx->{base_url} = base_url($ctx); }; - $ctx->zmore($$sref) if $sref; - my $bdy = $ctx->zflush(_html_end($ctx)); + my $bdy = $ctx->zflush(@_[2..$#_], _html_end($ctx)); $res_hdr->[3] = length($bdy); [ $code, $res_hdr, [ $bdy ] ] } diff --git a/lib/PublicInbox/WwwText.pm b/lib/PublicInbox/WwwText.pm index c6957e81..3f840c44 100644 --- a/lib/PublicInbox/WwwText.pm +++ b/lib/PublicInbox/WwwText.pm @@ -70,7 +70,7 @@ sub get_text { $txt =~ s!\bPOP3\b!POP3!; $txt =~ s!\b(Newsgroups?)\b!$1!; $txt =~ s!\bIMAP\b!IMAP!; - PublicInbox::WwwStream::html_oneshot($ctx, $code, \$txt); + PublicInbox::WwwStream::html_oneshot($ctx, $code, $txt); } sub _srch_prefix ($$) {