[PATCH evolve-ext:stable] evolve: don't try to relocate a node on top of itself
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Tue Mar 25 23:13:45 UTC 2014
On 03/25/2014 04:10 PM, Angel Ezquerra wrote:
> 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.
What angel say, In theory, this should not happen at all. So the current
step is to move from
- I'm happily performing a non-sense operation
to
- I detect this is non-sense and abort before doing anything bad.
Informing the user he hit a bad bad an must use rebase by himself to
solve the situation.
You current patch make a bad error silent and this is bad bad bad
Thanks for looking at it however.
--
Pierre-Yves
More information about the Mercurial-devel
mailing list