Mercurial > hg
comparison hgext/rebase.py @ 27746:f0e9f38d250f
rebase: prevent creating divergence
Before this patch rebase would create divergence when you were rebasing obsolete
changesets on a destination not containing one of its successors.
This patch introduces rebase.allowdivergence to explicitly allow
divergence creation with rebase.
author | Laurent Charignon <lcharignon@fb.com> |
---|---|
date | Tue, 12 Jan 2016 13:43:41 -0800 |
parents | d3a128e8604a |
children | 2d294dada4f8 |
comparison
equal
deleted
inserted
replaced
27745:d3a128e8604a | 27746:f0e9f38d250f |
---|---|
347 if repo[r].obsolete()) | 347 if repo[r].obsolete()) |
348 obsoletenotrebased = _computeobsoletenotrebased(repo, | 348 obsoletenotrebased = _computeobsoletenotrebased(repo, |
349 rebaseobsrevs, | 349 rebaseobsrevs, |
350 dest) | 350 dest) |
351 rebaseobsskipped = set(obsoletenotrebased) | 351 rebaseobsskipped = set(obsoletenotrebased) |
352 | |
353 # Obsolete node with successors not in dest leads to divergence | |
354 divergenceok = ui.configbool('rebase', | |
355 'allowdivergence') | |
356 divergencebasecandidates = rebaseobsrevs - rebaseobsskipped | |
357 | |
358 if divergencebasecandidates and not divergenceok: | |
359 msg = _("this rebase will cause divergence") | |
360 h = _("to force the rebase please set " | |
361 "rebase.allowdivergence=True") | |
362 raise error.Abort(msg, hint=h) | |
352 | 363 |
353 # - plain prune (no successor) changesets are rebased | 364 # - plain prune (no successor) changesets are rebased |
354 # - split changesets are not rebased if at least one of the | 365 # - split changesets are not rebased if at least one of the |
355 # changeset resulting from the split is an ancestor of dest | 366 # changeset resulting from the split is an ancestor of dest |
356 rebaseset = rebasesetrevs - rebaseobsskipped | 367 rebaseset = rebasesetrevs - rebaseobsskipped |