Subject: Re: [RFC PATCH 01/10] gitweb: Print to explicit filehandle (preparing for caching)

From: Jakub Narebski <[email-masked]>
Date: Sat, 23 Jan 2010 01:48:18 +0100

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 <[email-masked]>
> ---
> 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: <[email-masked]>
>   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