diff -r c5efcbbd0dc4 -r f583d9eedbce hgext3rd/evolve/rewriteutil.py --- 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