--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-evolve-orphan-merge.t Tue Mar 13 15:29:35 2018 +0530
@@ -0,0 +1,330 @@
+** Testing resolution of orphans by `hg evolve` when merges are involved **
+
+ $ cat >> $HGRCPATH <<EOF
+ > [ui]
+ > interactive = True
+ > [alias]
+ > glog = log -GT "{rev}:{node|short} {desc}\n ({bookmarks}) {phase}"
+ > [extensions]
+ > rebase =
+ > EOF
+ $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
+
+Repo Setup
+
+ $ hg init repo
+ $ cd repo
+ $ echo ".*\.orig" > .hgignore
+ $ hg add .hgignore
+ $ hg ci -m "added hgignore"
+
+An orphan merge changeset with one of the parent obsoleted
+==========================================================
+
+1) When merging both the parents does not result in conflicts
+-------------------------------------------------------------
+
+ $ echo foo > a
+ $ hg ci -Aqm "added a"
+ $ hg up .^
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo foo > b
+ $ hg ci -Aqm "added b"
+ $ hg merge
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg ci -m "merging a and b"
+
+ $ hg glog
+ @ 3:3b2b6f4652ee merging a and b
+ |\ () draft
+ | o 2:d76850646258 added b
+ | | () draft
+ o | 1:c7586e2a9264 added a
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+Testing with obsoleting the second parent
+
+ $ hg up d76850646258
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo bar > b
+ $ hg amend
+ 1 new orphan changesets
+
+ $ hg glog
+ @ 4:64370c9805e7 added b
+ | () draft
+ | * 3:3b2b6f4652ee merging a and b
+ | |\ () draft
+ +---x 2:d76850646258 added b
+ | | () draft
+ | o 1:c7586e2a9264 added a
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+ $ hg evolve --all
+ move:[3] merging a and b
+ atop:[4] added b
+ working directory is now at 91fd62122a4b
+
+ $ hg glog
+ @ 5:91fd62122a4b merging a and b
+ |\ () draft
+ | o 4:64370c9805e7 added b
+ | | () draft
+ o | 1:c7586e2a9264 added a
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+ $ hg parents
+ changeset: 5:91fd62122a4b
+ tag: tip
+ parent: 4:64370c9805e7
+ parent: 1:c7586e2a9264
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: merging a and b
+
+
+Testing with obsoleting the first parent
+
+ $ hg up c7586e2a9264
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo bar > a
+ $ hg amend
+ 1 new orphan changesets
+
+ $ hg glog
+ @ 6:3d41537b44ca added a
+ | () draft
+ | * 5:91fd62122a4b merging a and b
+ | |\ () draft
+ +---o 4:64370c9805e7 added b
+ | | () draft
+ | x 1:c7586e2a9264 added a
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+ $ hg evolve --all
+ move:[5] merging a and b
+ atop:[6] added a
+ working directory is now at 968d205ba4d8
+
+ $ hg glog
+ @ 7:968d205ba4d8 merging a and b
+ |\ () draft
+ | o 6:3d41537b44ca added a
+ | | () draft
+ o | 4:64370c9805e7 added b
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+ $ hg parents
+ changeset: 7:968d205ba4d8
+ tag: tip
+ parent: 6:3d41537b44ca
+ parent: 4:64370c9805e7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: merging a and b
+
+2) When merging both the parents resulted in conflicts
+------------------------------------------------------
+
+ $ hg up 8fa14d15e168
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ $ echo foo > c
+ $ hg ci -Aqm "foo to c"
+ $ hg prev
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ [0] added hgignore
+ $ echo bar > c
+ $ hg ci -Aqm "bar to c"
+
+ $ hg glog
+ @ 9:d0f84b25d4e3 bar to c
+ | () draft
+ | o 8:1c165c673853 foo to c
+ |/ () draft
+ | o 7:968d205ba4d8 merging a and b
+ | |\ () draft
+ +---o 6:3d41537b44ca added a
+ | | () draft
+ | o 4:64370c9805e7 added b
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+Prune old test changesets to have clear graph view
+ $ hg prune -r 64370c9805e7 -r 3d41537b44ca -r 968d205ba4d8
+ 3 changesets pruned
+
+ $ hg glog
+ @ 9:d0f84b25d4e3 bar to c
+ | () draft
+ | o 8:1c165c673853 foo to c
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+ $ hg merge
+ merging c
+ warning: conflicts while merging c! (edit, then use 'hg resolve --mark')
+ 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+ use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
+ [1]
+ $ echo foobar > c
+ $ hg resolve -m
+ (no more unresolved files)
+ $ hg ci -m "foobar to c"
+
+ $ hg glog
+ @ 10:fd41d25a3e90 foobar to c
+ |\ () draft
+ | o 9:d0f84b25d4e3 bar to c
+ | | () draft
+ o | 8:1c165c673853 foo to c
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+Testing with first parent obsoleted
+
+ $ hg up 1c165c673853
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo FOO > c
+ $ hg amend
+ 1 new orphan changesets
+
+ $ hg glog
+ @ 11:31c317b7bdb1 foo to c
+ | () draft
+ | * 10:fd41d25a3e90 foobar to c
+ | |\ () draft
+ +---o 9:d0f84b25d4e3 bar to c
+ | | () draft
+ | x 8:1c165c673853 foo to c
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+ $ hg evolve --all
+ move:[10] foobar to c
+ atop:[11] foo to c
+ merging c
+ warning: conflicts while merging c! (edit, then use 'hg resolve --mark')
+ evolve failed!
+ fix conflict and run 'hg evolve --continue' or use 'hg update -C .' to abort
+ abort: unresolved merge conflicts (see hg help resolve)
+ [255]
+
+ $ echo FOObar > c
+ $ hg resolve -m
+ (no more unresolved files)
+ continue: hg evolve --continue
+ $ hg evolve --continue
+ evolving 10:fd41d25a3e90 "foobar to c"
+ working directory is now at 6b42180a13dd
+
+XXX: we lost the second parent here after interrupted evolve
+ $ hg glog
+ @ 12:6b42180a13dd foobar to c
+ | () draft
+ o 11:31c317b7bdb1 foo to c
+ | () draft
+ | o 9:d0f84b25d4e3 bar to c
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+ $ hg parents
+ changeset: 12:6b42180a13dd
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: foobar to c
+
+Getting back to a state from where we can test the same thing with obsoleting
+the second parent
+
+ $ hg prune -r .
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ working directory now at 31c317b7bdb1
+ 1 changesets pruned
+ $ hg merge
+ merging c
+ warning: conflicts while merging c! (edit, then use 'hg resolve --mark')
+ 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+ use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
+ [1]
+
+ $ echo FOObar > c
+ $ hg resolve -m
+ (no more unresolved files)
+ $ hg commit -m "FOObar to c"
+
+ $ hg glog
+ @ 13:14ac829917d7 FOObar to c
+ |\ () draft
+ | o 11:31c317b7bdb1 foo to c
+ | | () draft
+ o | 9:d0f84b25d4e3 bar to c
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+Testing a conlficting merge with second parent obsoleted
+
+ $ hg up 31c317b7bdb1
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo foo > c
+ $ hg amend
+ 1 new orphan changesets
+
+ $ hg glog
+ @ 14:928097d0b5b5 foo to c
+ | () draft
+ | * 13:14ac829917d7 FOObar to c
+ | |\ () draft
+ +---x 11:31c317b7bdb1 foo to c
+ | | () draft
+ | o 9:d0f84b25d4e3 bar to c
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft
+
+ $ hg evolve --all
+ move:[13] FOObar to c
+ atop:[14] foo to c
+ merging c
+ warning: conflicts while merging c! (edit, then use 'hg resolve --mark')
+ evolve failed!
+ fix conflict and run 'hg evolve --continue' or use 'hg update -C .' to abort
+ abort: unresolved merge conflicts (see hg help resolve)
+ [255]
+
+ $ echo foobar > c
+ $ hg resolve -m
+ (no more unresolved files)
+ continue: hg evolve --continue
+
+ $ hg evolve --continue
+ evolving 13:14ac829917d7 "FOObar to c"
+ working directory is now at 910c14950386
+
+XXX: we lost a parent here again.
+ $ hg glog
+ @ 15:910c14950386 FOObar to c
+ | () draft
+ o 14:928097d0b5b5 foo to c
+ | () draft
+ | o 9:d0f84b25d4e3 bar to c
+ |/ () draft
+ o 0:8fa14d15e168 added hgignore
+ () draft