Re: [RFC PATCH 01/10] gitweb: Print to explicit filehandle (preparing for caching)
From: Jakub Narebski <hidden>
Date: 2016-06-15 22:48:05
As you can (or rather can't ;-)) see this patch didn't made it into list, because with 119,993 characters in format-patch patch it probably exceeds a little bit exceeding 100,000 characters message size limit on VGER. The problem is that it doesn't make sense to send partial patch... well, perhaps reindent and breaking of exceedingly long lines should be split into separate patch... For now you can view the patch via gitweb http://repo.or.cz/w/git/jnareb-git.git/commitdiff/0dd15cb3f18e2a26fc834fd3b071e6d3ecc00557 and apply it from http://repo.or.cz/w/git/jnareb-git.git/patch/0dd15cb3f18e2a26fc834fd3b071e6d3ecc00557 The comment for this message (for this patch) can be seen below. -- >8 -- On Sat, 23 Jan 2010, Jakub Narebski wrote:
This means replacing
print <something>;
by
print {$out} <something>;
and
binmode STDOUT, <layer>;
by
binmode $out, <layer>;
where $out is global variable set to \*STDOUT at the beginning of
gitweb, but after reading gitweb config. This way it would be simple
to e.g. tie output filehandle or use PerlIO layers to simultaneously
write to standard output and to some specified file (like "tee"
utility does), or redirect output to a scalar, or a file.
die_error (re)sets $out to \*STDOUT; we would (probably) want to treat
errors in a special way, and do not cache them.
The only other differences are reindent of continued lines (if
needed), and sometimes word-wrapping lines which this change made too
long.
Signed-off-by: Jakub Narebski <redacted>
---
This patch is meant as (straight) replacement for the following patch
by J.H. (John 'Warthog9' Hawley):
* [PATCH 8/9] gitweb: Convert output to using indirect file handle
Message-ID: [ref]
http://permalink.gmane.org/gmane.comp.version-control.git/136915
Actually this patch precedes (was written before) the patch by J.H.
This patch was written _before_ comment from Junio that it would be
better to simply use
print $out <something>;
and do not try to be too clever.
Differences from patch by J.H.:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Only one output handle, instead of having one output handle for text,
(':utf8'), and another output handler for binary files (:raw).
I do assume that I can write to handler with appropriate layer:
:utf8/:raw, and then I can simply read from cache file in :raw
binmode, as the data is already converted correctly.
* Shorter name for output handle: $out instead of $output_handler
* Set output handler to \*STDOUT (default value in declaration of this
variable, and also in die_error() subroutine), instead of *STDOUT.
This way $out is indirect filehandle, instead of using direct
filehandle which is _global_ to current package (see perlopentut(1)).
* Reindent continuation lines, i.e.
print <line1> .
<line2>;
got replaced (reindented) with
print {$out} <line1> .
<line2>;
In some places lines were broken into two, when after indent the
line got too long.
* Slightly different replacement for printf-- Jakub Narebski Poland