--- a/mercurial/ui.py Sun Jul 05 17:09:01 2009 +0200
+++ b/mercurial/ui.py Sun Jun 21 01:13:19 2009 +0200
@@ -269,30 +269,35 @@
line = line[:-1]
return line
- def prompt(self, msg, choices=None, default="y"):
- """Prompt user with msg, read response, and ensure it matches
- one of the provided choices. choices is a sequence of acceptable
- responses with the format: ('&None', 'E&xec', 'Sym&link')
- No sequence implies no response checking. Responses are case
- insensitive. If ui is not interactive, the default is returned.
+ def prompt(self, msg, default="y"):
+ """Prompt user with msg, read response.
+ If ui is not interactive, the default is returned.
"""
if not self.interactive():
self.write(msg, ' ', default, "\n")
return default
+ try:
+ r = self._readline(msg + ' ')
+ if not r:
+ return default
+ return r
+ except EOFError:
+ raise util.Abort(_('response expected'))
+
+ def promptchoice(self, msg, choices, default=0):
+ """Prompt user with msg, read response, and ensure it matches
+ one of the provided choices. The index of the choice is returned.
+ choices is a sequence of acceptable responses with the format:
+ ('&None', 'E&xec', 'Sym&link') Responses are case insensitive.
+ If ui is not interactive, the default is returned.
+ """
+ resps = [s[s.index('&')+1].lower() for s in choices]
while True:
- try:
- r = self._readline(msg + ' ')
- if not r:
- return default
- if not choices:
- return r
- resps = [s[s.index('&')+1].lower() for s in choices]
- if r.lower() in resps:
- return r.lower()
- else:
- self.write(_("unrecognized response\n"))
- except EOFError:
- raise util.Abort(_('response expected'))
+ r = self.prompt(msg, resps[default])
+ if r.lower() in resps:
+ return resps.index(r.lower())
+ self.write(_("unrecognized response\n"))
+
def getpass(self, prompt=None, default=None):
if not self.interactive(): return default