[PATCH 3 of 3] histedit: replace @addhisteditaction with @action

Augie Fackler raf at durin42.com
Wed Jan 6 18:51:23 CST 2016


On Tue, Jan 05, 2016 at 12:31:53PM -0600, timeless wrote:
> # HG changeset patch
> # User timeless <timeless at mozdev.org>
> # Date 1450906238 0
> #      Wed Dec 23 21:30:38 2015 +0000
> # Node ID 5b616db6e64040d138152297bff3b62245167917
> # Parent  0e22d25a49546b65a4eb53ef53f555634afdbef9
> histedit: replace @addhisteditaction with @action

These are queued, thanks.

>
> @action supports verbs, messages, priority, and internal
>
> messages should be translated.
> internal means the action should not be listed.
>
> geteditcomment will construct the verbs list based on
> @actions (prefering priority over non priority, otherwise
> favoring verbs with short forms over verbs without).
>
> diff --git a/hgext/histedit.py b/hgext/histedit.py
> --- a/hgext/histedit.py
> +++ b/hgext/histedit.py
> @@ -214,12 +214,19 @@
>  # leave the attribute unspecified.
>  testedwith = 'internal'
>
> +actiontable = {}
> +primaryactions = set()
> +secondaryactions = set()
> +tertiaryactions = set()
> +internalactions = set()
> +
>  def geteditcomment(first, last):
>      """ construct the editor comment
>      The comment includes::
>       - an intro
>       - sorted primary commands
>       - sorted short commands
> +     - sorted long commands
>
>      Commands are only included once.
>      """
> @@ -227,19 +234,27 @@
>
>  Commits are listed from least to most recent
>
> -Commands:""")
> -    # i18n: command names and abbreviations must remain untranslated
> -    verbs = _("""
> - e, edit = use commit, but stop for amending
> - m, mess = edit commit message without changing commit content
> - p, pick = use commit
> - d, drop = remove commit from history
> - f, fold = use commit, but combine it with the one above
> - r, roll = like fold, but discard this commit's description
> +Commands:
>  """)
> +    actions = []
> +    def addverb(v):
> +        a = actiontable[v]
> +        lines = a.message.split("\n")
> +        if len(a.verbs):
> +            v = ', '.join(sorted(a.verbs, key=lambda v: len(v)))
> +        actions.append(" %s = %s" % (v, lines[0]))
> +        actions.extend(['  %s' for l in lines[1:]])
> +
> +    for v in (
> +         sorted(primaryactions) +
> +         sorted(secondaryactions) +
> +         sorted(tertiaryactions)
> +        ):
> +        addverb(v)
> +    actions.append('')
>
>      return ''.join(['# %s\n' % l if l else '#\n'
> -                    for l in ((intro % (first, last) + verbs).split('\n'))])
> +                    for l in ((intro % (first, last)).split('\n')) + actions])
>
>  class histeditstate(object):
>      def __init__(self, repo, parentctxnode=None, actions=None, keep=None,
> @@ -596,21 +611,30 @@
>          hint=_('amend, commit, or revert them and run histedit '
>              '--continue, or abort with histedit --abort'))
>
> +def action(verbs, message, priority=False, internal=False):
> +    def wrap(cls):
> +        assert not priority or not internal
> +        verb = verbs[0]
> +        if priority:
> +            primaryactions.add(verb)
> +        elif internal:
> +            internalactions.add(verb)
> +        elif len(verbs) > 1:
> +            secondaryactions.add(verb)
> +        else:
> +            tertiaryactions.add(verb)
>
> -actiontable = {}
> -actionlist = []
> -
> -def addhisteditaction(verbs):
> -    def wrap(cls):
> -        cls.verb = verbs[0]
> +        cls.verb = verb
> +        cls.verbs = verbs
> +        cls.message = message
>          for verb in verbs:
>              actiontable[verb] = cls
> -        actionlist.append(cls)
>          return cls
>      return wrap
>
> -
> - at addhisteditaction(['pick', 'p'])
> + at action(['pick', 'p'],
> +        _('use commit'),
> +        priority=True)
>  class pick(histeditaction):
>      def run(self):
>          rulectx = self.repo[self.node]
> @@ -620,7 +644,9 @@
>
>          return super(pick, self).run()
>
> - at addhisteditaction(['edit', 'e'])
> + at action(['edit', 'e'],
> +        _('use commit, but stop for amending'),
> +        priority=True)
>  class edit(histeditaction):
>      def run(self):
>          repo = self.repo
> @@ -635,7 +661,8 @@
>      def commiteditor(self):
>          return cmdutil.getcommiteditor(edit=True, editform='histedit.edit')
>
> - at addhisteditaction(['fold', 'f'])
> + at action(['fold', 'f'],
> +        _('use commit, but combine it with the one above'))
>  class fold(histeditaction):
>      def verify(self, prev):
>          """ Verifies semantic correctness of the fold rule"""
> @@ -761,8 +788,8 @@
>          basectx = self.repo['.']
>          return basectx, []
>
> - at addhisteditaction(['_multifold'])
> -class _multifold(fold):
> + at action(['_multifold'],
> +        _(
>      """fold subclass used for when multiple folds happen in a row
>
>      We only want to fire the editor for the folded message once when
> @@ -770,11 +797,14 @@
>      similar to rollup, but we should preserve both messages so that
>      when the last fold operation runs we can show the user all the
>      commit messages in their editor.
> -    """
> +    """),
> +        internal=True)
> +class _multifold(fold):
>      def skipprompt(self):
>          return True
>
> - at addhisteditaction(["roll", "r"])
> + at action(["roll", "r"],
> +        _("like fold, but discard this commit's description"))
>  class rollup(fold):
>      def mergedescs(self):
>          return False
> @@ -782,13 +812,16 @@
>      def skipprompt(self):
>          return True
>
> - at addhisteditaction(["drop", "d"])
> + at action(["drop", "d"],
> +        _('remove commit from history'))
>  class drop(histeditaction):
>      def run(self):
>          parentctx = self.repo[self.state.parentctxnode]
>          return parentctx, [(self.node, tuple())]
>
> - at addhisteditaction(["mess", "m"])
> + at action(["mess", "m"],
> +        _('edit commit message without changing commit content'),
> +        priority=True)
>  class message(histeditaction):
>      def commiteditor(self):
>          return cmdutil.getcommiteditor(edit=True, editform='histedit.mess')
> @@ -1470,4 +1503,6 @@
>          ['histedit-state', False, True, _('histedit in progress'),
>           _("use 'hg histedit --continue' or 'hg histedit --abort'")])
>      if ui.configbool("experimental", "histeditng"):
> -        globals()['base'] = addhisteditaction(['base', 'b'])(base)
> +        globals()['base'] = action(['base', 'b'],
> +            _('checkout changeset and apply further changesets from there')
> +        )(base)
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list