[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