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

Olle olle.lundberg at gmail.com
Thu Mar 6 04:32:45 CST 2014


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

>
>
> 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.
>

I also found this really useful when doing development and wanted to inject
a test run after each change, after restructuring my patches i ran this:
lhg histedit --exec "python run-tests.py test-check-code*
test-check-pyflakes.t test-histedit*"

Which allows me to re-run relevant part of the test suite after each change
i made.


> --
> Olle
>



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


More information about the Mercurial-devel mailing list