equal
deleted
inserted
replaced
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 |