##// END OF EJS Templates
rebase: refactor of error handling code path for rebaseskipobsolete...
Laurent Charignon -
r28685:6c4d23fe default
parent child Browse files
Show More
@@ -305,31 +305,9 b' def rebase(ui, repo, **opts):'
305 rebaseobsrevs,
305 rebaseobsrevs,
306 dest)
306 dest)
307 rebaseobsskipped = set(obsoletenotrebased)
307 rebaseobsskipped = set(obsoletenotrebased)
308
308 _checkobsrebase(repo, ui, rebaseobsrevs,
309 # Obsolete node with successors not in dest leads to divergence
309 rebasesetrevs,
310 divergenceok = ui.configbool('experimental',
310 rebaseobsskipped)
311 'allowdivergence')
312 divergencebasecandidates = rebaseobsrevs - rebaseobsskipped
313
314 if divergencebasecandidates and not divergenceok:
315 divhashes = (str(repo[r])
316 for r in divergencebasecandidates)
317 msg = _("this rebase will cause "
318 "divergences from: %s")
319 h = _("to force the rebase please set "
320 "experimental.allowdivergence=True")
321 raise error.Abort(msg % (",".join(divhashes),), hint=h)
322
323 # - plain prune (no successor) changesets are rebased
324 # - split changesets are not rebased if at least one of the
325 # changeset resulting from the split is an ancestor of dest
326 rebaseset = rebasesetrevs - rebaseobsskipped
327 if rebasesetrevs and not rebaseset:
328 msg = _('all requested changesets have equivalents '
329 'or were marked as obsolete')
330 hint = _('to force the rebase, set the config '
331 'experimental.rebaseskipobsolete to False')
332 raise error.Abort(msg, hint=hint)
333
311
334 result = buildstate(repo, dest, rebaseset, collapsef,
312 result = buildstate(repo, dest, rebaseset, collapsef,
335 obsoletenotrebased)
313 obsoletenotrebased)
@@ -709,6 +687,43 b' def nearestrebased(repo, rev, state):'
709 else:
687 else:
710 return None
688 return None
711
689
690 def _checkobsrebase(repo, ui,
691 rebaseobsrevs,
692 rebasesetrevs,
693 rebaseobsskipped):
694 """
695 Abort if rebase will create divergence or rebase is noop because of markers
696
697 `rebaseobsrevs`: set of obsolete revision in source
698 `rebasesetrevs`: set of revisions to be rebased from source
699 `rebaseobsskipped`: set of revisions from source skipped because they have
700 successors in destination
701 """
702 # Obsolete node with successors not in dest leads to divergence
703 divergenceok = ui.configbool('experimental',
704 'allowdivergence')
705 divergencebasecandidates = rebaseobsrevs - rebaseobsskipped
706
707 if divergencebasecandidates and not divergenceok:
708 divhashes = (str(repo[r])
709 for r in divergencebasecandidates)
710 msg = _("this rebase will cause "
711 "divergences from: %s")
712 h = _("to force the rebase please set "
713 "experimental.allowdivergence=True")
714 raise error.Abort(msg % (",".join(divhashes),), hint=h)
715
716 # - plain prune (no successor) changesets are rebased
717 # - split changesets are not rebased if at least one of the
718 # changeset resulting from the split is an ancestor of dest
719 rebaseset = rebasesetrevs - rebaseobsskipped
720 if rebasesetrevs and not rebaseset:
721 msg = _('all requested changesets have equivalents '
722 'or were marked as obsolete')
723 hint = _('to force the rebase, set the config '
724 'experimental.rebaseskipobsolete to False')
725 raise error.Abort(msg, hint=hint)
726
712 def defineparents(repo, rev, target, state, targetancestors):
727 def defineparents(repo, rev, target, state, targetancestors):
713 'Return the new parent relationship of the revision that will be rebased'
728 'Return the new parent relationship of the revision that will be rebased'
714 parents = repo[rev].parents()
729 parents = repo[rev].parents()
General Comments 0
You need to be logged in to leave comments. Login now