evolve --rev reordering
-----------------------

  $ cat >> $HGRCPATH <<EOF
  > [ui]
  > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline}\n
  > [experimental]
  > evolution.allowdivergence = True
  > [extensions]
  > EOF
  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
  $ mkcommit() {
  >    echo "$1" > "$1"
  >    hg add "$1"
  >    hg ci -m "add $1"
  > }

  $ mkstack() {
  >    # Creates a stack of commit based on $1 with messages from $2, $3 ..
  >    hg update "$1" -C
  >    shift
  >    mkcommits $*
  > }

  $ mkcommits() {
  >   for i in $@; do mkcommit $i ; done
  > }

Initial setup
  $ hg init testrevorder
  $ cd testrevorder
  $ mkcommits p _a _b _c
  $ hg phase --public 0
  $ hg up 'desc(_a)'
  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
  $ echo "aaa" > _a
  $ hg amend
  2 new orphan changesets
  $ hg log -G
  @  4:12d519679175@default(draft) add _a
  |
  | *  3:4d156641b718@default(draft) add _c
  | |
  | *  2:4d7242ebb004@default(draft) add _b
  | |
  | x  1:2d73fcd7f07d@default(draft) add _a
  |/
  o  0:f92638be10c7@default(public) add p
  

evolve --rev reorders the rev to solve instability, trivial case 2 revs wrong order
  $ hg evolve --rev 'desc(_c) + desc(_b)'
  move:[2] add _b
  atop:[4] add _a
  move:[3] add _c

evolve --rev reorders the rev to solve instability. Harder case, obsolescence
accross three stacks in growing rev numbers.
  $ hg up "desc(_c)"
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ mkcommit _d
  $ hg up "desc(_a)"
  0 files updated, 0 files merged, 3 files removed, 0 files unresolved
  $ hg amend -m "aprime"
  3 new orphan changesets
  $ hg evolve --rev "desc(_b)"
  move:[5] add _b
  atop:[8] aprime
  $ hg up "desc(_b) - obsolete()"
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg amend -m "bprime"
  $ hg up "desc(aprime)"
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg amend -m "asecond"
  1 new orphan changesets
  $ hg log -G
  @  11:9a584314f3f3@default(draft) asecond
  |
  | *  10:a59c79776f7c@default(draft) bprime
  | |
  | x  8:81a687b96d4d@default(draft) aprime
  |/
  | *  7:464731bc0ed0@default(draft) add _d
  | |
  | *  6:52b8f9b04f83@default(draft) add _c
  | |
  | x  5:59476c3836ef@default(draft) add _b
  | |
  | x  4:12d519679175@default(draft) add _a
  |/
  o  0:f92638be10c7@default(public) add p
  
  $ hg evolve --rev "orphan()" --update
  move:[10] bprime
  atop:[11] asecond
  move:[6] add _c
  move:[7] add _d
  working directory is now at 225d2cc5d3fc
  $ hg log -G
  @  14:225d2cc5d3fc@default(draft) add _d
  |
  o  13:0fc229278e4d@default(draft) add _c
  |
  o  12:c3741b9eafae@default(draft) bprime
  |
  o  11:9a584314f3f3@default(draft) asecond
  |
  o  0:f92638be10c7@default(public) add p
  

Evolve --rev more complex case: two sets of stacks one with prune an no successor, the other one
partially solvable
 
First set of stack:
  $ mkstack "desc(_d)" c1_ c2_ c3_ c4_ >/dev/null
  $ mkstack "desc(_d)" c1prime c2prime >/dev/null
  $ mkstack "desc(_d)" c1second >/dev/null
  $ hg prune "desc(c1_)" -s "desc(c1prime)"
  1 changesets pruned
  3 new orphan changesets
  $ hg prune "desc(c2_)" -s "desc(c2prime)"
  1 changesets pruned
  $ hg prune "desc(c1prime)" -s "desc(c1second)"
  1 changesets pruned
  1 new orphan changesets
  $ hg log -G -r "desc(_d)::"
  @  21:a329855d0bc1@default(draft) add c1second
  |
  | *  20:072276ece1bf@default(draft) add c2prime
  | |
  | x  19:f137acd06692@default(draft) add c1prime
  |/
  | *  18:0a1d9b2ce733@default(draft) add c4_
  | |
  | *  17:e2874f41c56c@default(draft) add c3_
  | |
  | x  16:3247c33339fa@default(draft) add c2_
  | |
  | x  15:df322257c182@default(draft) add c1_
  |/
  o  14:225d2cc5d3fc@default(draft) add _d
  |
  ~

