Mercurial > public > mercurial-scm > hg
comparison mercurial/utils/procutil.py @ 46083:81c1f5d1801f
procutils: don't try to get `.buffer` if sys.stdin is None
While hunting down following test failure of test-chg.t on Python 3, I stumbled
the case when `.buffer` is not available as sys.stdin is None.
--- /home/pulkit/repo/hg-committed/tests/test-chg.t
+++ /home/pulkit/repo/hg-committed/tests/test-chg.t.err
@@ -203,7 +203,31 @@
$ CHGDEBUG=1 chg version -q 0<&-
chg: debug: * stdio fds are missing (glob)
chg: debug: * execute original hg (glob)
- Mercurial Distributed SCM * (glob)
+ Traceback (most recent call last):
+ File "/tmp/hgtests.avspvsq4/install/bin/hg", line 43, in <module>
+ dispatch.run()
+ File "/usr/lib/python3.6/importlib/util.py", line 233, in
__getattribute__
+ self.__spec__.loader.exec_module(self)
+ File "<frozen importlib._bootstrap_external>", line 678, in
exec_module
+ File "<frozen importlib._bootstrap>", line 219, in
_call_with_frames_removed
+ File
"/tmp/hgtests.avspvsq4/install/lib/python/mercurial/dispatch.py", line
726, in <module>
+ class lazyaliasentry(object):
+ File
"/tmp/hgtests.avspvsq4/install/lib/python/mercurial/dispatch.py", line
737, in lazyaliasentry
+ @util.propertycache
+ File "/usr/lib/python3.6/importlib/util.py", line 233, in
__getattribute__
+ self.__spec__.loader.exec_module(self)
+ File "<frozen importlib._bootstrap_external>", line 678, in
exec_module
+ File "<frozen importlib._bootstrap>", line 219, in
_call_with_frames_removed
+ File "/tmp/hgtests.avspvsq4/install/lib/python/mercurial/util.py",
line 3473, in <module>
+ f=procutil.stderr,
+ File "/usr/lib/python3.6/importlib/util.py", line 233, in
__getattribute__
+ self.__spec__.loader.exec_module(self)
+ File "<frozen importlib._bootstrap_external>", line 678, in
exec_module
+ File "<frozen importlib._bootstrap>", line 219, in
_call_with_frames_removed
+ File
"/tmp/hgtests.avspvsq4/install/lib/python/mercurial/utils/procutil.py",
line 127, in <module>
+ stdin = sys.stdin.buffer
+ AttributeError: 'NoneType' object has no attribute 'buffer'
+ [1]
server lifecycle
----------------
Differential Revision: https://phab.mercurial-scm.org/D9500
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Wed, 02 Dec 2020 13:55:17 +0530 |
parents | 2cf61e66c6d0 |
children | 7ce24d3761e8 |
comparison
equal
deleted
inserted
replaced
46082:c80f9e3daec3 | 46083:81c1f5d1801f |
---|---|
122 | 122 |
123 if pycompat.ispy3: | 123 if pycompat.ispy3: |
124 # Python 3 implements its own I/O streams. | 124 # Python 3 implements its own I/O streams. |
125 # TODO: .buffer might not exist if std streams were replaced; we'll need | 125 # TODO: .buffer might not exist if std streams were replaced; we'll need |
126 # a silly wrapper to make a bytes stream backed by a unicode one. | 126 # a silly wrapper to make a bytes stream backed by a unicode one. |
127 stdin = sys.stdin.buffer | 127 |
128 # sys.stdin can be None | |
129 stdin = sys.stdin.buffer if sys.stdin else sys.stdin | |
128 stdout = _make_write_all(sys.stdout.buffer) | 130 stdout = _make_write_all(sys.stdout.buffer) |
129 stderr = _make_write_all(sys.stderr.buffer) | 131 stderr = _make_write_all(sys.stderr.buffer) |
130 if pycompat.iswindows: | 132 if pycompat.iswindows: |
131 # Work around Windows bugs. | 133 # Work around Windows bugs. |
132 stdout = platform.winstdout(stdout) | 134 stdout = platform.winstdout(stdout) |