[PATCH evolve-ext:stable] evolve: don't try to relocate a node on top of itself

Olle Lundberg olle.lundberg at gmail.com
Tue Mar 25 18:06:42 CDT 2014


# 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:


More information about the Mercurial-devel mailing list