Second set of stack with no successor for b2_:
  $ mkstack "desc(_d)" b1_ b2_ b3_ b4_ >/dev/null
  $ mkstack "desc(_d)" b1prime b3prime >/dev/null
  $ hg prune "desc(b1_)" -s "desc(b1prime)"
  1 changesets pruned
  3 new orphan changesets
  $ hg prune "desc(b3_)" -s "desc(b3prime)"
  1 changesets pruned
  $ hg prune "desc(b2_)"
  1 changesets pruned

  $ hg log -G -r "desc(_d)::"
  @  27:ba4c348b6d5e@default(draft) add b3prime
  |
  o  26:8fe985f5d0aa@default(draft) add b1prime
  |
  | *  25:1d9ba2e75c93@default(draft) add b4_
  | |
  | x  24:aec6a9657b6c@default(draft) add b3_
  | |
  | x  23:a69b58575918@default(draft) add b2_
  | |
  | x  22:3564eb18e448@default(draft) add b1_
  |/
  | o  21:a329855d0bc1@default(draft) add c1second
  |/
  | *  20:072276ece1bf@default(draft) add c2prime
  | |
  | x  19:f137acd06692@default(draft) add c1prime
  |/
  | *  18:0a1d9b2ce733@default(draft) add c4_
  | |
  | *  17:e2874f41c56c@default(draft) add c3_
  | |
  | x  16:3247c33339fa@default(draft) add c2_
  | |
  | x  15:df322257c182@default(draft) add c1_
  |/
  o  14:225d2cc5d3fc@default(draft) add _d
  |
  ~

Solve the full second stack and only part of the first one
  $ echo "(desc(_d)::) - desc(c3_)"
  (desc(_d)::) - desc(c3_)
  $ hg evolve --rev "(desc(_d)::) - desc(c3_)"
  skipping 0a1d9b2ce733, consider including orphan ancestors
  move:[20] add c2prime
  atop:[21] add c1second
  move:[25] add b4_
  atop:[27] add b3prime

Cleanup
  $ hg evolve --rev "(desc(_d)::)" --update
  move:[17] add c3_
  atop:[28] add c2prime
  move:[18] add c4_
  working directory is now at 4ee8feb52325
  $ hg log -G -r "desc(_d)::"
  @  31:4ee8feb52325@default(draft) add c4_
  |
  o  30:08a530ce67e1@default(draft) add c3_
  |
  | o  29:4897c8ed7645@default(draft) add b4_
  | |
  o |  28:3abc7618dd5f@default(draft) add c2prime
  | |
  | o  27:ba4c348b6d5e@default(draft) add b3prime
  | |
  | o  26:8fe985f5d0aa@default(draft) add b1prime
  | |
  o |  21:a329855d0bc1@default(draft) add c1second
  |/
  o  14:225d2cc5d3fc@default(draft) add _d
  |
  ~

Test multiple revision with some un-evolvable because parent is split
---------------------------------------------------------------------

  $ hg up 'desc(c2prime)'
  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
  $ mkcommit c3part1
  created new head
  $ hg prev
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  [28] add c2prime
  $ mkcommit c3part2
  created new head
  $ hg prune -s 'desc(c3part1)' 'desc(c3_)'
  1 changesets pruned
  1 new orphan changesets
  $ hg prune -s 'desc(c3part2)' 'desc(c3_)'
  1 changesets pruned
  2 new content-divergent changesets
  $ hg up 'desc(b3prime)'
  2 files updated, 0 files merged, 3 files removed, 0 files unresolved
  $ hg amend -m 'b3second'
  1 new orphan changesets
  $ hg evolve --rev "orphan()"
  move:[29] add b4_
  atop:[34] b3second
  skipping 08a530ce67e1: divergent rewriting. can't choose destination
