Mercurial > public > mercurial-scm > hg
diff mercurial/utils/procutil.py @ 45852:b56feaa9b520
chgserver: backport py3 buffered I/O workarounds from procutil
I've recently switched to new machine and I found chg's stdout is fully
buffered.
Even though chg server is a daemon process, it inherits the environment
where the chg client originally forked the server. This means the server's
stdout might have been wrapped by LineBufferedWrapper. That's why we need
to do wrap/unwrap in both ways.
The "if" condition in _restoreio() looks weird, but I'm not willing to
clean things up because stdio behavior is fundamentally different between
py2 and py3, and py2 support will be dropped anyway.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 17 Nov 2020 19:29:08 +0900 |
parents | 37c65704869d |
children | 89a2afe31e82 |
line wrap: on
line diff
--- a/mercurial/utils/procutil.py Thu Nov 12 15:28:06 2020 -0800 +++ b/mercurial/utils/procutil.py Tue Nov 17 19:29:08 2020 +0900 @@ -80,6 +80,13 @@ return LineBufferedWrapper(stream) +def unwrap_line_buffered(stream): + if isinstance(stream, LineBufferedWrapper): + assert not isinstance(stream.orig, LineBufferedWrapper) + return stream.orig + return stream + + class WriteAllWrapper(object): def __init__(self, orig): self.orig = orig