[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
Fri Jan 17 01:20:47 CST 2014


At Thu, 16 Jan 2014 09:50:23 -0500,
Augie Fackler wrote:
> 
> On Mon, Dec 02, 2013 at 01:01:53AM +0900, FUJIWARA Katsunori wrote:
> > # 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):
> 
> If this method can be completely static, why not move it out of the ui
> object entirely?

Defining "extractchoices()" in "ui" class allows callers to use it
without newly adding "import ui".

"record" and "transplant" extensions (callers of "extractchoices()" in
this series) don't import "mercurial.ui" before and after this series.


> > +        """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:
> > _______________________________________________
> > Mercurial-devel mailing list
> > Mercurial-devel at selenic.com
> > http://selenic.com/mailman/listinfo/mercurial-devel
> 

----------------------------------------------------------------------
[FUJIWARA Katsunori]                             foozy at lares.dti.ne.jp


More information about the Mercurial-devel mailing list