diff hgext/rebase.py @ 17613:aafc521668d8

rebase: properly handle --collapse when creating obsolescence marker In collapse mode, that content of state is not suitable to compute obsolescence markers. We explicitly pass the resulting revision instead and use it as the successors for all elements of the rebased set.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Tue, 18 Sep 2012 23:42:27 +0200
parents fc2a6114f0a0
children d417986e5e05
line wrap: on
line diff
--- a/hgext/rebase.py	Tue Sep 18 23:13:31 2012 +0200
+++ b/hgext/rebase.py	Tue Sep 18 23:42:27 2012 +0200
@@ -310,7 +310,10 @@
                     nstate[repo[k].node()] = repo[v].node()
 
         if not keepf:
-            clearrebased(ui, repo, state)
+            collapsedas = None
+            if collapsef:
+                collapsedas = newrev
+            clearrebased(ui, repo, state, collapsedas)
 
         if currentbookmarks:
             updatebookmarks(repo, nstate, currentbookmarks, **opts)
@@ -656,12 +659,17 @@
         state.update(dict.fromkeys(detachset, nullmerge))
     return repo['.'].rev(), dest.rev(), state
 
-def clearrebased(ui, repo, state):
-    """dispose of rebased revision at the end of the rebase"""
+def clearrebased(ui, repo, state, collapsedas=None):
+    """dispose of rebased revision at the end of the rebase
+
+    If `collapsedas` is not None, the rebase was a collapse whose result if the
+    `collapsedas` node."""
     if obsolete._enabled:
         markers = []
         for rev, newrev in sorted(state.items()):
             if newrev >= 0:
+                if collapsedas is not None:
+                    newrev = collapsedas
                 markers.append((repo[rev], (repo[newrev],)))
         if markers:
             obsolete.createmarkers(repo, markers)