Show More
@@ -312,10 +312,13 b' class rebaseruntime(object):' | |||||
312 | if not self.ui.configbool('experimental', 'rebaseskipobsolete'): |
|
312 | if not self.ui.configbool('experimental', 'rebaseskipobsolete'): | |
313 | return |
|
313 | return | |
314 | obsoleteset = set(obsoleterevs) |
|
314 | obsoleteset = set(obsoleterevs) | |
315 | self.obsoletenotrebased, self.obsoletewithoutsuccessorindestination = \ |
|
315 | (self.obsoletenotrebased, | |
316 | _computeobsoletenotrebased(self.repo, obsoleteset, destmap) |
|
316 | self.obsoletewithoutsuccessorindestination, | |
|
317 | obsoleteextinctsuccessors) = _computeobsoletenotrebased( | |||
|
318 | self.repo, obsoleteset, destmap) | |||
317 | skippedset = set(self.obsoletenotrebased) |
|
319 | skippedset = set(self.obsoletenotrebased) | |
318 | skippedset.update(self.obsoletewithoutsuccessorindestination) |
|
320 | skippedset.update(self.obsoletewithoutsuccessorindestination) | |
|
321 | skippedset.update(obsoleteextinctsuccessors) | |||
319 | _checkobsrebase(self.repo, self.ui, obsoleteset, skippedset) |
|
322 | _checkobsrebase(self.repo, self.ui, obsoleteset, skippedset) | |
320 |
|
323 | |||
321 | def _prepareabortorcontinue(self, isabort): |
|
324 | def _prepareabortorcontinue(self, isabort): | |
@@ -1221,7 +1224,7 b' def _checkobsrebase(repo, ui, rebaseobsr' | |||||
1221 |
|
1224 | |||
1222 | `rebaseobsrevs`: set of obsolete revision in source |
|
1225 | `rebaseobsrevs`: set of obsolete revision in source | |
1223 | `rebaseobsskipped`: set of revisions from source skipped because they have |
|
1226 | `rebaseobsskipped`: set of revisions from source skipped because they have | |
1224 | successors in destination |
|
1227 | successors in destination or no non-obsolete successor. | |
1225 | """ |
|
1228 | """ | |
1226 | # Obsolete node with successors not in dest leads to divergence |
|
1229 | # Obsolete node with successors not in dest leads to divergence | |
1227 | divergenceok = ui.configbool('experimental', |
|
1230 | divergenceok = ui.configbool('experimental', | |
@@ -1786,13 +1789,18 b' def _computeobsoletenotrebased(repo, reb' | |||||
1786 |
|
1789 | |||
1787 | `obsoletewithoutsuccessorindestination` is a set with obsolete revisions |
|
1790 | `obsoletewithoutsuccessorindestination` is a set with obsolete revisions | |
1788 | without a successor in destination. |
|
1791 | without a successor in destination. | |
|
1792 | ||||
|
1793 | `obsoleteextinctsuccessors` is a set of obsolete revisions with only | |||
|
1794 | obsolete successors. | |||
1789 | """ |
|
1795 | """ | |
1790 | obsoletenotrebased = {} |
|
1796 | obsoletenotrebased = {} | |
1791 | obsoletewithoutsuccessorindestination = set([]) |
|
1797 | obsoletewithoutsuccessorindestination = set([]) | |
|
1798 | obsoleteextinctsuccessors = set([]) | |||
1792 |
|
1799 | |||
1793 | assert repo.filtername is None |
|
1800 | assert repo.filtername is None | |
1794 | cl = repo.changelog |
|
1801 | cl = repo.changelog | |
1795 | nodemap = cl.nodemap |
|
1802 | nodemap = cl.nodemap | |
|
1803 | extinctnodes = set(cl.node(r) for r in repo.revs('extinct()')) | |||
1796 | for srcrev in rebaseobsrevs: |
|
1804 | for srcrev in rebaseobsrevs: | |
1797 | srcnode = cl.node(srcrev) |
|
1805 | srcnode = cl.node(srcrev) | |
1798 | destnode = cl.node(destmap[srcrev]) |
|
1806 | destnode = cl.node(destmap[srcrev]) | |
@@ -1800,6 +1808,9 b' def _computeobsoletenotrebased(repo, reb' | |||||
1800 | successors = list(obsutil.allsuccessors(repo.obsstore, [srcnode])) |
|
1808 | successors = list(obsutil.allsuccessors(repo.obsstore, [srcnode])) | |
1801 | # obsutil.allsuccessors includes node itself |
|
1809 | # obsutil.allsuccessors includes node itself | |
1802 | successors.remove(srcnode) |
|
1810 | successors.remove(srcnode) | |
|
1811 | if set(successors).issubset(extinctnodes): | |||
|
1812 | # all successors are extinct | |||
|
1813 | obsoleteextinctsuccessors.add(srcrev) | |||
1803 | if not successors: |
|
1814 | if not successors: | |
1804 | # no successor |
|
1815 | # no successor | |
1805 | obsoletenotrebased[srcrev] = None |
|
1816 | obsoletenotrebased[srcrev] = None | |
@@ -1817,7 +1828,11 b' def _computeobsoletenotrebased(repo, reb' | |||||
1817 | if any(nodemap[s] in destmap for s in successors): |
|
1828 | if any(nodemap[s] in destmap for s in successors): | |
1818 | obsoletewithoutsuccessorindestination.add(srcrev) |
|
1829 | obsoletewithoutsuccessorindestination.add(srcrev) | |
1819 |
|
1830 | |||
1820 | return obsoletenotrebased, obsoletewithoutsuccessorindestination |
|
1831 | return ( | |
|
1832 | obsoletenotrebased, | |||
|
1833 | obsoletewithoutsuccessorindestination, | |||
|
1834 | obsoleteextinctsuccessors, | |||
|
1835 | ) | |||
1821 |
|
1836 | |||
1822 | def summaryhook(ui, repo): |
|
1837 | def summaryhook(ui, repo): | |
1823 | if not repo.vfs.exists('rebasestate'): |
|
1838 | if not repo.vfs.exists('rebasestate'): |
@@ -1244,10 +1244,6 b' issue5782' | |||||
1244 | o 0:b173517d0057 a |
|
1244 | o 0:b173517d0057 a | |
1245 |
|
1245 | |||
1246 | $ hg rebase -d 0 -r 2 |
|
1246 | $ hg rebase -d 0 -r 2 | |
1247 | abort: this rebase will cause divergences from: a82ac2b38757 |
|
|||
1248 | (to force the rebase please set experimental.evolution.allowdivergence=True) |
|
|||
1249 | [255] |
|
|||
1250 | $ hg rebase -d 0 -r 2 --config experimental.evolution.allowdivergence=True |
|
|||
1251 | rebasing 2:a82ac2b38757 "c" (c) |
|
1247 | rebasing 2:a82ac2b38757 "c" (c) | |
1252 | $ hg log -G -r 'a': --hidden |
|
1248 | $ hg log -G -r 'a': --hidden | |
1253 | o 5:69ad416a4a26 c |
|
1249 | o 5:69ad416a4a26 c |
General Comments 0
You need to be logged in to leave comments.
Login now