py3: keep stdout as defined by pycompat in procutil
authorDenis Laxalde <denis.laxalde@logilab.fr>
Thu, 10 Oct 2019 16:00:02 +0200
changeset 43165 227ba1afcb65
parent 43164 c32531444cdc
child 43166 a5b04863dbff
py3: keep stdout as defined by pycompat in procutil According to https://docs.python.org/3/library/functions.html#open, it's not possible to use 1 as buffering argument value in binary mode. This is probably why line buffering does not work well in python3. On the other hand, sys.stdout.buffer appears to be line-buffered already on python3. So by not replacing it, there should be no behavior change. This fixes buffering issue in "hg email" (confirmation prompt shown before information to be confirmed).
mercurial/utils/procutil.py
--- a/mercurial/utils/procutil.py	Mon Oct 07 21:21:16 2019 -0400
+++ b/mercurial/utils/procutil.py	Thu Oct 10 16:00:02 2019 +0200
@@ -53,7 +53,9 @@
     if pycompat.iswindows:
         # Windows doesn't support line buffering
         stdout = os.fdopen(stdout.fileno(), r'wb', 0)
-    else:
+    elif not pycompat.ispy3:
+        # on Python 3, stdout (sys.stdout.buffer) is already line buffered and
+        # buffering=1 is not handled in binary mode
         stdout = os.fdopen(stdout.fileno(), r'wb', 1)
 
 if pycompat.iswindows: