[PATCH 3 of 4] histedit: switch state to store node instead of ctx
Mateusz Kwapich
mitrandir at fb.com
Mon Feb 2 17:55:21 CST 2015
# HG changeset patch
# User Mateusz Kwapich <mitrandir at fb.com>
# Date 1422314748 28800
# Mon Jan 26 15:25:48 2015 -0800
# Node ID 5868827d6d1a2a75d9628d502281d0d7fad2b115
# Parent 0c8cf9835334d76f52e7cebf9d70b5b0df646871
histedit: switch state to store node instead of ctx
As part of making histedit more robust to odd changes between actions, we need
to store the parentctxnode on the state instead of the parentctx. This will
allow the parentctx to be deleted in the middle of a histedit (like if someone
pauses the histedit and amends a file away).
This change just changes what is stored, it doesn't actually fix histedit to
work if the parentctx gets deleted. That will come later.
diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -189,13 +189,13 @@
""")
class histeditstate(object):
- def __init__(self, repo, parentctx=None, rules=None, keep=None,
+ def __init__(self, repo, parentctxnode=None, rules=None, keep=None,
topmost=None, replacements=None, lock=None, wlock=None):
self.repo = repo
self.rules = rules
self.keep = keep
self.topmost = topmost
- self.parentctx = parentctx
+ self.parentctxnode = parentctxnode
self.lock = lock
self.wlock = wlock
if replacements is None:
@@ -214,7 +214,7 @@
parentctxnode, rules, keep, topmost, replacements = pickle.load(fp)
- self.parentctx = self.repo[parentctxnode]
+ self.parentctxnode = parentctxnode
self.rules = rules
self.keep = keep
self.topmost = topmost
@@ -222,7 +222,7 @@
def write(self):
fp = self.repo.vfs('histedit-state', 'w')
- pickle.dump((self.parentctx.node(), self.rules, self.keep,
+ pickle.dump((self.parentctxnode, self.rules, self.keep,
self.topmost, self.replacements), fp)
fp.close()
@@ -346,7 +346,8 @@
return repo.commitctx(new)
def pick(ui, state, ha, opts):
- repo, ctx = state.repo, state.parentctx
+ repo, ctxnode = state.repo, state.parentctxnode
+ ctx = repo[ctxnode]
oldctx = repo[ha]
if oldctx.parents()[0] == ctx:
ui.debug('node %s unchanged\n' % ha[:12])
@@ -368,7 +369,8 @@
def edit(ui, state, ha, opts):
- repo, ctx = state.repo, state.parentctx
+ repo, ctxnode = state.repo, state.parentctxnode
+ ctx = repo[ctxnode]
oldctx = repo[ha]
hg.update(repo, ctx.node())
applychanges(ui, repo, oldctx, opts)
@@ -382,7 +384,8 @@
return fold(ui, state, ha, rollupopts)
def fold(ui, state, ha, opts):
- repo, ctx = state.repo, state.parentctx
+ repo, ctxnode = state.repo, state.parentctxnode
+ ctx = repo[ctxnode]
oldctx = repo[ha]
hg.update(repo, ctx.node())
stats = applychanges(ui, repo, oldctx, opts)
@@ -438,12 +441,14 @@
return repo[n], replacements
def drop(ui, state, ha, opts):
- repo, ctx = state.repo, state.parentctx
+ repo, ctxnode = state.repo, state.parentctxnode
+ ctx = repo[ctxnode]
return ctx, [(repo[ha].node(), ())]
def message(ui, state, ha, opts):
- repo, ctx = state.repo, state.parentctx
+ repo, ctxnode = state.repo, state.parentctxnode
+ ctx = repo[ctxnode]
oldctx = repo[ha]
hg.update(repo, ctx.node())
stats = applychanges(ui, repo, oldctx, opts)
@@ -599,7 +604,7 @@
ui.debug('restore wc to old parent %s\n' % node.short(state.topmost))
# check whether we should update away
parentnodes = [c.node() for c in repo[None].parents()]
- for n in leafs | set([state.parentctx.node()]):
+ for n in leafs | set([state.parentctxnode]):
if n in parentnodes:
hg.clean(repo, state.topmost)
break
@@ -655,9 +660,9 @@
if l and not l.startswith('#')]
rules = verifyrules(rules, repo, ctxs)
- parentctx = repo[root].parents()[0]
+ parentctxnode = repo[root].parents()[0].node()
- state.parentctx = parentctx
+ state.parentctxnode = parentctxnode
state.rules = rules
state.keep = keep
state.topmost = topmost
@@ -668,10 +673,11 @@
action, ha = state.rules.pop(0)
ui.debug('histedit: processing %s %s\n' % (action, ha[:12]))
actfunc = actiontable[action]
- state.parentctx, replacement_ = actfunc(ui, state, ha, opts)
+ parentctx, replacement_ = actfunc(ui, state, ha, opts)
+ state.parentctxnode = parentctx.node()
state.replacements.extend(replacement_)
- hg.update(repo, state.parentctx.node())
+ hg.update(repo, state.parentctxnode)
mapping, tmpnodes, created, ntm = processreplacement(state)
if mapping:
@@ -724,7 +730,8 @@
return newchildren
def bootstrapcontinue(ui, state, opts):
- repo, parentctx = state.repo, state.parentctx
+ repo, parentctxnode = state.repo, state.parentctxnode
+ parentctx = repo[parentctxnode]
action, currentnode = state.rules.pop(0)
ctx = repo[currentnode]
@@ -780,7 +787,7 @@
# otherwise update "parentctx" before proceeding to further operation
parentctx = repo[newchildren[-1]]
- state.parentctx = parentctx
+ state.parentctxnode = parentctx.node()
state.replacements.extend(replacements)
return state
More information about the Mercurial-devel
mailing list