[PATCH 10 of 11 RFC] histedit: add -x/--exec flag
Olle Lundberg
olle.lundberg at gmail.com
Wed Mar 5 10:15:21 CST 2014
# 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
More information about the Mercurial-devel
mailing list