Mercurial > hg
comparison hgext/rebase.py @ 28685:6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
This patch extracts the error handling code path to go in a separate function.
In the next patch we will able to reuse this logic and avoid duplicated code.
author | Laurent Charignon <lcharignon@fb.com> |
---|---|
date | Tue, 29 Mar 2016 11:49:45 -0700 |
parents | a47881680402 |
children | b212e01fead0 |
comparison
equal
deleted
inserted
replaced
28684:1ace17e1e160 | 28685:6c4d23fe611c |
---|---|
303 rebaseobsrevs = _filterobsoleterevs(repo, rebasesetrevs) | 303 rebaseobsrevs = _filterobsoleterevs(repo, rebasesetrevs) |
304 obsoletenotrebased = _computeobsoletenotrebased(repo, | 304 obsoletenotrebased = _computeobsoletenotrebased(repo, |
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) |
336 | 314 |
337 if not result: | 315 if not result: |
707 if candidates: | 685 if candidates: |
708 return state[candidates.first()] | 686 return state[candidates.first()] |
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() |
715 p1 = p2 = nullrev | 730 p1 = p2 = nullrev |
716 | 731 |