[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