comparison mercurial/utils/procutil.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 313a940d49a3
children c31ce080eb75
comparison
equal deleted inserted replaced
39661:8bfbb25859f1 39662:50f46b771921
318 return env 318 return env
319 319
320 if pycompat.iswindows: 320 if pycompat.iswindows:
321 def shelltonative(cmd, env): 321 def shelltonative(cmd, env):
322 return platform.shelltocmdexe(cmd, shellenviron(env)) 322 return platform.shelltocmdexe(cmd, shellenviron(env))
323
324 tonativestr = encoding.strfromlocal
323 else: 325 else:
324 def shelltonative(cmd, env): 326 def shelltonative(cmd, env):
325 return cmd 327 return cmd
328
329 tonativestr = pycompat.identity
330
331 def tonativeenv(env):
332 '''convert the environment from bytes to strings suitable for Popen(), etc.
333 '''
334 return pycompat.rapply(tonativestr, env)
326 335
327 def system(cmd, environ=None, cwd=None, out=None): 336 def system(cmd, environ=None, cwd=None, out=None):
328 '''enhanced shell command execution. 337 '''enhanced shell command execution.
329 run with environment maybe modified, maybe in different dir. 338 run with environment maybe modified, maybe in different dir.
330 339