view tests/test-stabilize-result.t @ 587:8152fedbac65 stable

evolve: smarter code for divergent changeset This newer version properly handle split now. Code and test copied for future upstream one.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Tue, 23 Oct 2012 16:36:29 +0200
parents f01721161532
children 26f76b38f879
line wrap: on
line source

  $ cat >> $HGRCPATH <<EOF
  > [defaults]
  > amend=-d "0 0"
  > [extensions]
  > hgext.rebase=
  > hgext.graphlog=
  > EOF
  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH

  $ glog() {
  >   hg glog --template \
  >     '{rev}:{node|short}@{branch}({phase}) bk:[{bookmarks}] {desc|firstline}\n' "$@"
  > }

Test evolve removing the changeset being evolved

  $ hg init empty
  $ cd empty
  $ echo a > a
  $ hg ci -Am adda a
  $ echo b > b
  $ hg ci -Am addb b
  $ echo a >> a
  $ hg ci -m changea
  $ hg bookmark changea
  $ hg up 1
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo a >> a
  $ hg amend -m changea
  1 new unstable changesets
  $ hg evolve -v
  move:[2] changea
  atop:[4] changea
  hg rebase -r cce2c55b8965 -d 1447e1c4828d
  resolving manifests
  $ glog --hidden
  @  4:1447e1c4828d@default(draft) bk:[changea] changea
  |
  | x  3:41ad4fe8c795@default(draft) bk:[] amends 102a90ea7b4a3361e4082ed620918c261189a36a
  | |
  | | x  2:cce2c55b8965@default(draft) bk:[] changea
  | |/
  | x  1:102a90ea7b4a@default(draft) bk:[] addb
  |/
  o  0:07f494440405@default(draft) bk:[] adda
  
  $ hg debugobsolete
  41ad4fe8c79565a06c89f032ef0937b3cbd68a04 1447e1c4828d2347df8f858aa041305fa4cf7db1 0 {'date': '* *', 'user': 'test'} (glob)
  102a90ea7b4a3361e4082ed620918c261189a36a 1447e1c4828d2347df8f858aa041305fa4cf7db1 0 {'date': '* *', 'user': 'test'} (glob)
  cce2c55b896511e0b6e04173c9450ba822ebc740 0 {'date': '* *', 'user': 'test'} (glob)

Test evolve with conflict

  $ ls
  a
  b
  $ hg pdiff a
  diff -r 07f494440405 a
  --- a/a	* (glob)
  +++ b/a	* (glob)
  @@ -1,1 +1,2 @@
   a
  +a
  $ echo 'newer a' >> a
  $ hg ci -m 'newer a'
  $ hg gdown
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  [4] changea
  $ echo 'a' > a
  $ hg amend
  1 new unstable changesets
  $ hg evolve
  move:[5] newer a
  atop:[7] changea
  merging a
  warning: conflicts during merge.
  merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
  evolve failed!
  fix conflict and run "hg evolve --continue"
  abort: unresolved merge conflicts (see hg help resolve)
  [255]
  $ hg revert -r 'unstable()' a
  $ hg diff
  diff -r e8cc1b534401 a
  --- a/a	* (glob)
  +++ b/a	* (glob)
  @@ -1,1 +1,3 @@
   a
  +a
  +newer a
  $ hg evolve --continue
  grafting revision 5
  abort: unresolved merge conflicts (see hg help resolve)
  [255]
  $ hg resolve -m a
  $ hg evolve --continue
  grafting revision 5

Stabilize of late comer with different parent
==================================================

(the same parent case is handled in test-evolve.t)

  $ glog
  @  8:e3183e9c0961@default(draft) bk:[] newer a
  |
  o  7:e8cc1b534401@default(draft) bk:[changea] changea
  |
  o  0:07f494440405@default(draft) bk:[] adda
  
Add another commit

  $ hg gdown
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  [7] changea
  $ echo 'c' > c
  $ hg add c
  $ hg commit -m 'add c'
  created new head

Get a successors of 8 on it

  $ hg graft -O 8
  grafting revision 8

Add real change to the successors

  $ echo 'babar' >> a
  $ hg amend

Make precursors public

  $ hg phase --public 8
  1 new latecomer changesets
  $ glog
  @  12:15c83af6f3a3@default(draft) bk:[] newer a
  |
  o  9:355c5cda4de1@default(draft) bk:[] add c
  |
  | o  8:e3183e9c0961@default(public) bk:[] newer a
  |/
  o  7:e8cc1b534401@default(public) bk:[changea] changea
  |
  o  0:07f494440405@default(public) bk:[] adda
  

Stabilize !

  $ hg evolve --any --dry-run
  recreate:[12] newer a
  atop:[8] newer a
  hg rebase --rev 15c83af6f3a3 --dest e8cc1b534401;
  hg update e3183e9c0961;
  hg revert --all --rev 15c83af6f3a3;
  hg commit --msg "latecomer update to %s" (no-eol)
  $ hg evolve --any
  recreate:[12] newer a
  atop:[8] newer a
  rebasing to destination parent: e8cc1b534401
  computing new diff
  commited as 1d94fef80e85
  $ glog
  @  14:1d94fef80e85@default(draft) bk:[] latecomer update to e3183e9c0961:
  |
  | o  9:355c5cda4de1@default(draft) bk:[] add c
  | |
  o |  8:e3183e9c0961@default(public) bk:[] newer a
  |/
  o  7:e8cc1b534401@default(public) bk:[changea] changea
  |
  o  0:07f494440405@default(public) bk:[] adda
  

