Mercurial > hg
changeset 46863:d9601243b73c
rebase: when using --keep, don't care about pruned commits or divergence
`hg rebase --keep` creates duplicate commits (not successors), so I
was surprised that it still skips pruned commits and errors out if it
"would cause divergence" (it wouldn't). I guess this was just an
oversight. We didn't have any tests for it, so I also included that.
Differential Revision: https://phab.mercurial-scm.org/D10269
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 25 Mar 2021 11:35:16 -0700 |
parents | 82b17bfc13eb |
children | 6b42343f3cb6 |
files | hgext/rebase.py tests/test-rebase-obsolete2.t |
diffstat | 2 files changed, 24 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/rebase.py Thu Mar 25 08:38:16 2021 -0700 +++ b/hgext/rebase.py Thu Mar 25 11:35:16 2021 -0700 @@ -350,6 +350,8 @@ def _handleskippingobsolete(self): """Compute structures necessary for skipping obsolete revisions""" + if self.keepf: + return if not self.ui.configbool(b'experimental', b'rebaseskipobsolete'): return obsoleteset = {r for r in self.state if self.repo[r].obsolete()}
--- a/tests/test-rebase-obsolete2.t Thu Mar 25 08:38:16 2021 -0700 +++ b/tests/test-rebase-obsolete2.t Thu Mar 25 11:35:16 2021 -0700 @@ -317,3 +317,25 @@ note: not rebasing 20:8b31da3c4919 "dummy change", already in destination as 18:601db7a18f51 "dummy change successor" rebasing 21:7bdc8a87673d tip "dummy change" $ cd .. + +Can rebase pruned and rewritten commits with --keep + + $ hg init keep + $ cd keep + $ hg debugdrawdag <<'EOS' + > D + > | + > C + > | + > F B E # prune: B + > \|/ # rebase: C -> E + > A + > EOS + 1 new orphan changesets + + $ hg rebase -b D -d F --keep + rebasing 1:112478962961 B "B" + rebasing 4:26805aba1e60 C "C" + rebasing 5:f585351a92f8 D tip "D" + + $ cd ..