Mercurial > hg
view tests/test-empty-group.t @ 30580:51e7c83e05ee
rebase: calculate ancestors for --base separately (issue5420)
Previously, the --base option only works with a single "branch" - if there
is one changeset in the "--base" revset whose branching point(s) is/are
different from another changeset in the "--base" revset, "rebase" will error
out with:
abort: source is ancestor of destination
This happens if the user has multiple draft branches, and uses "hg rebase -b
'draft()' -d master", for example. The error message looks cryptic to users
who don't know the implementation detail.
This patch changes the logic to calculate the common ancestor for every
"base" changeset separately so we won't (incorrectly) select "source" which
is an ancestor of the destination.
This patch should not change the behavior where all changesets specified by
"--base" have the same branching point(s).
A new situation is: some of the specified changesets could be rebased, while
some couldn't (because they are descendants of the destination, or they do
not share a common ancestor with the destination). The current behavior is
to show "nothing to rebase" and exits with 1.
This patch maintains the current behavior (show "nothing to rebase") even if
part of the "--base" revset could be rebased. A clearer error message may be
"cannot find branching point for X", or "X is a descendant of destination".
The error message issue is tracked by issue5422 separately.
A test is added with all kinds of tricky cases I could think of for now.
author | Jun Wu <quark@fb.com> |
---|---|
date | Mon, 28 Nov 2016 05:45:22 +0000 |
parents | 301725c3df9a |
children | eb586ed5d8ce |
line wrap: on
line source
# A B # # 3 4 3 # |\/| |\ # |/\| | \ # 1 2 1 2 # \ / \ / # 0 0 # # if the result of the merge of 1 and 2 # is the same in 3 and 4, no new manifest # will be created and the manifest group # will be empty during the pull # # (plus we test a failure where outgoing # wrongly reported the number of csets) $ hg init a $ cd a $ touch init $ hg ci -A -m 0 adding init $ touch x y $ hg ci -A -m 1 adding x adding y $ hg update 0 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ touch x y $ hg ci -A -m 2 adding x adding y created new head $ hg merge 1 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg ci -A -m m1 $ hg update -C 1 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg merge 2 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg ci -A -m m2 created new head $ cd .. $ hg clone -r 3 a b adding changesets adding manifests adding file changes added 4 changesets with 3 changes to 3 files updating to branch default 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg clone -r 4 a c adding changesets adding manifests adding file changes added 4 changesets with 3 changes to 3 files updating to branch default 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg -R a outgoing b comparing with b searching for changes changeset: 4:1ec3c74fc0e0 tag: tip parent: 1:79f9e10cd04e parent: 2:8e1bb01c1a24 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: m2 $ hg -R a outgoing c comparing with c searching for changes changeset: 3:d15a0c284984 parent: 2:8e1bb01c1a24 parent: 1:79f9e10cd04e user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: m1 $ hg -R b outgoing c comparing with c searching for changes changeset: 3:d15a0c284984 tag: tip parent: 2:8e1bb01c1a24 parent: 1:79f9e10cd04e user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: m1 $ hg -R c outgoing b comparing with b searching for changes changeset: 3:1ec3c74fc0e0 tag: tip parent: 1:79f9e10cd04e parent: 2:8e1bb01c1a24 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: m2 $ hg -R b pull a pulling from a searching for changes adding changesets adding manifests adding file changes added 1 changesets with 0 changes to 0 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) $ hg -R c pull a pulling from a searching for changes adding changesets adding manifests adding file changes added 1 changesets with 0 changes to 0 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge)