[PATCH 4 of 5] py3: stop subscripting socket.error

Yuya Nishihara yuya at tcha.org
Sun Dec 16 00:55:20 EST 2018


On Sun, 16 Dec 2018 00:36:45 -0500, Matt Harbison wrote:
> > I'm not sure what to do with this info yet, but I just noticed that  
> > pager is also messed up on py3- the debug message about spawning the  
> > pager prints, but no output for the diff.  Use --pager=no, and it shows  
> > up.  So maybe there's a general problem with stdio of spawned children.
> 
> To be specific, this:
> 
> diff --git a/mercurial/ui.py b/mercurial/ui.py
> --- a/mercurial/ui.py
> +++ b/mercurial/ui.py
> @@ -1206,6 +1207,14 @@ class ui(object):
>               pager.stdin.close()
>               pager.wait()
> 
> +        try:
> +           self.write('test output\n')
> +           self.flush()
> +        except Exception:
> +            killpager()
> +            self.traceback(force=True)
> +            raise
> +
>           return True
> 
>       @property
> 
> 
> Results in this:
> 
> $ py -3 ../hg diff -r .^^ --debug
> *** failed to import extension evolve: No module named 'evolve'
> obsolete feature not enabled but 177518 markers found!
> starting pager for command 'diff'
> 
> Traceback (most recent call last):
>    File "c:\Users\Matt\hg\mercurial\ui.py", line 1024, in _writenobuf
>      color.win32print(self, dest.write, msg, **opts)
>    File "c:\Users\Matt\hg\mercurial\color.py", line 528, in win32print
>      writefunc(m.group(2))
>    File "c:\Users\Matt\hg\mercurial\windows.py", line 202, in write
>      self.fp.write(s[start:end])
> OSError: [WinError 1] Incorrect function

That might be because the stdio files are backed by the Windows-ish type.
Can you try PYTHONLEGACYWINDOWSSTDIO=1?

https://www.python.org/dev/peps/pep-0528/

Python 3 shifted away from being Unix scripting language in many ways.


More information about the Mercurial-devel mailing list