ui: do not try readline support if fin/fout aren't standard streams
It's unlikely for a non-stdio stream to be a tty. Minimizing readline support
makes it much simpler to work around the unicode input() function of Python 3.
This also works on chg which duplicates client's tty to stdio fds.
--- a/mercurial/ui.py Tue Mar 06 02:28:59 2018 -0600
+++ b/mercurial/ui.py Tue Mar 06 02:32:26 2018 -0600
@@ -1264,7 +1264,9 @@
return i
def _readline(self):
- if self._isatty(self.fin):
+ usereadline = (self._isatty(self.fin) and self._isatty(self.fout)
+ and util.isstdin(self.fin) and util.isstdout(self.fout))
+ if usereadline:
try:
# magically add command line editing support, where
# available
@@ -1273,7 +1275,7 @@
readline.read_history_file
# windows sometimes raises something other than ImportError
except Exception:
- pass
+ usereadline = False
# prompt ' ' must exist; otherwise readline may delete entire line
# - http://bugs.python.org/issue12833