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