X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FViewVCS.pm;h=9ec04f480a09abb628405ec47cfe3a816c54476d;hb=3865c430c572b3aa0d48991b9bb86a9e64b45a12;hp=77b3ca2814e104aea306c19e179ceece1167d7ef;hpb=02cdbe1c1638ba8e80351b39029c08343fab018b;p=public-inbox.git diff --git a/lib/PublicInbox/ViewVCS.pm b/lib/PublicInbox/ViewVCS.pm index 77b3ca28..9ec04f48 100644 --- a/lib/PublicInbox/ViewVCS.pm +++ b/lib/PublicInbox/ViewVCS.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2019 all contributors +# Copyright (C) 2019-2020 all contributors # License: AGPL-3.0+ # show any VCS object, similar to "git show" @@ -18,7 +18,7 @@ use strict; use warnings; use bytes (); # only for bytes::length use PublicInbox::SolverGit; -use PublicInbox::WwwStream; +use PublicInbox::WwwStream qw(html_oneshot); use PublicInbox::Linkify; use PublicInbox::Tmpfile; use PublicInbox::Hval qw(ascii_html to_filename); @@ -31,17 +31,11 @@ my %QP_MAP = ( A => 'oid_a', B => 'oid_b', a => 'path_a', b => 'path_b' ); our $MAX_SIZE = 1024 * 1024; # TODO: configurable my $BIN_DETECT = 8000; # same as git -sub html_i { # WwwStream::getline callback - my ($nr, $ctx) = @_; - $nr == 1 ? ${delete $ctx->{obuf}} : undef; -} - sub html_page ($$$) { my ($ctx, $code, $strref) = @_; my $wcb = delete $ctx->{-wcb}; $ctx->{-upfx} = '../../'; # from "/$INBOX/$OID/s/" - $ctx->{obuf} = $strref; - my $res = PublicInbox::WwwStream->response($ctx, $code, \&html_i); + my $res = html_oneshot($ctx, $code, $strref); $wcb ? $wcb->($res) : $res; } @@ -64,6 +58,7 @@ sub stream_blob_parse_hdr { # {parse_hdr} for Qspawn warn "premature EOF on $oid $$logref\n"; return html_page($ctx, 500, $logref); } + @$ctx{qw(-res -logref)} = ($res, $logref); undef; # bref keeps growing } } @@ -164,7 +159,7 @@ sub solve_result { # TODO: detect + convert to ensure validity utf8::decode($$blob); - my $nl = ($$blob =~ tr/\n/\n/); + my $nl = ($$blob =~ s/\r?\n/\n/sg); my $pad = length($nl); $l->linkify_1($$blob);