# HG changeset patch
# User Pulkit Goyal <7895pul...@gmail.com>
# Date 1606897517 -19800
#      Wed Dec 02 13:55:17 2020 +0530
# Node ID 6bab1270ddc9b7097a58de39afacb305f3364ea7
# Parent  8b20d469a0c819c2ade8635c25e9fcf0af553796
# EXP-Topic chg-test
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

diff -r 8b20d469a0c8 -r 6bab1270ddc9 mercurial/utils/procutil.py
--- a/mercurial/utils/procutil.py       Fri Apr 03 20:30:36 2020 +0530
+++ b/mercurial/utils/procutil.py       Wed Dec 02 13:55:17 2020 +0530
@@ -124,7 +124,9 @@
     # Python 3 implements its own I/O streams.
     # TODO: .buffer might not exist if std streams were replaced; we'll need
     # a silly wrapper to make a bytes stream backed by a unicode one.
-    stdin = sys.stdin.buffer
+
+    # sys.stdin can be None
+    stdin = sys.stdin.buffer if sys.stdin else sys.stdin
     stdout = _make_write_all(sys.stdout.buffer)
     stderr = _make_write_all(sys.stderr.buffer)
     if pycompat.iswindows:
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to