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

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Thu Nov 28 09:11:31 CST 2013


# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1385651260 -32400
#      Fri Nov 29 00:07:40 2013 +0900
# Node ID 93639c1024e62de1f9c21d0ce784c9f41e1e34c1
# Parent  c426d0bd768dd9dd84599bb9bbbe3d0a3c4df9cc
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.

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


More information about the Mercurial-devel mailing list