This instance will be upgraded to Heptapod 0.31.0 (final) on 2022-05-24 at 14:00 UTC+2 (a few minutes of down time)

Commit 8403cc54 authored by Manuel Jacob's avatar Manuel Jacob
Browse files

procutil: make mercurial.utils.procutil.stderr unbuffered

For most Mercurial code, it doesn’t make a difference, as the ui object flushes
stderr explicitly (after the change, we could get rid of the explicit flush).
One example where it makes a observable difference is mercurial.util.timed().
Without the patch, the time is not immediately shown on Python 3. With the
patch, it’s shown immediately on all Python versions and platforms.
parent 359884685eab
...@@ -99,6 +99,18 @@ ...@@ -99,6 +99,18 @@
else: else:
stdout = os.fdopen(stdout.fileno(), 'wb', 1) stdout = os.fdopen(stdout.fileno(), 'wb', 1)
# stderr should be unbuffered
if pycompat.ispy3:
# On Python 3, buffered streams may expose an underlying raw stream. This is
# definitively the case for the streams initialized by the interpreter. If
# the attribute isn't present, the stream is already unbuffered or doesn't
# expose an underlying raw stream, in which case we use the stream as-is.
stderr = getattr(stderr, 'raw', stderr)
elif pycompat.iswindows:
# On Windows, stderr is buffered at least when connected to a pipe.
stderr = os.fdopen(stderr.fileno(), 'wb', 0)
# On other platforms, stderr is always unbuffered.
findexe = platform.findexe findexe = platform.findexe
_gethgcmd = platform.gethgcmd _gethgcmd = platform.gethgcmd
......
...@@ -100,6 +100,18 @@ ...@@ -100,6 +100,18 @@
test_stdout_ptys_unbuffered test_stdout_ptys_unbuffered
) )
def test_stderr_pipes(self):
self._test('stderr', _pipes, UNBUFFERED)
def test_stderr_ptys(self):
self._test('stderr', _ptys, UNBUFFERED)
def test_stderr_pipes_unbuffered(self):
self._test('stderr', _pipes, UNBUFFERED, python_args=['-u'])
def test_stderr_ptys_unbuffered(self):
self._test('stderr', _ptys, UNBUFFERED, python_args=['-u'])
if __name__ == '__main__': if __name__ == '__main__':
import silenttestrunner import silenttestrunner
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment