obsolete: allow multiple predecessors in createmarkers
authorBoris Feld <boris.feld@octobus.net>
Sat, 22 Sep 2018 14:40:33 +0200
changeset 39922 6335c0de80fa
parent 39921 99f0f052b6bf
child 39923 61f39a892168
obsolete: allow multiple predecessors in createmarkers The logic for this change is similar to the change to `cleanupnodes` that we did earlier. Now that the rebase code is trying to record a fold, we need to actually record it in the markers. The first step is to have the markers creation API able to receive such fold data. To keep things sane, we restrict fold to on successors.
mercurial/obsolete.py
--- a/mercurial/obsolete.py	Wed Sep 26 21:03:09 2018 +0200
+++ b/mercurial/obsolete.py	Sat Sep 22 14:40:33 2018 +0200
@@ -959,7 +959,7 @@
                   operation=None):
     """Add obsolete markers between changesets in a repo
 
-    <relations> must be an iterable of (<old>, (<new>, ...)[,{metadata}])
+    <relations> must be an iterable of ((<old>,...), (<new>, ...)[,{metadata}])
     tuple. `old` and `news` are changectx. metadata is an optional dictionary
     containing metadata for this marker only. It is merged with the global
     metadata specified through the `metadata` argument of this function.
@@ -993,8 +993,14 @@
     with repo.transaction('add-obsolescence-marker') as tr:
         markerargs = []
         for rel in relations:
-            prec = rel[0]
-            if True:
+            predecessors = rel[0]
+            if not isinstance(predecessors, tuple):
+                # preserve compat with old API until all caller are migrated
+                predecessors = (predecessors,)
+            if 1 < len(predecessors) and len(rel[1]) != 1:
+                msg = 'Fold markers can only have 1 successors, not %d'
+                raise error.ProgrammingError(msg % len(rel[1]))
+            for prec in predecessors:
                 sucs = rel[1]
                 localmetadata = metadata.copy()
                 if 2 < len(rel):