Patchwork [5,of,5] histedit: switch editcomment to use actionlist

login
register
mail settings
Submitter timeless@mozdev.org
Date Dec. 23, 2015, 9:10 a.m.
Message ID <4bcfcb7278b50896e538.1450861803@waste.org>
Download mbox | patch
Permalink /patch/12290/
State Superseded
Headers show

Comments

timeless@mozdev.org - Dec. 23, 2015, 9:10 a.m.
# HG changeset patch
# User timeless <timeless@mozdev.org>
# Date 1450855004 0
#      Wed Dec 23 07:16:44 2015 +0000
# Node ID 4bcfcb7278b50896e5386701dca8871b2a45ab55
# Parent  eb5f4e0a1fe3638a73475d1383ec8f67a3f55152
histedit: switch editcomment to use actionlist

Patch

diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -218,25 +218,39 @@ 
 # leave the attribute unspecified.
 testedwith = 'internal'
 
+actiontable = {}
+actionlist = []
+
 def editcomment(first, last):
-    preamble = _("""# Edit history between %s and %s
-#
-# Commits are listed from least to most recent
-#
-# Commands:
-%s""")
-    verbs = (
-"d, drop = %s" % _("remove commit from history"),
-"e, edit = %s" % _("use commit, but stop for amending"),
-"f, fold = %s" % _("use commit, but combine it with the one above"),
-"m, mess = %s" % _("edit commit message without changing commit content"),
-"p, pick = %s" % _("use commit"),
-"r, roll = %s" % _("like fold, but discard this commit's description"),
-"",
-)
-    verbs = ''.join(["#  %s\n" % l if l else '#\n' for l in verbs])
+    intro = _("""Edit history between %s and %s
 
-    return preamble % (first, last, verbs)
+Commits are listed from least to most recent
+
+Commands:""")
+    diffkeys = set()
+    skipkeys = set()
+    samekeys = set()
+    for l, a in actiontable.iteritems():
+        if l == a.verb:
+            # skip internal actions
+            if l[0] != '_':
+                samekeys.add(l)
+        else:
+            diffkeys.add(l)
+            skipkeys.add(a.verb)
+    actions = []
+    for l in sorted(diffkeys):
+        lines = actiontable[l].message.split("\n")
+        actions.append(" %s, %s = %s" % (l, actiontable[l].verb, lines[0]))
+        actions.extend(['  %s' for l in lines[1:]])
+    for l in sorted(samekeys - skipkeys):
+        lines = actiontable[l].message.split("\n")
+        actions.append(" %s = %s" % (l, lines[0]))
+        actions.extend(['  %s' for l in lines[1:]])
+    actions.append('')
+
+    return ''.join(['# %s\n' % l if l else '#\n'
+                    for l in ((intro % (first, last)).split('\n')) + actions])
 
 class histeditstate(object):
     def __init__(self, repo, parentctxnode=None, actions=None, keep=None,
@@ -589,13 +603,10 @@ 
         hint=_('amend, commit, or revert them and run histedit '
             '--continue, or abort with histedit --abort'))
 
-
-actiontable = {}
-actionlist = []
-
 def addhisteditaction(verbs):
     def wrap(cls):
         cls.verb = verbs[0]
+        cls.message = _(cls.__doc__) or _('(unknown action)')
         for verb in verbs:
             actiontable[verb] = cls
         actionlist.append(cls)