[PATCH 07 of 11 V2] procutil: distribute code for stdout
Manuel Jacob
me at manueljacob.de
Sun Jul 12 23:25:29 UTC 2020
This is not as much of an improvement as it was before the code for
stderr was removed. But I think it’s still a little improvement and a
later patch depends on it, so I decided to send it anyway.
On 2020-07-13 00:41, Manuel Jacob wrote:
> # HG changeset patch
> # User Manuel Jacob <me at manueljacob.de>
> # Date 1594368724 -7200
> # Fri Jul 10 10:12:04 2020 +0200
> # Node ID 2151604d856a8cd9c2049e785a995714f49be115
> # Parent 472cbd166fe075b8786d2965a44b4e5d1c26bdf5
> # EXP-Topic stdio
> procutil: distribute code for stdout
>
> It makes sense to have the distinction between Python 2 and 3 at the
> top level,
> as we have to fight a different kind of battle on each: On Python 3, we
> get
> consistent behavior on all platforms, but need to create
> correctly-behaving
> binary streams. On Python 2, we have to account for platform
> differences.
>
> diff --git a/mercurial/utils/procutil.py b/mercurial/utils/procutil.py
> --- a/mercurial/utils/procutil.py
> +++ b/mercurial/utils/procutil.py
> @@ -102,32 +102,31 @@
>
>
> if pycompat.ispy3:
> + # Python 3 implements its own I/O streams.
> # TODO: .buffer might not exist if std streams were replaced;
> we'll need
> # a silly wrapper to make a bytes stream backed by a unicode one.
> stdin = sys.stdin.buffer
> stdout = sys.stdout.buffer
> stderr = sys.stderr.buffer
> + if isatty(stdout):
> + # The standard library doesn't offer line-buffered binary
> streams.
> + stdout = make_line_buffered(stdout)
> else:
> + # Python 2 uses the I/O streams provided by the C library.
> stdin = sys.stdin
> stdout = sys.stdout
> stderr = sys.stderr
> -
> -if isatty(stdout):
> - if pycompat.ispy3:
> - # Python 3 implements its own I/O streams.
> - # The standard library doesn't offer line-buffered binary
> streams.
> - stdout = make_line_buffered(stdout)
> - elif pycompat.iswindows:
> - # Work around size limit when writing to console.
> - stdout = platform.winstdout(stdout)
> - # Python 2 uses the I/O streams provided by the C library.
> - # The Windows C runtime library doesn't support line
> buffering.
> - stdout = make_line_buffered(stdout)
> - else:
> - # glibc determines buffering on first write to stdout - if we
> - # replace a TTY destined stdout with a pipe destined stdout
> (e.g.
> - # pager), we want line buffering.
> - stdout = reopen_stream(stdout, 'wb', 1)
> + if isatty(stdout):
> + if pycompat.iswindows:
> + # Work around size limit when writing to console.
> + stdout = platform.winstdout(stdout)
> + # The Windows C runtime library doesn't support line
> buffering.
> + stdout = make_line_buffered(stdout)
> + else:
> + # glibc determines buffering on first write to stdout - if
> we
> + # replace a TTY destined stdout with a pipe destined
> stdout (e.g.
> + # pager), we want line buffering.
> + stdout = reopen_stream(stdout, 'wb', 1)
>
>
> findexe = platform.findexe
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list