# HG changeset patch # User Martin von Zweigbergk # Date 1616697316 25200 # Node ID d9601243b73c16b5894492a33895bf9e457602e0 # Parent 82b17bfc13ebf0dd1619953c200c7421ba3315ff 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 diff -r 82b17bfc13eb -r d9601243b73c hgext/rebase.py --- 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()} diff -r 82b17bfc13eb -r d9601243b73c tests/test-rebase-obsolete2.t --- 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 ..