[PATCH 10 of 11 RFC] histedit: add -x/--exec flag

Olle olle.lundberg at gmail.com
Wed Mar 5 16:44:33 CST 2014


On Wed, Mar 5, 2014 at 5:15 PM, Olle Lundberg <olle.lundberg at gmail.com>wrote:

> # HG changeset patch
> # User Olle Lundberg <geek at nerd.sh>
> # Date 1394020502 -3600
> #      Wed Mar 05 12:55:02 2014 +0100
> # Node ID 675c70c708d124506fbbc2b720763024f4b0384a
> # Parent  24a57c88dacd922d9891b421d769d8ca51644d2c
> histedit: add -x/--exec flag
>
> diff --git a/hgext/histedit.py b/hgext/histedit.py
> --- a/hgext/histedit.py
> +++ b/hgext/histedit.py
> @@ -147,10 +147,11 @@
>  try:
>      import cPickle as pickle
>      pickle.dump # import now
>  except ImportError:
>      import pickle
> +import itertools
>  import os
>  import sys
>
>  from mercurial import cmdutil
>  from mercurial import discovery
> @@ -488,10 +489,13 @@
>        _("don't strip old nodes after edit is complete")),
>       ('', 'abort', False, _('abort an edit in progress')),
>       ('o', 'outgoing', False, _('changesets not found in destination')),
>       ('f', 'force', False,
>        _('force outgoing even for unrelated repositories')),
> +     ('x', 'exec', '',
> +      _('append an exec line after each commit in the list containing
> CMD'),
> +      _('CMD')),
>       ('r', 'rev', [], _('first revision to be edited'))],
>       _("ANCESTOR | --outgoing [URL]"))
>  def histedit(ui, repo, *freeargs, **opts):
>      """interactively edit changeset history
>
> @@ -533,10 +537,11 @@
>      # basic argument incompatibility processing
>      outg = opts.get('outgoing')
>      cont = opts.get('continue')
>      abort = opts.get('abort')
>      force = opts.get('force')
> +    execute_ = opts.get('exec')
>      rules = opts.get('commands', '')
>      revs = opts.get('rev', [])
>      goal = 'new' # This invocation goal, in new, continue, abort
>      if force and not outg:
>          raise util.Abort(_('--force only allowed with --outgoing'))
> @@ -546,10 +551,12 @@
>          goal = 'continue'
>      elif abort:
>          if util.any((outg, revs, freeargs, rules)):
>              raise util.Abort(_('no arguments allowed with --abort'))
>          goal = 'abort'
> +    elif execute_ and util.any((outg, cont, abort, force, rules)):
> +        raise util.Abort(_('no arguments except --rev allowed with
> --exec'))
>      else:
>          if os.path.exists(os.path.join(repo.path, 'histedit-state')):
>              raise util.Abort(_('history edit already in progress, try '
>                                 '--continue or --abort'))
>          if outg:
> @@ -607,11 +614,15 @@
>              raise util.Abort(_('%s is not an ancestor of working
> directory') %
>                               node.short(root))
>
>          ctxs = [repo[r] for r in revs]
>          if not rules:
> -            rules = '\n'.join([makedesc(c) for c in ctxs])
> +            nodes = [makedesc(c) for c in ctxs]
> +            if execute_:
> +                execline = "%s %s" % ('exec', execute_)
> +                nodes = itertools.chain(*zip(nodes,[execline] *
> len(nodes)))
> +            rules = '\n'.join(nodes)
>              rules += '\n\n'
>              rules += editcomment % (node.short(root), node.short(topmost))
>              rules = ui.edit(rules, ui.username())
>              # Save edit rules in .hg/histedit-last-edit.txt in case
>              # the user needs to ask for help after something
>


The reason behind this patch is compatibility with gits rebase x/exec and
the corresponding flags -x/--exec, for which this change was modeled after.

-- 
Olle
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20140305/d51f74d5/attachment.html>


More information about the Mercurial-devel mailing list