Mercurial > hg-stable
diff hgext/histedit.py @ 24142:be7cb25186be
histedit: add --edit-plan option to histedit
--edit-plan allows user to edit remaining histedit rules in the middle of
histedit process
author | Mateusz Kwapich <mitrandir@fb.com> |
---|---|
date | Thu, 22 Jan 2015 12:36:38 -0800 |
parents | 671da7d34804 |
children | c3d13202144d |
line wrap: on
line diff
--- a/hgext/histedit.py Thu Jan 22 10:52:50 2015 -0800 +++ b/hgext/histedit.py Thu Jan 22 12:36:38 2015 -0800 @@ -509,6 +509,7 @@ [('', 'commands', '', _('Read history edits from the specified file.')), ('c', 'continue', False, _('continue an edit already in progress')), + ('', 'edit-plan', False, _('edit remaining actions list')), ('k', 'keep', False, _("don't strip old nodes after edit is complete")), ('', 'abort', False, _('abort an edit in progress')), @@ -558,6 +559,7 @@ # basic argument incompatibility processing outg = opts.get('outgoing') cont = opts.get('continue') + editplan = opts.get('edit_plan') abort = opts.get('abort') force = opts.get('force') rules = opts.get('commands', '') @@ -566,13 +568,18 @@ if force and not outg: raise util.Abort(_('--force only allowed with --outgoing')) if cont: - if util.any((outg, abort, revs, freeargs, rules)): + if util.any((outg, abort, revs, freeargs, rules, editplan)): raise util.Abort(_('no arguments allowed with --continue')) goal = 'continue' elif abort: - if util.any((outg, revs, freeargs, rules)): + if util.any((outg, revs, freeargs, rules, editplan)): raise util.Abort(_('no arguments allowed with --abort')) goal = 'abort' + elif editplan: + if util.any((outg, revs, freeargs)): + raise util.Abort(_('only --commands argument allowed with' + '--edit-plan')) + goal = 'edit-plan' else: if os.path.exists(os.path.join(repo.path, 'histedit-state')): raise util.Abort(_('history edit already in progress, try ' @@ -601,6 +608,25 @@ if goal == 'continue': state.read() state = bootstrapcontinue(ui, state, opts) + elif goal == 'edit-plan': + state = histeditstate(repo) + state.read() + if not rules: + comment = editcomment % (state.parentctx, node.short(state.topmost)) + rules = ruleeditor(repo, ui, state.rules, comment) + else: + if rules == '-': + f = sys.stdin + else: + f = open(rules) + rules = f.read() + f.close() + rules = [l for l in (r.strip() for r in rules.splitlines()) + if l and not l.startswith('#')] + rules = verifyrules(rules, repo, [repo[c] for [_a, c] in state.rules]) + state.rules = rules + state.write() + return elif goal == 'abort': state.read() mapping, tmpnodes, leafs, _ntm = processreplacement(state) @@ -642,9 +668,8 @@ ctxs = [repo[r] for r in revs] if not rules: - rules = ruleeditor(repo, ui, [['pick', c] for c in ctxs], - editcomment=editcomment % (node.short(root), - node.short(topmost))) + comment = editcomment % (node.short(root), node.short(topmost)) + rules = ruleeditor(repo, ui, [['pick', c] for c in ctxs], comment) else: if rules == '-': f = sys.stdin