pick: don't create any successors when there were no changes (issue6093)
For example, when a changeset that user is trying to pick was already grafted
or rebased (and no obsmarkers were created), pick will naturally say that
there's no changes to commit and will not create the new commit. In that case
it should not mark any changeset as a successor of the picked changeset,
because the actual file changes were already there before picking.
Technically, pick could (and did before this patch) mark the wdir commit as a
successor of picked changeset (may be useful in the most trivial cases when
e.g. wdir is a graft of the required change), but there are cases when the
picked change is introduced in an ancestor of wdir, or even in multiple
ancestors piece by piece. Pick definitely shouldn't be trying to guess
something this complicated, so with this patch it always marks the picked
change as pruned if it gave no changes to commit.
Content divergence and trying to relocate a node on top of itself (issue5958)
https://bz.mercurial-scm.org/show_bug.cgi?id=5958
$ . $TESTDIR/testlib/common.sh
$ cat << EOF >> $HGRCPATH
> [extensions]
> rebase =
> evolve =
> EOF
$ hg init issue5958
$ cd issue5958
$ echo hi > r0
$ hg ci -qAm 'add r0'
$ echo hi > foo.txt
$ hg ci -qAm 'add foo.txt'
$ hg metaedit -r . -d '0 2'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
(Make changes in unrelated files so that we don't have any merge conflicts
during the rebase, but the two touched revisions aren't identical)
$ echo hi > bar.txt
$ hg add -q bar.txt
$ hg amend -q
$ hg metaedit -r 1 -d '0 1' --hidden
2 new content-divergent changesets
$ hg log -r tip
changeset: 4:c17bf400a278
tag: tip
parent: 0:a24ed8ad918c
user: test
date: Wed Dec 31 23:59:59 1969 -0000
instability: content-divergent
summary: add foo.txt
$ echo hi > baz.txt
$ hg add -q baz.txt
$ hg amend -q
$ hg rebase -qr tip -d 4
$ hg log -G
@ changeset: 6:08bc7ba82799
| tag: tip
| parent: 4:c17bf400a278
| user: test
| date: Wed Dec 31 23:59:58 1969 -0000
| instability: content-divergent
| summary: add foo.txt
|
* changeset: 4:c17bf400a278
| parent: 0:a24ed8ad918c
| user: test
| date: Wed Dec 31 23:59:59 1969 -0000
| instability: content-divergent
| summary: add foo.txt
|
o changeset: 0:a24ed8ad918c
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add r0
$ hg obslog -a -r .
@ 08bc7ba82799 (6) add foo.txt
|
| * c17bf400a278 (4) add foo.txt
| |
x | 1d1fc409af98 (5) add foo.txt
| | rewritten(parent, content) as 08bc7ba82799 using rebase by test (Thu Jan 01 00:00:00 1970 +0000)
| |
x | a25dd7af6cf6 (3) add foo.txt
| | rewritten(content) as 1d1fc409af98 using amend by test (Thu Jan 01 00:00:00 1970 +0000)
| |
x | 0065551bd38f (2) add foo.txt
|/ rewritten(content) as a25dd7af6cf6 using amend by test (Thu Jan 01 00:00:00 1970 +0000)
|
x cc71ffbc7c00 (1) add foo.txt
rewritten(date) as 0065551bd38f using metaedit by test (Thu Jan 01 00:00:00 1970 +0000)
rewritten(date) as c17bf400a278 using metaedit by test (Thu Jan 01 00:00:00 1970 +0000)
$ hg evolve --content-divergent
merge:[6] add foo.txt
with: [4] add foo.txt
base: [1] add foo.txt
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 new orphan changesets
working directory is now at 2372e6d39855