tests/test-evolve-content-divergent-basic.t
branchmercurial-4.7
changeset 4512 7a779a288793
parent 4493 32446b7a6e7c
child 4513 d70db7e455dc
child 4578 75e76141cba2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-evolve-content-divergent-basic.t	Thu Apr 11 22:41:41 2019 +0200
@@ -0,0 +1,1132 @@
+=======================================================
+Tests the resolution of content divergence: basic cases
+=======================================================
+
+This file intend to cover basic case of content divergence. See the other test
+file for more advanced cases.
+
+  $ cat >> $HGRCPATH <<EOF
+  > [alias]
+  > glog = log -GT "{rev}:{node|short} {desc|firstline}\n ({bookmarks}) [{branch}] {phase}"
+  > [defaults]
+  > amend=-d "0 0"
+  > fold=-d "0 0"
+  > [web]
+  > push_ssl = false
+  > allow_push = *
+  > [phases]
+  > publish = False
+  > [diff]
+  > git = 1
+  > unified = 0
+  > [ui]
+  > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline} [{troubles}]\n
+  > [extensions]
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
+  $ mkcommit() {
+  >    echo "$1" > "$1"
+  >    hg add "$1"
+  >    hg ci -m "add $1"
+  > }
+
+  $ mkcommits() {
+  >   for i in $@; do mkcommit $i ; done
+  > }
+
+Basic test of divergence: two divergent changesets with the same parents
+With --all --any we dedupe the divergent and solve the divergence once
+
+  $ hg init test1
+  $ cd test1
+  $ echo a > a
+  $ hg ci -Aqm "added a"
+  $ echo b > b
+  $ hg ci -Aqm "added b"
+  $ hg export
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID 5f6d8a4bf34ab274ccc9f631c2536964b8a3666d
+  # Parent  9092f1db7931481f93b37d5c9fbcfc341bcd7318
+  added b
+  
+  diff --git a/b b/b
+  new file mode 100644
+  --- /dev/null
+  +++ b/b
+  @@ -0,0 +1,1 @@
+  +b
+
+  $ hg up .^
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo bdivergent > bdivergent1
+  $ hg ci -Am "divergent"
+  adding bdivergent1
+  created new head
+  $ hg export
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID 593c57f2117e33dd0884382f02789d948f548557
+  # Parent  9092f1db7931481f93b37d5c9fbcfc341bcd7318
+  divergent
+  
+  diff --git a/bdivergent1 b/bdivergent1
+  new file mode 100644
+  --- /dev/null
+  +++ b/bdivergent1
+  @@ -0,0 +1,1 @@
+  +bdivergent
+
+  $ hg up .^
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo bdivergent > bdivergent2
+  $ hg ci -Am "divergent"
+  adding bdivergent2
+  created new head
+  $ hg export
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID 8374d2ddc3a4d48428c3d2f80e4fc86f13736f96
+  # Parent  9092f1db7931481f93b37d5c9fbcfc341bcd7318
+  divergent
+  
+  diff --git a/bdivergent2 b/bdivergent2
+  new file mode 100644
+  --- /dev/null
+  +++ b/bdivergent2
+  @@ -0,0 +1,1 @@
+  +bdivergent
+
+  $ hg prune -s 8374d2ddc3a4 "desc('added b')"
+  1 changesets pruned
+  $ hg prune -s 593c57f2117e "desc('added b')" --hidden
+  1 changesets pruned
+  2 new content-divergent changesets
+
+  $ hg log -G --patch
+  @  3:8374d2ddc3a4@default(draft) divergent [content-divergent]
+  |  diff --git a/bdivergent2 b/bdivergent2
+  |  new file mode 100644
+  |  --- /dev/null
+  |  +++ b/bdivergent2
+  |  @@ -0,0 +1,1 @@
+  |  +bdivergent
+  |
+  | *  2:593c57f2117e@default(draft) divergent [content-divergent]
+  |/   diff --git a/bdivergent1 b/bdivergent1
+  |    new file mode 100644
+  |    --- /dev/null
+  |    +++ b/bdivergent1
+  |    @@ -0,0 +1,1 @@
+  |    +bdivergent
+  |
+  o  0:9092f1db7931@default(draft) added a []
+     diff --git a/a b/a
+     new file mode 100644
+     --- /dev/null
+     +++ b/a
+     @@ -0,0 +1,1 @@
+     +a
+  
+
+  $ hg evolve --all --any --content-divergent
+  merge:[2] divergent
+  with: [3] divergent
+  base: [1] added b
+  updating to "local" side of the conflict: 593c57f2117e
+  merging "other" content-divergent changeset '8374d2ddc3a4'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory is now at 45bf1312f454
+  $ hg log -G
+  @  4:45bf1312f454@default(draft) divergent []
+  |
+  o  0:9092f1db7931@default(draft) added a []
+  
+  $ hg export
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID 45bf1312f45468b76158b33f8426e6530c8b35b1
+  # Parent  9092f1db7931481f93b37d5c9fbcfc341bcd7318
+  divergent
+  
+  diff --git a/bdivergent1 b/bdivergent1
+  new file mode 100644
+  --- /dev/null
+  +++ b/bdivergent1
+  @@ -0,0 +1,1 @@
+  +bdivergent
+  diff --git a/bdivergent2 b/bdivergent2
+  new file mode 100644
+  --- /dev/null
+  +++ b/bdivergent2
+  @@ -0,0 +1,1 @@
+  +bdivergent
+
+  $ cd ..
+
+Extra setup
+-----------
+
+(the test below were initially in a different file)
+
+  $ hg init cdiv
+  $ cd cdiv
+  $ echo ".*\.orig" > .hgignore
+  $ hg add .hgignore
+  $ hg ci -m "added hgignore"
+  $ for ch in a b c d; do echo foo > $ch; hg add $ch; hg ci -qm "added "$ch; done;
+
+  $ hg glog
+  @  4:c41c793e0ef1 added d
+  |   () [default] draft
+  o  3:ca1b80f7960a added c
+  |   () [default] draft
+  o  2:b1661037fa25 added b
+  |   () [default] draft
+  o  1:c7586e2a9264 added a
+  |   () [default] draft
+  o  0:8fa14d15e168 added hgignore
+      () [default] draft
+
+Merging branch difference
+-------------------------
+
+Creating content-divergence with branch change where base, divergent and other
+have different branches
+
+  $ hg branch -r . foobar
+  changed branch on 1 changesets
+
+  $ hg up c41c793e0ef1 --hidden
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  updated to hidden changeset c41c793e0ef1
+  (hidden revision 'c41c793e0ef1' was rewritten as: 9e5dffcb3d48)
+  working directory parent is obsolete! (c41c793e0ef1)
+  (use 'hg evolve' to update to its successor: 9e5dffcb3d48)
+  $ echo bar > d
+  $ hg branch watwat
+  marked working directory as branch watwat
+  $ hg amend
+  2 new content-divergent changesets
+
+  $ hg glog
+  @  6:264b04f771fb added d
+  |   () [watwat] draft
+  | *  5:9e5dffcb3d48 added d
+  |/    () [foobar] draft
+  o  3:ca1b80f7960a added c
+  |   () [default] draft
+  o  2:b1661037fa25 added b
+  |   () [default] draft
+  o  1:c7586e2a9264 added a
+  |   () [default] draft
+  o  0:8fa14d15e168 added hgignore
+      () [default] draft
+
+  $ hg evolve --content-divergent --config ui.interactive=True<<EOF
+  > c
+  > EOF
+  merge:[6] added d
+  with: [5] added d
+  base: [4] added d
+  merging "other" content-divergent changeset '9e5dffcb3d48'
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  content divergent changesets on different branches.
+  choose branch for the resolution changeset. (a) default or (b) watwat or (c) foobar?  c
+  working directory is now at 0ac42f1bc15c
+
+  $ hg glog
+  @  7:0ac42f1bc15c added d
+  |   () [foobar] draft
+  o  3:ca1b80f7960a added c
+  |   () [default] draft
+  o  2:b1661037fa25 added b
+  |   () [default] draft
+  o  1:c7586e2a9264 added a
+  |   () [default] draft
+  o  0:8fa14d15e168 added hgignore
+      () [default] draft
+
+Testing merging of commit messages
+-----------------------------------
+
+When base and one of the divergent has same commit messages and other divergent
+has different one
+
+  $ echo wat > d
+  $ hg amend
+
+  $ hg up .^
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+  $ echo bar > d
+  $ hg ci -Aqm "added a d with bar in it, expect some beers"
+
+  $ hg prune -r 0ac42f1bc15c -s . --hidden
+  1 changesets pruned
+  2 new content-divergent changesets
+
+  $ hg glog
+  @  9:59081c9c425a added a d with bar in it, expect some beers
+  |   () [default] draft
+  | *  8:f621d00f5f0e added d
+  |/    () [foobar] draft
+  o  3:ca1b80f7960a added c
+  |   () [default] draft
+  o  2:b1661037fa25 added b
+  |   () [default] draft
+  o  1:c7586e2a9264 added a
+  |   () [default] draft
+  o  0:8fa14d15e168 added hgignore
+      () [default] draft
+
+  $ hg evolve --content-divergent
+  merge:[9] added a d with bar in it, expect some beers
+  with: [8] added d
+  base: [7] added d
+  merging "other" content-divergent changeset 'f621d00f5f0e'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory is now at a9d6fd6b5e40
+
+  $ hg glog
+  @  10:a9d6fd6b5e40 added a d with bar in it, expect some beers
+  |   () [default] draft
+  o  3:ca1b80f7960a added c
+  |   () [default] draft
+  o  2:b1661037fa25 added b
+  |   () [default] draft
+  o  1:c7586e2a9264 added a
+  |   () [default] draft
+  o  0:8fa14d15e168 added hgignore
+      () [default] draft
+
+When base has different message and both divergents has same one
+
+  $ echo foo > d
+  $ hg amend -m "foo to d"
+
+  $ hg up a9d6fd6b5e40 --hidden
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  updated to hidden changeset a9d6fd6b5e40
+  (hidden revision 'a9d6fd6b5e40' was rewritten as: b10b07a394f1)
+  working directory parent is obsolete! (a9d6fd6b5e40)
+  (use 'hg evolve' to update to its successor: b10b07a394f1)
+  $ echo babar > d
+  $ hg amend -m "foo to d"
+  2 new content-divergent changesets
+
+  $ hg glog
+  @  12:0bb497fed24a foo to d
+  |   () [default] draft
+  | *  11:b10b07a394f1 foo to d
+  |/    () [default] draft
+  o  3:ca1b80f7960a added c
+  |   () [default] draft
+  o  2:b1661037fa25 added b
+  |   () [default] draft
+  o  1:c7586e2a9264 added a
+  |   () [default] draft
+  o  0:8fa14d15e168 added hgignore
+      () [default] draft
+
+  $ hg evolve --content-divergent
+  merge:[12] foo to d
+  with: [11] foo to d
+  base: [10] added a d with bar in it, expect some beers
+  merging "other" content-divergent changeset 'b10b07a394f1'
+  merging d
+  warning: conflicts while merging d! (edit, then use 'hg resolve --mark')
+  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  fix conflicts and see `hg help evolve.interrupted`
+  [1]
+
+  $ echo foobar > d
+  $ hg resolve -m
+  (no more unresolved files)
+  continue: hg evolve --continue
+  $ hg evolve --continue
+  working directory is now at 11175423b5dc
+
+  $ hg glog
+  @  13:11175423b5dc foo to d
+  |   () [default] draft
+  o  3:ca1b80f7960a added c
+  |   () [default] draft
+  o  2:b1661037fa25 added b
+  |   () [default] draft
+  o  1:c7586e2a9264 added a
+  |   () [default] draft
+  o  0:8fa14d15e168 added hgignore
+      () [default] draft
+
+When all three base, divergent and other has different commit messages creating
+conflicts
+
+  $ echo bar > d
+  $ hg amend -m "bar to d, expect beers"
+
+  $ hg up 11175423b5dc --hidden
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  updated to hidden changeset 11175423b5dc
+  (hidden revision '11175423b5dc' was rewritten as: 27f0463f169a)
+  working directory parent is obsolete! (11175423b5dc)
+  (use 'hg evolve' to update to its successor: 27f0463f169a)
+  $ echo wat > d
+  $ hg amend -m "wat to d, wat?"
+  2 new content-divergent changesets
+
+  $ hg glog
+  @  15:f542037ddf31 wat to d, wat?
+  |   () [default] draft
+  | *  14:27f0463f169a bar to d, expect beers
+  |/    () [default] draft
+  o  3:ca1b80f7960a added c
+  |   () [default] draft
+  o  2:b1661037fa25 added b
+  |   () [default] draft
+  o  1:c7586e2a9264 added a
+  |   () [default] draft
+  o  0:8fa14d15e168 added hgignore
+      () [default] draft
+
+  $ hg evolve --content-divergent
+  merge:[15] wat to d, wat?
+  with: [14] bar to d, expect beers
+  base: [13] foo to d
+  merging "other" content-divergent changeset '27f0463f169a'
+  merging d
+  warning: conflicts while merging d! (edit, then use 'hg resolve --mark')
+  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  fix conflicts and see `hg help evolve.interrupted`
+  [1]
+
+  $ echo watbar > d
+  $ hg resolve -m
+  (no more unresolved files)
+  continue: hg evolve --continue
+
+  $ cat > editor.sh <<EOF
+  > #!/bin/sh
+  > printf "**showing editors text**\n\n"
+  > cat \$1
+  > printf "\n**done showing editors text**\n\n"
+  > cat > \$1 <<ENDOF
+  > watbar to d
+  > ENDOF
+  > EOF
+
+  $ HGEDITOR='sh ./editor.sh' hg evolve --continue
+  **showing editors text**
+  
+  HG: Conflicts while merging changeset description of content-divergent changesets.
+  HG: Resolve conflicts in commit messages to continue.
+  
+  <<<<<<< divergent
+  wat to d, wat?||||||| base
+  foo to d=======
+  bar to d, expect beers>>>>>>> other
+  
+  **done showing editors text**
+  
+  working directory is now at 89ea3eee2d69
+
+  $ hg glog
+  @  16:89ea3eee2d69 watbar to d
+  |   () [default] draft
+  o  3:ca1b80f7960a added c
+  |   () [default] draft
+  o  2:b1661037fa25 added b
+  |   () [default] draft
+  o  1:c7586e2a9264 added a
+  |   () [default] draft
+  o  0:8fa14d15e168 added hgignore
+      () [default] draft
+
+  $ cd ..
+
+Stabilize content-divergent changesets with same parent
+=======================================================
+
+
+  $ glog() {
+  >   hg log -G --template \
+  >     '{rev}:{node|short}@{branch}({phase}) bk:[{bookmarks}] {desc|firstline}\n' "$@"
+  > }
+
+  $ hg init content-divergent-savanna
+  $ cd content-divergent-savanna
+  $ echo a > a
+  $ hg add a
+  $ hg ci -m 'root'
+  $ hg phase --public .
+  $ cat << EOF >> a
+  > flore
+  > arthur
+  > zephir
+  > some
+  > less
+  > conflict
+  > EOF
+  $ hg ci -m 'More addition'
+  $ glog
+  @  1:867e43582046@default(draft) bk:[] More addition
+  |
+  o  0:6569b5a81c7e@default(public) bk:[] root
+  
+  $ echo 'babar' >> a
+  $ hg amend
+  $ hg up --hidden 'min(desc("More addition"))'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  updated to hidden changeset 867e43582046
+  (hidden revision '867e43582046' was rewritten as: fc6349f931da)
+  working directory parent is obsolete! (867e43582046)
+  (use 'hg evolve' to update to its successor: fc6349f931da)
+  $ mv a a.old
+  $ echo 'jungle' > a
+  $ cat a.old >> a
+  $ rm a.old
+  $ hg amend
+  2 new content-divergent changesets
+  $ glog
+  @  3:051337a45e7c@default(draft) bk:[] More addition
+  |
+  | *  2:fc6349f931da@default(draft) bk:[] More addition
+  |/
+  o  0:6569b5a81c7e@default(public) bk:[] root
+  
+
+Stabilize it
+
+  $ hg evolve -qn --confirm --content-divergent
+  merge:[3] More addition
+  with: [2] More addition
+  base: [1] More addition
+  perform evolve? [Ny] n
+  abort: evolve aborted by user
+  [255]
+  $ echo y | hg evolve -qn --confirm --config ui.interactive=True --content-divergent
+  merge:[3] More addition
+  with: [2] More addition
+  base: [1] More addition
+  perform evolve? [Ny] y
+  hg update -c 051337a45e7c &&
+  hg merge fc6349f931da &&
+  hg commit -m "auto merge resolving conflict between 051337a45e7c and fc6349f931da"&&
+  hg up -C 867e43582046 &&
+  hg revert --all --rev tip &&
+  hg commit -m "`hg log -r 051337a45e7c --template={desc}`";
+  $ hg evolve -v --content-divergent
+  merge:[3] More addition
+  with: [2] More addition
+  base: [1] More addition
+  merging "other" content-divergent changeset 'fc6349f931da'
+  resolving manifests
+  merging a
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  committing files:
+  a
+  committing manifest
+  committing changelog
+  working directory is now at 5bf84d1d71d1
+  $ hg st
+  $ glog
+  @  4:5bf84d1d71d1@default(draft) bk:[] More addition
+  |
+  o  0:6569b5a81c7e@default(public) bk:[] root
+  
+  $ hg summary
+  parent: 4:5bf84d1d71d1 tip
+   More addition
+  branch: default
+  commit: (clean)
+  update: (current)
+  phases: 1 draft
+  $ hg export . --config diff.unified=3
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID 5bf84d1d71d12f451bfe1e09b93045eb6338cd6c
+  # Parent  6569b5a81c7e307ddc076550e8c0f6d75b6effcd
+  More addition
+  
+  diff --git a/a b/a
+  --- a/a
+  +++ b/a
+  @@ -1,1 +1,9 @@
+  +jungle
+   a
+  +flore
+  +arthur
+  +zephir
+  +some
+  +less
+  +conflict
+  +babar
+
+Check conflict during content-divergence resolution
+---------------------------------------------------
+
+
+  $ hg up --hidden 'min(desc("More addition"))'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  updated to hidden changeset 867e43582046
+  (hidden revision '867e43582046' was rewritten as: 5bf84d1d71d1)
+  working directory parent is obsolete! (867e43582046)
+  (use 'hg evolve' to update to its successor: 5bf84d1d71d1)
+  $ echo 'gotta break' >> a
+  $ hg amend
+  2 new content-divergent changesets
+
+# reamend so that the case is not the first precursor.
+
+  $ hg amend -m "More addition (2)"
+  $ hg phase 'contentdivergent()'
+  4: draft
+  6: draft
+
+  $ glog
+  @  6:13c1b75640a1@default(draft) bk:[] More addition (2)
+  |
+  | *  4:5bf84d1d71d1@default(draft) bk:[] More addition
+  |/
+  o  0:6569b5a81c7e@default(public) bk:[] root
+  
+
+  $ hg evolve -qn --content-divergent
+  hg update -c 13c1b75640a1 &&
+  hg merge 5bf84d1d71d1 &&
+  hg commit -m "auto merge resolving conflict between 13c1b75640a1 and 5bf84d1d71d1"&&
+  hg up -C 867e43582046 &&
+  hg revert --all --rev tip &&
+  hg commit -m "`hg log -r 13c1b75640a1 --template={desc}`";
+  $ hg evolve --content-divergent
+  merge:[6] More addition (2)
+  with: [4] More addition
+  base: [1] More addition
+  merging "other" content-divergent changeset '5bf84d1d71d1'
+  merging a
+  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  fix conflicts and see `hg help evolve.interrupted`
+  [1]
+
+  $ cat > a <<EOF
+  > jungle
+  > a
+  > flore
+  > arthur
+  > zephir
+  > some
+  > less
+  > conflict
+  > babar
+  > EOF
+
+  $ hg resolve -m
+  (no more unresolved files)
+  continue: hg evolve --continue
+  $ hg evolve --continue
+  working directory is now at 2346e1147fed
+  $ glog
+  @  7:2346e1147fed@default(draft) bk:[] More addition (2)
+  |
+  o  0:6569b5a81c7e@default(public) bk:[] root
+  
+  $ hg exp  --config diff.unified=3
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID 2346e1147fedc8c9aa17f9ba7870dcd8be52f567
+  # Parent  6569b5a81c7e307ddc076550e8c0f6d75b6effcd
+  More addition (2)
+  
+  diff --git a/a b/a
+  --- a/a
+  +++ b/a
+  @@ -1,1 +1,9 @@
+  +jungle
+   a
+  +flore
+  +arthur
+  +zephir
+  +some
+  +less
+  +conflict
+  +babar
+  $ cd ..
+
+Check case where one side undo some of the common predecessors change
+---------------------------------------------------------------------
+
+The goal is to make sure we merge using the right base.
+
+  $ hg init predecessors-as-merge-base
+  $ cd predecessors-as-merge-base
+  $ cat << EOF > numbers
+  > 1
+  > 2
+  > 3
+  > 4
+  > 5
+  > 6
+  > 7
+  > 8
+  > 9
+  > EOF
+  $ cat << EOF > letters
+  > a
+  > b
+  > c
+  > d
+  > e
+  > f
+  > g
+  > h
+  > i
+  > EOF
+  $ cat << EOF > romans
+  > I
+  > II
+  > III
+  > IV
+  > V
+  > VI
+  > VII
+  > VIII
+  > IX
+  > EOF
+  $ hg add numbers letters romans
+  $ hg commit -m root
+  $ cat << EOF > numbers
+  > 1
+  > 2
+  > 3
+  > four
+  > 5
+  > 6
+  > 7
+  > 8
+  > 9
+  > EOF
+  $ cat << EOF > letters
+  > a
+  > b
+  > c
+  > D
+  > e
+  > f
+  > g
+  > h
+  > i
+  > EOF
+  $ hg commit -m E1
+  $ cat << EOF > numbers
+  > 1
+  > 2
+  > 3
+  > 4
+  > 5
+  > 6
+  > seven
+  > 8
+  > 9
+  > EOF
+  $ cat << EOF > romans
+  > I
+  > II
+  > III
+  > IV
+  > V
+  > vi
+  > VII
+  > VIII
+  > IX
+  > EOF
+  $ hg commit --amend -m E2
+  $ hg --hidden update -r 'desc(E1)'
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  updated to hidden changeset 4a250e5bd992
+  (hidden revision '4a250e5bd992' was rewritten as: 084ae625fa51)
+  working directory parent is obsolete! (4a250e5bd992)
+  (use 'hg evolve' to update to its successor: 084ae625fa51)
+  $ cat << EOF > numbers
+  > one
+  > 2
+  > 3
+  > four
+  > 5
+  > 6
+  > 7
+  > 8
+  > 9
+  > EOF
+  $ cat << EOF > letters
+  > a
+  > b
+  > c
+  > d
+  > e
+  > f
+  > g
+  > h
+  > i
+  > EOF
+  $ cat << EOF > romans
+  > I
+  > ii
+  > III
+  > IV
+  > V
+  > VI
+  > VII
+  > VIII
+  > IX
+  > EOF
+  $ hg commit --amend -m E3
+  2 new content-divergent changesets
+  $ hg log -G --patch --hidden
+  @  3:19ed1bf64a2c@default(draft) E3 [content-divergent]
+  |  diff --git a/numbers b/numbers
+  |  --- a/numbers
+  |  +++ b/numbers
+  |  @@ -1,1 +1,1 @@
+  |  -1
+  |  +one
+  |  @@ -4,1 +4,1 @@
+  |  -4
+  |  +four
+  |  diff --git a/romans b/romans
+  |  --- a/romans
+  |  +++ b/romans
+  |  @@ -2,1 +2,1 @@
+  |  -II
+  |  +ii
+  |
+  | *  2:084ae625fa51@default(draft) E2 [content-divergent]
+  |/   diff --git a/letters b/letters
+  |    --- a/letters
+  |    +++ b/letters
+  |    @@ -4,1 +4,1 @@
+  |    -d
+  |    +D
+  |    diff --git a/numbers b/numbers
+  |    --- a/numbers
+  |    +++ b/numbers
+  |    @@ -7,1 +7,1 @@
+  |    -7
+  |    +seven
+  |    diff --git a/romans b/romans
+  |    --- a/romans
+  |    +++ b/romans
+  |    @@ -6,1 +6,1 @@
+  |    -VI
+  |    +vi
+  |
+  | x  1:4a250e5bd992@default(draft) E1 []
+  |/   diff --git a/letters b/letters
+  |    --- a/letters
+  |    +++ b/letters
+  |    @@ -4,1 +4,1 @@
+  |    -d
+  |    +D
+  |    diff --git a/numbers b/numbers
+  |    --- a/numbers
+  |    +++ b/numbers
+  |    @@ -4,1 +4,1 @@
+  |    -4
+  |    +four
+  |
+  o  0:6d1fdf6de7e2@default(draft) root []
+     diff --git a/letters b/letters
+     new file mode 100644
+     --- /dev/null
+     +++ b/letters
+     @@ -0,0 +1,9 @@
+     +a
+     +b
+     +c
+     +d
+     +e
+     +f
+     +g
+     +h
+     +i
+     diff --git a/numbers b/numbers
+     new file mode 100644
+     --- /dev/null
+     +++ b/numbers
+     @@ -0,0 +1,9 @@
+     +1
+     +2
+     +3
+     +4
+     +5
+     +6
+     +7
+     +8
+     +9
+     diff --git a/romans b/romans
+     new file mode 100644
+     --- /dev/null
+     +++ b/romans
+     @@ -0,0 +1,9 @@
+     +I
+     +II
+     +III
+     +IV
+     +V
+     +VI
+     +VII
+     +VIII
+     +IX
+  
+  $ hg evolve --list
+  084ae625fa51: E2
+    content-divergent: 19ed1bf64a2c (draft) (precursor 4a250e5bd992)
+  
+  19ed1bf64a2c: E3
+    content-divergent: 084ae625fa51 (draft) (precursor 4a250e5bd992)
+  
+  $ hg obslog --all --patch
+  *  084ae625fa51 (2) E2
+  |
+  | @  19ed1bf64a2c (3) E3
+  |/
+  x  4a250e5bd992 (1) E1
+       rewritten(description, content) as 084ae625fa51 using amend by test (Thu Jan 01 00:00:00 1970 +0000)
+         diff -r 4a250e5bd992 -r 084ae625fa51 changeset-description
+         --- a/changeset-description
+         +++ b/changeset-description
+         @@ -1,1 +1,1 @@
+         -E1
+         +E2
+  
+         diff --git a/numbers b/numbers
+         --- a/numbers
+         +++ b/numbers
+         @@ -4,1 +4,1 @@
+         -four
+         +4
+         @@ -7,1 +7,1 @@
+         -7
+         +seven
+         diff --git a/romans b/romans
+         --- a/romans
+         +++ b/romans
+         @@ -6,1 +6,1 @@
+         -VI
+         +vi
+  
+       rewritten(description, content) as 19ed1bf64a2c using amend by test (Thu Jan 01 00:00:00 1970 +0000)
+         diff -r 4a250e5bd992 -r 19ed1bf64a2c changeset-description
+         --- a/changeset-description
+         +++ b/changeset-description
+         @@ -1,1 +1,1 @@
+         -E1
+         +E3
+  
+         diff --git a/letters b/letters
+         --- a/letters
+         +++ b/letters
+         @@ -4,1 +4,1 @@
+         -D
+         +d
+         diff --git a/numbers b/numbers
+         --- a/numbers
+         +++ b/numbers
+         @@ -1,1 +1,1 @@
+         -1
+         +one
+         diff --git a/romans b/romans
+         --- a/romans
+         +++ b/romans
+         @@ -2,1 +2,1 @@
+         -II
+         +ii
+  
+  
+
+  $ hg evolve --content-divergent --rev 'desc("E3")'
+  merge:[2] E2
+  with: [3] E3
+  base: [1] E1
+  updating to "local" side of the conflict: 084ae625fa51
+  merging "other" content-divergent changeset '19ed1bf64a2c'
+  merging numbers
+  merging romans
+  1 files updated, 2 files merged, 0 files removed, 0 files unresolved
+  working directory is now at aae293050980
+  $ hg status
+  $ hg amend -m 'E4'
+  $ hg export
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID 8c2a6aae4bc5c1cc00c68276017dcef3d468e895
+  # Parent  6d1fdf6de7e2d9fc9b098aa286b60785bbeaab7a
+  E4
+  
+  diff --git a/numbers b/numbers
+  --- a/numbers
+  +++ b/numbers
+  @@ -1,1 +1,1 @@
+  -1
+  +one
+  @@ -7,1 +7,1 @@
+  -7
+  +seven
+  diff --git a/romans b/romans
+  --- a/romans
+  +++ b/romans
+  @@ -2,1 +2,1 @@
+  -II
+  +ii
+  @@ -6,1 +6,1 @@
+  -VI
+  +vi
+  $ hg log -G
+  @  5:8c2a6aae4bc5@default(draft) E4 []
+  |
+  o  0:6d1fdf6de7e2@default(draft) root []
+  
+  $ hg obslog --patch
+  @  8c2a6aae4bc5 (5) E4
+  |
+  x    aae293050980 (4) <<<<<<< divergent
+  |\     rewritten(description) as 8c2a6aae4bc5 using amend by test (Thu Jan 01 00:00:00 1970 +0000)
+  | |      diff -r aae293050980 -r 8c2a6aae4bc5 changeset-description
+  | |      --- a/changeset-description
+  | |      +++ b/changeset-description
+  | |      @@ -1,4 +1,1 @@
+  | |      -<<<<<<< divergent
+  | |      -E2||||||| base
+  | |      -E1=======
+  | |      -E3>>>>>>> other
+  | |      +E4
+  | |
+  | |
+  x |  084ae625fa51 (2) E2
+  | |    rewritten(description, content) as aae293050980 using evolve by test (Thu Jan 01 00:00:00 1970 +0000)
+  | |      diff -r 084ae625fa51 -r aae293050980 changeset-description
+  | |      --- a/changeset-description
+  | |      +++ b/changeset-description
+  | |      @@ -1,1 +1,4 @@
+  | |      -E2
+  | |      +<<<<<<< divergent
+  | |      +E2||||||| base
+  | |      +E1=======
+  | |      +E3>>>>>>> other
+  | |
+  | |      diff --git a/letters b/letters
+  | |      --- a/letters
+  | |      +++ b/letters
+  | |      @@ -4,1 +4,1 @@
+  | |      -D
+  | |      +d
+  | |      diff --git a/numbers b/numbers
+  | |      --- a/numbers
+  | |      +++ b/numbers
+  | |      @@ -1,1 +1,1 @@
+  | |      -1
+  | |      +one
+  | |      diff --git a/romans b/romans
+  | |      --- a/romans
+  | |      +++ b/romans
+  | |      @@ -2,1 +2,1 @@
+  | |      -II
+  | |      +ii
+  | |
+  | |
+  | x  19ed1bf64a2c (3) E3
+  |/     rewritten(description, content) as aae293050980 using evolve by test (Thu Jan 01 00:00:00 1970 +0000)
+  |        diff -r 19ed1bf64a2c -r aae293050980 changeset-description
+  |        --- a/changeset-description
+  |        +++ b/changeset-description
+  |        @@ -1,1 +1,4 @@
+  |        -E3
+  |        +<<<<<<< divergent
+  |        +E2||||||| base
+  |        +E1=======
+  |        +E3>>>>>>> other
+  |
+  |        diff --git a/numbers b/numbers
+  |        --- a/numbers
+  |        +++ b/numbers
+  |        @@ -4,1 +4,1 @@
+  |        -four
+  |        +4
+  |        @@ -7,1 +7,1 @@
+  |        -7
+  |        +seven
+  |        diff --git a/romans b/romans
+  |        --- a/romans
+  |        +++ b/romans
+  |        @@ -6,1 +6,1 @@
+  |        -VI
+  |        +vi
+  |
+  |
+  x  4a250e5bd992 (1) E1
+       rewritten(description, content) as 084ae625fa51 using amend by test (Thu Jan 01 00:00:00 1970 +0000)
+         diff -r 4a250e5bd992 -r 084ae625fa51 changeset-description
+         --- a/changeset-description
+         +++ b/changeset-description
+         @@ -1,1 +1,1 @@
+         -E1
+         +E2
+  
+         diff --git a/numbers b/numbers
+         --- a/numbers
+         +++ b/numbers
+         @@ -4,1 +4,1 @@
+         -four
+         +4
+         @@ -7,1 +7,1 @@
+         -7
+         +seven
+         diff --git a/romans b/romans
+         --- a/romans
+         +++ b/romans
+         @@ -6,1 +6,1 @@
+         -VI
+         +vi
+  
+       rewritten(description, content) as 19ed1bf64a2c using amend by test (Thu Jan 01 00:00:00 1970 +0000)
+         diff -r 4a250e5bd992 -r 19ed1bf64a2c changeset-description
+         --- a/changeset-description
+         +++ b/changeset-description
+         @@ -1,1 +1,1 @@
+         -E1
+         +E3
+  
+         diff --git a/letters b/letters
+         --- a/letters
+         +++ b/letters
+         @@ -4,1 +4,1 @@
+         -D
+         +d
+         diff --git a/numbers b/numbers
+         --- a/numbers
+         +++ b/numbers
+         @@ -1,1 +1,1 @@
+         -1
+         +one
+         diff --git a/romans b/romans
+         --- a/romans
+         +++ b/romans
+         @@ -2,1 +2,1 @@
+         -II
+         +ii
+  
+