comparison mercurial/utils/procutil.py @ 46084: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
46083:c80f9e3daec3 46084: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)