[PATCH evolve-ext-V4] evolve: add new method _evolvecontinue (issue4854)
timeless
timeless at gmail.com
Thu Jan 21 01:22:48 UTC 2016
You should also touch cmdutil.afterresolvedstates
On Wed, Jan 20, 2016 at 6:46 PM, Shusen LIU <liushusen at fb.com> wrote:
> # HG changeset patch
> # User Shusen LIU <liushusen at fb.com>
> # Date 1453333539 28800
> # Wed Jan 20 15:45:39 2016 -0800
> # Node ID 9f9170b5e6761ca1e4175d1aafb9604e2cc59fdf
> # Parent d4aa50ecc5a334694d4cad45985fcec494337d87
> evolve: add new method _evolvecontinue (issue4854)
>
> This patch introduces new method _evolvecontinue to for `hg evolve --continue`,
> get rip of previous implmentation which calls `graft` command. It reads/writes
> to `evolvestate` file for states.
>
> diff --git a/hgext/evolve.py b/hgext/evolve.py
> --- a/hgext/evolve.py
> +++ b/hgext/evolve.py
> @@ -112,6 +112,7 @@
> from mercurial import wireproto
> from mercurial import localrepo
> from mercurial.hgweb import hgweb_mod
> +from mercurial.lock import release
>
> cmdtable = {}
> command = cmdutil.command(cmdtable)
> @@ -952,6 +953,10 @@
> try:
> r = _evolvemerge(repo, orig, dest, pctx, keepbranch)
> if r[-1]: #some conflict
> + _evolvestatewrite(repo, {'orig': orig.hex(),
> + 'dest': dest.hex(),
> + 'commitmsg': commitmsg,
> + })
> raise error.Abort(
> 'unresolved merge conflicts (see hg help resolve)')
> nodenew = _relocatecommit(repo, orig, commitmsg)
> @@ -968,6 +973,7 @@
> raise
> oldbookmarks = repo.nodebookmarks(nodesrc)
> _finalizerelocate(repo, orig, dest, nodenew, tr)
> + _evolvestatedelete(repo)
> tr.close()
> finally:
> tr.release()
> @@ -1651,8 +1657,8 @@
> raise error.Abort('cannot specify both "--any" and "--continue"')
> if allopt:
> raise error.Abort('cannot specify both "--all" and "--continue"')
> - graftcmd = commands.table['graft'][0]
> - return graftcmd(ui, repo, old_obsolete=True, **{'continue': True})
> + _evolvecontinue(repo)
> + return 0
> cmdutil.bailifchanged(repo)
>
>
> @@ -1796,7 +1802,6 @@
> try:
> relocate(repo, orig, target, pctx, keepbranch)
> except MergeFailure:
> - repo.opener.write('graftstate', orig.hex() + '\n')
> repo.ui.write_err(_('evolve failed!\n'))
> repo.ui.write_err(
> _('fix conflict and run "hg evolve --continue"'
> @@ -3667,13 +3672,21 @@
> _helploader))
> help.helptable.sort()
>
> -def _relocatecommit(repo, orig, commitmsg):
> +def _relocatecommit(repo, orig, commitmsg, continued=False):
> if commitmsg is None:
> commitmsg = orig.description()
> - extra = dict(orig.extra())
> + extra = orig.extra().copy()
> if 'branch' in extra:
> del extra['branch']
> - extra['rebase_source'] = orig.hex()
> +
> + if continued:
> + source = extra.get('source')
> + if source:
> + extra['intermediate-source'] = orig.hex()
> + else:
> + extra['source'] = orig.hex()
> + else:
> + extra['rebase_source'] = orig.hex()
>
> backup = repo.ui.backupconfig('phases', 'new-commit')
> try:
> @@ -3764,3 +3777,29 @@
>
> def _evolvestatedelete(repo):
> util.unlinkpath(repo.join('evolvestate'), ignoremissing=True)
> +
> +def _evolvecontinue(repo):
> + state = _evolvestateread(repo)
> + orig = repo[state['orig']]
> + dest = repo[state['dest']]
> + commitmsg = state['commitmsg']
> +
> + desc = '%d:%s "%s"' % (orig.rev(), orig,
> + orig.description().split('\n', 1)[0])
> + names = repo.nodetags(orig.node()) + repo.nodebookmarks(orig.node())
> + if names:
> + desc += ' (%s)' % ' '.join(names)
> + repo.ui.status(_('evolving %s\n') % desc)
> +
> + wlock = lock = None
> + try:
> + wlock = repo.wlock() # must come first
> + lock = repo.lock()
> + tr = repo.transaction("evolvecontinue")
> + # perform write operation
> + nodenew = _relocatecommit(repo, orig, commitmsg, True)
> + _finalizerelocate(repo, orig, dest, nodenew, tr)
> + _evolvestatedelete(repo)
> + tr.close()
> + finally:
> + release(tr, lock, wlock) # reverse order
> diff --git a/tests/test-stabilize-conflict.t b/tests/test-stabilize-conflict.t
> --- a/tests/test-stabilize-conflict.t
> +++ b/tests/test-stabilize-conflict.t
> @@ -166,7 +166,7 @@
> $ hg resolve --all -m
> (no more unresolved files)
> $ hg evolve --continue
> - grafting 5:71c18f70c34f "babar count up to fifteen"
> + evolving 5:71c18f70c34f "babar count up to fifteen"
> $ hg resolve -l
> $ hg log -G
> @ changeset: 8:7f3d9db50b5d
> diff --git a/tests/test-stabilize-result.t b/tests/test-stabilize-result.t
> --- a/tests/test-stabilize-result.t
> +++ b/tests/test-stabilize-result.t
> @@ -97,13 +97,13 @@
> +a
> +newer a
> $ hg evolve --continue
> - grafting 5:3655f0f50885 "newer a"
> + evolving 5:3655f0f50885 "newer a"
> abort: unresolved merge conflicts (see "hg help resolve")
> [255]
> $ hg resolve -m a
> (no more unresolved files)
> $ hg evolve --continue
> - grafting 5:3655f0f50885 "newer a"
> + evolving 5:3655f0f50885 "newer a"
>
> Stabilize latecomer with different parent
> =========================================
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list