Patchwork [4,of,5] transplant: use "ui.promptchoice()" for interactive transplant

login
register
mail settings
Submitter Katsunori FUJIWARA
Date Nov. 18, 2013, 10:43 a.m.
Message ID <2fc25b01200edcc50484.1384771438@juju>
Download mbox | patch
Permalink /patch/3055/
State Superseded
Headers show

Comments

Katsunori FUJIWARA - Nov. 18, 2013, 10:43 a.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1384770812 -32400
#      Mon Nov 18 19:33:32 2013 +0900
# Node ID 2fc25b01200edcc50484db5c52282832737cdc3f
# Parent  c715df7c1ba18733570c12937f7421042fe932dc
transplant: use "ui.promptchoice()" for interactive transplant

Before this patch, transplant extension uses "ui.prompt()" for
interactive transplant, and has to check whether user response
returned by "ui.prompt()" is valid or not in own code.

In addition to it, transplant extension uses response characters
(e.g. "y", "n", and so on) directly in own code, and this disallows to
use another response characters by translation, even though the help
shown by '?'  typing is translatable.

This patch uses "ui.promptchoice()" instead of "ui.prompt()" to
resolve problems above.

Patch

diff --git a/hgext/transplant.py b/hgext/transplant.py
--- a/hgext/transplant.py
+++ b/hgext/transplant.py
@@ -463,11 +463,19 @@ 
     displayer = cmdutil.show_changeset(ui, repo, opts)
     transplants = []
     merges = []
+    prompt = _('apply changeset? [ynmpcq?]:'
+               '$$ &yes, transplant this changeset'
+               '$$ &no, skip this changeset'
+               '$$ &merge at this changeset'
+               '$$ show &patch'
+               '$$ &commit selected changesets'
+               '$$ &quit and cancel transplant'
+               '$$ &? (show this help)')
     for node in nodes:
         displayer.show(repo[node])
         action = None
         while not action:
-            action = ui.prompt(_('apply changeset? [ynmpcq?]:'))
+            action = 'ynmpcq?'[ui.promptchoice(prompt)]
             if action == '?':
                 browsehelp(ui)
                 action = None
@@ -476,9 +484,6 @@ 
                 for chunk in patch.diff(repo, parent, node):
                     ui.write(chunk)
                 action = None
-            elif action not in ('y', 'n', 'm', 'c', 'q'):
-                ui.write(_('no such option\n'))
-                action = None
         if action == 'y':
             transplants.append(node)
         elif action == 'm':
diff --git a/tests/test-transplant.t b/tests/test-transplant.t
--- a/tests/test-transplant.t
+++ b/tests/test-transplant.t
@@ -492,7 +492,7 @@ 
   > q
   > EOF
   1:d11e3596cc1a
-  apply changeset? [ynmpcq?]: no such option
+  apply changeset? [ynmpcq?]: unrecognized response
   apply changeset? [ynmpcq?]: y: transplant this changeset
   n: skip this changeset
   m: merge at this changeset