diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -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()} diff --git a/tests/test-rebase-obsolete2.t b/tests/test-rebase-obsolete2.t --- a/tests/test-rebase-obsolete2.t +++ b/tests/test-rebase-obsolete2.t @@ -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 ..