[PATCH 1 of 5 V3] ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori
foozy at lares.dti.ne.jp
Sun Dec 1 16:01:53 UTC 2013
# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1385913029 -32400
# Mon Dec 02 00:50:29 2013 +0900
# Node ID e67c39469f0b1f19b5b328d625022e8a30d13c55
# Parent 1df77035c8141d4586ff5af84c34d54cb9912402
ui: add "extractchoices()" to share the logic to extract choices from prompt
diff --git a/mercurial/ui.py b/mercurial/ui.py
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -640,6 +640,20 @@
except EOFError:
raise util.Abort(_('response expected'))
+ @staticmethod
+ def extractchoices(prompt):
+ """Extract prompt message and list of choices from specified prompt.
+
+ This returns tuple "(message, choices)", and "choices" is the
+ list of tuple "(response character, text without &)".
+ """
+ parts = prompt.split('$$')
+ msg = parts[0].rstrip(' ')
+ choices = [p.strip(' ') for p in parts[1:]]
+ return (msg,
+ [(s[s.index('&') + 1].lower(), s.replace('&', '', 1))
+ for s in choices])
+
def promptchoice(self, prompt, default=0):
"""Prompt user with a message, read response, and ensure it matches
one of the provided choices. The prompt is formatted as follows:
@@ -651,10 +665,8 @@
returned.
"""
- parts = prompt.split('$$')
- msg = parts[0].rstrip(' ')
- choices = [p.strip(' ') for p in parts[1:]]
- resps = [s[s.index('&') + 1].lower() for s in choices]
+ msg, choices = self.extractchoices(prompt)
+ resps = [r for r, t in choices]
while True:
r = self.prompt(msg, resps[default])
if r.lower() in resps:
More information about the Mercurial-devel
mailing list