comparison mercurial/ui.py @ 39662:50f46b771921

py3: partially fix pager spawning on Windows Previously, spinning up the pager crashed because the command and environment was in bytes. (See also 543a788eea2d.) Now it aborts with an invalid handle: $ HGMODULEPOLICY=py py -3 ../hg --traceback --config extensions.evolve=! Traceback (most recent call last): File "c:\Users\Matt\projects\hg\mercurial\ui.py", line 967, in _write self.fout.write(''.join(msgs)) File "c:\Users\Matt\projects\hg\mercurial\windows.py", line 173, in write self.fp.write(s[start:end]) OSError: [WinError 6] The handle is invalid During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:\Users\Matt\projects\hg\mercurial\scmutil.py", line 164, in callcatch return func() File "c:\Users\Matt\projects\hg\mercurial\dispatch.py", line 350, in _runcatchfunc return _dispatch(req) File "c:\Users\Matt\projects\hg\mercurial\dispatch.py", line 930, in _dispatch return commands.help_(ui, 'shortlist') File "c:\Users\Matt\projects\hg\mercurial\commands.py", line 2930, in help_ ui.write(formatted) File "c:\Users\Matt\projects\hg\mercurial\ui.py", line 948, in write self._writenobuf(*args, **opts) File "c:\Users\Matt\projects\hg\mercurial\ui.py", line 960, in _writenobuf self._write(*msgs, **opts) File "c:\Users\Matt\projects\hg\mercurial\ui.py", line 969, in _write raise error.StdioError(err) mercurial.error.StdioError: [Errno 9] The handle is invalid abort: The handle is invalid The interesting bit here is that the abort message is marked with ANSI color, but the OSError is not.
author Matt Harbison <matt_harbison@yahoo.com>
date Sat, 15 Sep 2018 13:31:41 -0400
parents 6f38284b23f4
children 24e493ec2229
comparison
equal deleted inserted replaced
39661:8bfbb25859f1 39662:50f46b771921
1128 1128
1129 command = fullcmd 1129 command = fullcmd
1130 1130
1131 try: 1131 try:
1132 pager = subprocess.Popen( 1132 pager = subprocess.Popen(
1133 command, shell=shell, bufsize=-1, 1133 procutil.tonativestr(command), shell=shell, bufsize=-1,
1134 close_fds=procutil.closefds, stdin=subprocess.PIPE, 1134 close_fds=procutil.closefds, stdin=subprocess.PIPE,
1135 stdout=procutil.stdout, stderr=procutil.stderr, 1135 stdout=procutil.stdout, stderr=procutil.stderr,
1136 env=procutil.shellenviron(env)) 1136 env=procutil.tonativeenv(procutil.shellenviron(env)))
1137 except OSError as e: 1137 except OSError as e:
1138 if e.errno == errno.ENOENT and not shell: 1138 if e.errno == errno.ENOENT and not shell:
1139 self.warn(_("missing pager command '%s', skipping pager\n") 1139 self.warn(_("missing pager command '%s', skipping pager\n")
1140 % command) 1140 % command)
1141 return False 1141 return False