Stabilize conflicting changesets with same parent
=================================================

  $ rm a.orig
  $ hg up 9
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cat << EOF >> a
  > flore
  > arthur
  > zephir
  > some
  > less
  > conflict
  > EOF
  $ hg ci -m 'More addition'
  created new head
  $ glog
  @  15:7391601a4bfa@default(draft) bk:[] More addition
  |
  | o  14:1d94fef80e85@default(draft) bk:[] latecomer update to e3183e9c0961:
  | |
  o |  9:355c5cda4de1@default(draft) bk:[] add c
  | |
  | o  8:e3183e9c0961@default(public) bk:[] newer a
  |/
  o  7:e8cc1b534401@default(public) bk:[changea] changea
  |
  o  0:07f494440405@default(public) bk:[] adda
  
  $ echo 'babar' >> a
  $ hg amend
  $ hg up 15
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  Working directory parent is obsolete
  $ mv a a.old
  $ echo 'jungle' > a
  $ cat a.old >> a
  $ rm a.old
  $ hg amend
  2 new divergent changesets
  $ glog
  @  19:3883461cc228@default(draft) bk:[] More addition
  |
  | o  17:4754d61bc2db@default(draft) bk:[] More addition
  |/
  | o  14:1d94fef80e85@default(draft) bk:[] latecomer update to e3183e9c0961:
  | |
  o |  9:355c5cda4de1@default(draft) bk:[] add c
  | |
  | o  8:e3183e9c0961@default(public) bk:[] newer a
  |/
  o  7:e8cc1b534401@default(public) bk:[changea] changea
  |
  o  0:07f494440405@default(public) bk:[] adda
  

Stabilize It

  $ hg evolve -qn
  hg update -c 3883461cc228 &&
  hg merge 4754d61bc2db &&
  hg commit -m "auto merge resolving conflict between 3883461cc228 and 4754d61bc2db"&&
  hg up -C 7391601a4bfa &&
  hg revert --all --rev tip &&
  hg commit -m "`hg log -r 3883461cc228 --template={desc}`";
  $ hg evolve -v
  merge:[19] More addition
  with: [17] More addition
  base: [15] More addition
  merging divergent changeset
  resolving manifests
  merging a
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
  a
  a
  $ hg st
  $ hg amend -d '0 0' -m 'More addition' # kill date variation XXX should be done in evolve
  $ glog
  @  22:ac6d600735a4@default(draft) bk:[] More addition
  |
  | o  14:1d94fef80e85@default(draft) bk:[] latecomer update to e3183e9c0961:
  | |
  o |  9:355c5cda4de1@default(draft) bk:[] add c
  | |
  | o  8:e3183e9c0961@default(public) bk:[] newer a
  |/
  o  7:e8cc1b534401@default(public) bk:[changea] changea
  |
  o  0:07f494440405@default(public) bk:[] adda
  
  $ hg summary
  parent: 22:ac6d600735a4 tip
   More addition
  branch: default
  commit: (clean)
  update: 19 new changesets, 14 branch heads (merge)
  $ hg export .
  # HG changeset patch
  # User test
  # Date 0 0
  # Node ID ac6d600735a49ee377e29d1f74a0576e8c972e7b
  # Parent  355c5cda4de162658ed9f961a98a73a10b3167b1
  More addition
  
  diff -r 355c5cda4de1 -r ac6d600735a4 a
  --- a/a	Thu Jan 01 00:00:00 1970 +0000
  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
  @@ -1,1 +1,9 @@
  +jungle
   a
  +flore
  +arthur
  +zephir
  +some
  +less
  +conflict
  +babar

Check conflicting during conflicting resolution
-------------------------------------------------

  $ hg up 15
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  Working directory parent is obsolete
  $ echo 'gotta break' >> a
  $ hg amend
  2 new divergent changesets
  $ hg phase 'divergent()'
  22: draft
  24: draft
  $ hg evolve -qn
  hg update -c c956a4b140b6 &&
  hg merge ac6d600735a4 &&
  hg commit -m "auto merge resolving conflict between c956a4b140b6 and ac6d600735a4"&&
  hg up -C 7391601a4bfa &&
  hg revert --all --rev tip &&
  hg commit -m "`hg log -r c956a4b140b6 --template={desc}`";
  $ hg evolve
  merge:[24] More addition
  with: [22] More addition
  base: [15] More addition
  merging a
  warning: conflicts during merge.
  merging a incomplete! (edit conflicts, 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 update -C .' to abandon
  abort: Merge conflict between several amendments, and this is not yet automated
  (/!\ You can try:
  /!\ * manual merge + resolve => new cset X
  /!\ * hg up to the parent of the amended changeset (which are named W and Z)
  /!\ * hg revert --all -r X
  /!\ * hg ci -m "same message as the amended changeset" => new cset Y
  /!\ * hg kill -n Y W Z
  )
  [255]