[PATCH evolve-ext:stable] evolve: don't try to relocate a node on top of itself
Angel Ezquerra
angel.ezquerra at gmail.com
Tue Mar 25 18:10:12 CDT 2014
On Wed, Mar 26, 2014 at 12:06 AM, Olle Lundberg <olle.lundberg at gmail.com> wrote:
> # HG changeset patch
> # User Olle Lundberg <geek at nerd.sh>
> # Date 1395788513 -3600
> # Wed Mar 26 00:01:53 2014 +0100
> # Branch stable
> # Node ID 5a2abe5bae7ae4f439d4a078b7891e3bcf6bcc48
> # Parent 6a67606e1c3456c603707fe57e8404af5e33a1bd
> evolve: don't try to relocate a node on top of itself
>
> This fixes problems with "no support for evolution merge changes yet"
> on a linear repo, where evolve thinks that a node is supposed to be
> relocated on top of itself.
>
> diff --git a/hgext/evolve.py b/hgext/evolve.py
> --- a/hgext/evolve.py
> +++ b/hgext/evolve.py
> @@ -1007,36 +1007,39 @@
> targets = newer[0]
> assert targets
> if len(targets) > 1:
> raise util.Abort(_("does not handle split parents yet\n"))
> return 2
> - target = targets[0]
> - displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
> - target = repo[target]
> - repo.ui.status(_('move:'))
> - if not ui.quiet:
> - displayer.show(orig)
> - repo.ui.status(_('atop:'))
> - if not ui.quiet:
> - displayer.show(target)
> - if progresscb: progresscb()
> - todo = 'hg rebase -r %s -d %s\n' % (orig, target)
> - if dryrun:
> - repo.ui.write(todo)
> - else:
> - repo.ui.note(todo)
> - if progresscb: progresscb()
> - lock = repo.lock()
> - try:
> - relocate(repo, orig, target)
> - 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"\n'))
> - raise
> - finally:
> - lock.release()
> + target = repo[targets[0]]
> + # Target revision is same as original revision, it makes no sense to try
> + # to relocate a node on top of itself.
> + if target.rev() != orig.rev()
> + displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
> + repo.ui.status(_('move:'))
> + if not ui.quiet:
> + displayer.show(orig)
> + repo.ui.status(_('atop:'))
> + if not ui.quiet:
> + displayer.show(target)
> + if progresscb:
> + progresscb()
> + todo = 'hg rebase -r %s -d %s\n' % (orig, target)
> + if dryrun:
> + repo.ui.write(todo)
> + else:
> + repo.ui.note(todo)
> + if progresscb: progresscb()
> + lock = repo.lock()
> + try:
> + relocate(repo, orig, target)
> + 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"\n'))
> + raise
> + finally:
> + lock.release()
>
> def _solvebumped(ui, repo, bumped, dryrun=False, progresscb=None):
> """Stabilize a bumped changeset"""
> # For now we deny bumped merge
> if len(bumped.parents()) > 1:
Wouldn't it be better to just do the check and exit early (showing
some error message), and keep the rest of the code the same? That
would be a much smaller patch.
Cheers,
angel
More information about the Mercurial-devel
mailing list