hgext3rd/evolve/rewriteutil.py
changeset 5038 f583d9eedbce
parent 4845 6f5d3f58fbe4
child 5078 66f01dd79f5d
child 5230 39d282fd04e0
--- a/hgext3rd/evolve/rewriteutil.py	Thu Dec 26 21:23:30 2019 +0100
+++ b/hgext3rd/evolve/rewriteutil.py	Wed Nov 06 18:15:00 2019 +0530
@@ -21,6 +21,7 @@
     lock as lockmod,
     node,
     obsolete,
+    obsutil,
     phases,
     revset,
     util,
@@ -254,3 +255,22 @@
         return newid, created
     finally:
         lockmod.release(tr, lock, wlock)
+
+def contentdivrisk(repo, ctx):
+    """logic to check if rewriting an obsolete cset will create divergence"""
+    # We need to check two cases that can cause divergence:
+    # case 1: the rev being rewritten has a non-obsolete successor (easily
+    #     detected by successorssets)
+    sset = obsutil.successorssets(repo, ctx.node())
+    nodivergencerisk = (len(sset) == 0
+                        or (len(sset) == 1
+                            and len(sset[0]) == 1
+                            and repo[sset[0][0]].rev() == ctx.rev()
+                        ))
+    if nodivergencerisk:
+        # case 2: one of the precursors of the rev being revived has a
+        #     non-obsolete successor (we need divergentsets for this)
+        from . import evolvecmd
+        if evolvecmd.divergentsets(repo, ctx):
+            nodivergencerisk = False
+    return not nodivergencerisk