Mercurial > hg
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 |