Mercurial > hg-stable
changeset 43940:71fee4564410
rebase: use rewriteutil.precheck() instead of reimplementing it
After this patch, there's still another place in `rebase.py`, in the
`--stop` code path, that reimplements `rewriteutil.precheck()`. I
couldn't fix that place because it `rewriteutil.precheck()` checks
that there is only one dirstate parent, which fails because we have
two parents at that point. I think it's incorrect that rebase leaves
the user with two parents during conflicts, but changing that is way
out of scope for this series.
Differential Revision: https://phab.mercurial-scm.org/D7685
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Wed, 18 Dec 2019 09:18:02 +0300 |
parents | bde97bee321f |
children | 2349a60f33db |
files | hgext/rebase.py tests/test-rebase-collapse.t tests/test-rebase-scenario-global.t |
diffstat | 3 files changed, 18 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/rebase.py Tue Dec 17 10:53:51 2019 -0800 +++ b/hgext/rebase.py Wed Dec 18 09:18:02 2019 +0300 @@ -46,6 +46,7 @@ repair, revset, revsetlang, + rewriteutil, scmutil, smartset, state as statemod, @@ -393,17 +394,13 @@ return _nothingtorebase() rebaseset = destmap.keys() - allowunstable = obsolete.isenabled(self.repo, obsolete.allowunstableopt) - if not (self.keepf or allowunstable) and self.repo.revs( - b'first(children(%ld) - %ld)', rebaseset, rebaseset - ): - raise error.Abort( - _( - b"can't remove original changesets with" - b" unrebased descendants" - ), - hint=_(b'use --keep to keep original changesets'), - ) + 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) @@ -412,13 +409,6 @@ self.ui.status(_(b'nothing to rebase\n')) return _nothingtorebase() - for root in self.repo.set(b'roots(%ld)', rebaseset): - if not self.keepf and not root.mutable(): - raise error.Abort( - _(b"can't rebase public changeset %s") % root, - hint=_(b"see 'hg help phases' for details"), - ) - (self.originalwd, self.destmap, self.state) = result if self.collapsef: dests = set(self.destmap.values())
--- a/tests/test-rebase-collapse.t Tue Dec 17 10:53:51 2019 -0800 +++ b/tests/test-rebase-collapse.t Wed Dec 18 09:18:02 2019 +0300 @@ -592,7 +592,7 @@ o 0: f447d5abf5ea 'add' $ hg rebase --collapse -r 1 -d 0 - abort: can't remove original changesets with unrebased descendants + abort: cannot rebase changeset with children (use --keep to keep original changesets) [255]
--- a/tests/test-rebase-scenario-global.t Tue Dec 17 10:53:51 2019 -0800 +++ b/tests/test-rebase-scenario-global.t Wed Dec 18 09:18:02 2019 +0300 @@ -325,14 +325,15 @@ $ hg pull --config phases.publish=True -q -r 6 . # update phase of 6 $ hg rebase -d 0 -b 6 - nothing to rebase - [1] + abort: cannot rebase public changesets + (see 'hg help phases' for details) + [255] $ hg rebase -d 5 -b 6 - abort: can't rebase public changeset e1c4361dd923 + abort: cannot rebase public changesets (see 'hg help phases' for details) [255] $ hg rebase -d 5 -r '1 + (6::)' - abort: can't rebase public changeset e1c4361dd923 + abort: cannot rebase public changesets (see 'hg help phases' for details) [255] @@ -452,7 +453,7 @@ $ hg clone -q -u . ah ah1 $ cd ah1 $ hg rebase -r '2::8' -d 1 - abort: can't remove original changesets with unrebased descendants + abort: cannot rebase changeset with children (use --keep to keep original changesets) [255] $ hg rebase -r '2::8' -d 1 -k @@ -498,7 +499,7 @@ $ hg clone -q -u . ah ah2 $ cd ah2 $ hg rebase -r '3::8' -d 1 - abort: can't remove original changesets with unrebased descendants + abort: cannot rebase changeset with children (use --keep to keep original changesets) [255] $ hg rebase -r '3::8' -d 1 --keep @@ -541,7 +542,7 @@ $ hg clone -q -u . ah ah3 $ cd ah3 $ hg rebase -r '3::7' -d 1 - abort: can't remove original changesets with unrebased descendants + abort: cannot rebase changeset with children (use --keep to keep original changesets) [255] $ hg rebase -r '3::7' -d 1 --keep @@ -581,7 +582,7 @@ $ hg clone -q -u . ah ah4 $ cd ah4 $ hg rebase -r '3::(7+5)' -d 1 - abort: can't remove original changesets with unrebased descendants + abort: cannot rebase changeset with children (use --keep to keep original changesets) [255] $ hg rebase -r '3::(7+5)' -d 1 --keep