Re: [PATCH 1 of 4 chg-tests-fix] procutils: don't try to get `.buffer` if sys.stdin is None

2020-12-08 Thread Yuya Nishihara
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

2020-12-08 Thread Yuya Nishihara
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

2020-12-07 Thread Pulkit Goyal
# 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