Show More
@@ -24,6 +24,8 b' def updateconfig(source, dest, sections=' | |||||
24 | dest.set(section, name, value) |
|
24 | dest.set(section, name, value) | |
25 |
|
25 | |||
26 | class ui(object): |
|
26 | class ui(object): | |
|
27 | _isatty = None | |||
|
28 | ||||
27 | def __init__(self, verbose=False, debug=False, quiet=False, |
|
29 | def __init__(self, verbose=False, debug=False, quiet=False, | |
28 | interactive=True, traceback=False, report_untrusted=True, |
|
30 | interactive=True, traceback=False, report_untrusted=True, | |
29 | parentui=None): |
|
31 | parentui=None): | |
@@ -62,6 +64,11 b' class ui(object):' | |||||
62 | def __getattr__(self, key): |
|
64 | def __getattr__(self, key): | |
63 | return getattr(self.parentui, key) |
|
65 | return getattr(self.parentui, key) | |
64 |
|
66 | |||
|
67 | def isatty(self): | |||
|
68 | if ui._isatty is None: | |||
|
69 | ui._isatty = os.isatty(sys.stdin.fileno()) | |||
|
70 | return ui._isatty | |||
|
71 | ||||
65 | def updateopts(self, verbose=False, debug=False, quiet=False, |
|
72 | def updateopts(self, verbose=False, debug=False, quiet=False, | |
66 | interactive=True, traceback=False, config=[]): |
|
73 | interactive=True, traceback=False, config=[]): | |
67 | for section, name, value in config: |
|
74 | for section, name, value in config: | |
@@ -204,7 +211,9 b' class ui(object):' | |||||
204 | if name is None or name in ('quiet', 'verbose', 'debug'): |
|
211 | if name is None or name in ('quiet', 'verbose', 'debug'): | |
205 | self.verbosity_constraints() |
|
212 | self.verbosity_constraints() | |
206 | if name is None or name == 'interactive': |
|
213 | if name is None or name == 'interactive': | |
207 |
self.interactive = self.configbool("ui", "interactive", |
|
214 | self.interactive = self.configbool("ui", "interactive", None) | |
|
215 | if self.interactive is None: | |||
|
216 | self.interactive = self.isatty() | |||
208 | if name is None or name == 'report_untrusted': |
|
217 | if name is None or name == 'report_untrusted': | |
209 | self.report_untrusted = ( |
|
218 | self.report_untrusted = ( | |
210 | self.configbool("ui", "report_untrusted", True)) |
|
219 | self.configbool("ui", "report_untrusted", True)) | |
@@ -382,17 +391,29 b' class ui(object):' | |||||
382 | try: sys.stderr.flush() |
|
391 | try: sys.stderr.flush() | |
383 | except: pass |
|
392 | except: pass | |
384 |
|
393 | |||
385 | def readline(self): |
|
394 | def readline(self, prompt=''): | |
386 | return sys.stdin.readline()[:-1] |
|
395 | if self.isatty(): | |
|
396 | try: | |||
|
397 | # magically add command line editing support, where | |||
|
398 | # available | |||
|
399 | import readline | |||
|
400 | # force demandimport to really load the module | |||
|
401 | readline.read_history_file | |||
|
402 | except ImportError: | |||
|
403 | pass | |||
|
404 | return raw_input(prompt) | |||
|
405 | ||||
387 | def prompt(self, msg, pat=None, default="y"): |
|
406 | def prompt(self, msg, pat=None, default="y"): | |
388 | if not self.interactive: return default |
|
407 | if not self.interactive: return default | |
389 |
|
|
408 | try: | |
390 |
self. |
|
409 | r = self.readline(msg + ' ') | |
391 | r = self.readline() |
|
|||
392 | if not pat or re.match(pat, r): |
|
410 | if not pat or re.match(pat, r): | |
393 | return r |
|
411 | return r | |
394 | else: |
|
412 | else: | |
395 | self.write(_("unrecognized response\n")) |
|
413 | self.write(_("unrecognized response\n")) | |
|
414 | except EOFError: | |||
|
415 | raise util.Abort(_('response expected')) | |||
|
416 | ||||
396 | def getpass(self, prompt=None, default=None): |
|
417 | def getpass(self, prompt=None, default=None): | |
397 | if not self.interactive: return default |
|
418 | if not self.interactive: return default | |
398 | return getpass.getpass(prompt or _('password: ')) |
|
419 | return getpass.getpass(prompt or _('password: ')) |
General Comments 0
You need to be logged in to leave comments.
Login now