diff -r 32e8d94b9473 -r 11d72683f3de hgext/histedit.py --- a/hgext/histedit.py Fri Feb 06 16:09:43 2015 -0800 +++ b/hgext/histedit.py Fri Jan 30 16:47:35 2015 -0800 @@ -158,6 +158,7 @@ from mercurial import error from mercurial import copies from mercurial import context +from mercurial import extensions from mercurial import hg from mercurial import node from mercurial import repair @@ -674,6 +675,7 @@ actfunc = actiontable[action] state.parentctx, replacement_ = actfunc(ui, state, ha, opts) state.replacements.extend(replacement_) + state.write() hg.update(repo, state.parentctx.node()) @@ -971,6 +973,23 @@ finally: release(lock) +def stripwrapper(orig, ui, repo, nodelist, *args, **kwargs): + if isinstance(nodelist, str): + nodelist = [nodelist] + if os.path.exists(os.path.join(repo.path, 'histedit-state')): + state = histeditstate(repo) + state.read() + histedit_nodes = set([ctx for (action, ctx) in state.rules]) + strip_nodes = set([repo[n].hex() for n in nodelist]) + common_nodes = histedit_nodes & strip_nodes + if common_nodes: + raise util.Abort(_('unable to strip %s. Nodes are ' + 'used by history edit in progress.') + % ', '.join(common_nodes)) + return orig(ui, repo, nodelist, *args, **kwargs) + +extensions.wrapfunction(repair, 'strip', stripwrapper) + def summaryhook(ui, repo): if not os.path.exists(repo.join('histedit-state')): return