hgext3rd/evolve/rewriteutil.py
changeset 5038 f583d9eedbce
parent 4845 6f5d3f58fbe4
child 5078 66f01dd79f5d
child 5230 39d282fd04e0
equal deleted inserted replaced
5035:c5efcbbd0dc4 5038:f583d9eedbce
    19     error,
    19     error,
    20     hg,
    20     hg,
    21     lock as lockmod,
    21     lock as lockmod,
    22     node,
    22     node,
    23     obsolete,
    23     obsolete,
       
    24     obsutil,
    24     phases,
    25     phases,
    25     revset,
    26     revset,
    26     util,
    27     util,
    27 )
    28 )
    28 
    29 
   252 
   253 
   253         tr.close()
   254         tr.close()
   254         return newid, created
   255         return newid, created
   255     finally:
   256     finally:
   256         lockmod.release(tr, lock, wlock)
   257         lockmod.release(tr, lock, wlock)
       
   258 
       
   259 def contentdivrisk(repo, ctx):
       
   260     """logic to check if rewriting an obsolete cset will create divergence"""
       
   261     # We need to check two cases that can cause divergence:
       
   262     # case 1: the rev being rewritten has a non-obsolete successor (easily
       
   263     #     detected by successorssets)
       
   264     sset = obsutil.successorssets(repo, ctx.node())
       
   265     nodivergencerisk = (len(sset) == 0
       
   266                         or (len(sset) == 1
       
   267                             and len(sset[0]) == 1
       
   268                             and repo[sset[0][0]].rev() == ctx.rev()
       
   269                         ))
       
   270     if nodivergencerisk:
       
   271         # case 2: one of the precursors of the rev being revived has a
       
   272         #     non-obsolete successor (we need divergentsets for this)
       
   273         from . import evolvecmd
       
   274         if evolvecmd.divergentsets(repo, ctx):
       
   275             nodivergencerisk = False
       
   276     return not nodivergencerisk