[PATCH 2 of 4 V2] histedit: switch state to store node instead of ctx
Augie Fackler
raf at durin42.com
Tue Feb 3 09:39:42 CST 2015
On Mon, Feb 02, 2015 at 04:32:27PM -0800, Mateusz Kwapich wrote:
> # 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,
By changing the format of this file, you win the lottery! By which I
mean "it's time to stop using pickle, so fix that first."
> 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
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list