D7685: rebase: use rewriteutil.precheck() instead of reimplementing it
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Tue Dec 17 19:36:57 UTC 2019
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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
of of scope for this series.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D7685
AFFECTED FILES
hgext/rebase.py
tests/test-rebase-collapse.t
tests/test-rebase-scenario-global.t
CHANGE DETAILS
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,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
diff --git a/tests/test-rebase-collapse.t b/tests/test-rebase-collapse.t
--- a/tests/test-rebase-collapse.t
+++ b/tests/test-rebase-collapse.t
@@ -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]
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -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())
To: martinvonz, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list