Re: [PATCH 1 of 4 chg-tests-fix] procutils: don't try to get `.buffer` if sys.stdin is None
On Tue, 8 Dec 2020 19:57:13 +0900, Yuya Nishihara wrote: > On Tue, 08 Dec 2020 12:58:21 +0530, Pulkit Goyal wrote: > > # 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 > > > 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 > > It's probably better to make procutil.stdin/out/err always available. > > stdin = open(os.devnull, 'rb') or maybe fdopen(0, 'rb'), which should be close to Python 2 behavior. % python2 -c 'import sys; print(sys.stdin.fileno()); sys.stdin.read()' 0<&- 0 Traceback (most recent call last): File "", line 1, in IOError: [Errno 9] Bad file descriptor ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Re: [PATCH 1 of 4 chg-tests-fix] procutils: don't try to get `.buffer` if sys.stdin is None
On Tue, 08 Dec 2020 12:58:21 +0530, Pulkit Goyal wrote: > # 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 > 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 It's probably better to make procutil.stdin/out/err always available. stdin = open(os.devnull, 'rb') I don't think we'll want to deal with None stdin/out/err everywhere stdio is involved. That's insane. ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
[PATCH 1 of 4 chg-tests-fix] procutils: don't try to get `.buffer` if sys.stdin is None
# 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 + dispatch.run() +File "/usr/lib/python3.6/importlib/util.py", line 233, in __getattribute__ + self.__spec__.loader.exec_module(self) +File "", line 678, in exec_module +File "", line 219, in _call_with_frames_removed +File "/tmp/hgtests.avspvsq4/install/lib/python/mercurial/dispatch.py", line 726, in + 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 "", line 678, in exec_module +File "", line 219, in _call_with_frames_removed +File "/tmp/hgtests.avspvsq4/install/lib/python/mercurial/util.py", line 3473, in + f=procutil.stderr, +File "/usr/lib/python3.6/importlib/util.py", line 233, in __getattribute__ + self.__spec__.loader.exec_module(self) +File "", line 678, in exec_module +File "", line 219, in _call_with_frames_removed +File "/tmp/hgtests.avspvsq4/install/lib/python/mercurial/utils/procutil.py", line 127, in + 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