# HG changeset patch # User Martin von Zweigbergk # Date 2021-03-23 21:15:40 # Node ID 80cac9936324965f0f7116dddb06ce7470ec2411 # Parent c2438f2f635c4b0b486a76fdbfecbfc2c22528b5 reabase: call rewriteutil.precheck() a bit later We now filter out descendants of divergence-causing commits in `_handleskippingobsolete()`. The filtered-out commits are removed from the rebase set (`destmap` and `state`). We should therefore call `rewriteutil.precheck()` after `_handleskippingobsolete()`. This patch does that. It hasn't mattered so far because `rewriteutil.precheck()` doesn't yet check for divergence, but it will soon. This affects one test where we now fail because the user is trying to rebase an ancestor instead of failing because they tried to rebase a public commit. We have several similar tests just after, where we still fail because of the phase, so that seems fine. The difference in behavior also seems fine to me. Differential Revision: https://phab.mercurial-scm.org/D10258 diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -413,15 +413,6 @@ class rebaseruntime(object): if not destmap: return _nothingtorebase() - rebaseset = destmap.keys() - if not self.keepf: - try: - rewriteutil.precheck(self.repo, rebaseset, action=b'rebase') - except error.Abort as e: - if e.hint is None: - e.hint = _(b'use --keep to keep original changesets') - raise e - result = buildstate(self.repo, destmap, self.collapsef) if not result: @@ -450,6 +441,15 @@ class rebaseruntime(object): # Calculate self.obsolete_* sets self._handleskippingobsolete() + rebaseset = destmap.keys() + if not self.keepf: + try: + rewriteutil.precheck(self.repo, rebaseset, action=b'rebase') + except error.Abort as e: + if e.hint is None: + e.hint = _(b'use --keep to keep original changesets') + raise e + self.prepared = True def _assignworkingcopy(self): diff --git a/tests/test-rebase-scenario-global.t b/tests/test-rebase-scenario-global.t --- a/tests/test-rebase-scenario-global.t +++ b/tests/test-rebase-scenario-global.t @@ -325,9 +325,8 @@ Check rebasing public changeset $ hg pull --config phases.publish=True -q -r 6 . # update phase of 6 $ hg rebase -d 0 -b 6 - abort: cannot rebase public changesets - (see 'hg help phases' for details) - [10] + nothing to rebase + [1] $ hg rebase -d 5 -b 6 abort: cannot rebase public changesets (see 'hg help phases' for details)