diff mercurial/ui.py @ 5337:8c5ef3b87cb1

Don't try to determine interactivity if ui() called with interactive=False. WSGI applications are not supposed to refer to sys.stdin. In ed6df6b1c29a, hgweb and hgwebdir were fixed to pass interactive=False to their ui()'s, but sys.stdin.isatty() was still called by the ui objects. This change makes sure only the ui.fixconfig() method will call ui.isatty() (by making the ui._readline() method, which is currently only called from ui.prompt(), private). ui.fixconfig() is changed to let config files override the initial interactivity setting, but not check isatty() if interactive=False was specified in the creation of the ui.
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Tue, 25 Sep 2007 19:05:34 +0200
parents 67afecb8d6cc
children
line wrap: on
line diff
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -211,9 +211,11 @@ class ui(object):
             if name is None or name in ('quiet', 'verbose', 'debug'):
                 self.verbosity_constraints()
             if name is None or name == 'interactive':
-                self.interactive = self.configbool("ui", "interactive", None)
-                if self.interactive is None:
+                interactive = self.configbool("ui", "interactive", None)
+                if interactive is None and self.interactive:
                     self.interactive = self.isatty()
+                else:
+                    self.interactive = interactive
             if name is None or name == 'report_untrusted':
                 self.report_untrusted = (
                     self.configbool("ui", "report_untrusted", True))
@@ -391,7 +393,7 @@ class ui(object):
         try: sys.stderr.flush()
         except: pass
 
-    def readline(self, prompt=''):
+    def _readline(self, prompt=''):
         if self.isatty():
             try:
                 # magically add command line editing support, where
@@ -406,7 +408,7 @@ class ui(object):
     def prompt(self, msg, pat=None, default="y", matchflags=0):
         if not self.interactive: return default
         try:
-            r = self.readline(msg + ' ')
+            r = self._readline(msg + ' ')
             if not pat or re.match(pat, r, matchflags):
                 return r
             else: