1evolve --rev reordering
2-----------------------
3
4  $ cat >> $HGRCPATH <<EOF
5  > [ui]
6  > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline}\n
7  > [experimental]
8  > evolution.allowdivergence = True
9  > [extensions]
10  > EOF
11  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
12  $ mkcommit() {
13  >    echo "$1" > "$1"
14  >    hg add "$1"
15  >    hg ci -m "add $1"
16  > }
17
18  $ mkstack() {
19  >    # Creates a stack of commit based on $1 with messages from $2, $3 ..
20  >    hg update "$1" -C
21  >    shift
22  >    mkcommits $*
23  > }
24
25  $ mkcommits() {
26  >   for i in $@; do mkcommit $i ; done
27  > }
28
29Initial setup
30  $ hg init testrevorder
31  $ cd testrevorder
32  $ mkcommits p _a _b _c
33  $ hg phase --public 0
34  $ hg up 'desc(_a)'
35  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
36  $ echo "aaa" > _a
37  $ hg amend
38  2 new orphan changesets
39  $ hg log -G
40  @  4:12d519679175@default(draft) add _a
41  |
42  | *  3:4d156641b718@default(draft) add _c
43  | |
44  | *  2:4d7242ebb004@default(draft) add _b
45  | |
46  | x  1:2d73fcd7f07d@default(draft) add _a
47  |/
48  o  0:f92638be10c7@default(public) add p
49
50
51evolve --rev reorders the rev to solve instability, trivial case 2 revs wrong order
52  $ hg evolve --rev 'desc(_c) + desc(_b)'
53  move:[2] add _b
54  atop:[4] add _a
55  move:[3] add _c
56
57evolve --rev reorders the rev to solve instability. Harder case, obsolescence
58accross three stacks in growing rev numbers.
59  $ hg up "desc(_c)"
60  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
61  $ mkcommit _d
62  $ hg up "desc(_a)"
63  0 files updated, 0 files merged, 3 files removed, 0 files unresolved
64  $ hg amend -m "aprime"
65  3 new orphan changesets
66  $ hg evolve --rev "desc(_b)"
67  move:[5] add _b
68  atop:[8] aprime
69  $ hg up "desc(_b) - obsolete()"
70  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
71  $ hg amend -m "bprime"
72  $ hg up "desc(aprime)"
73  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
74  $ hg amend -m "asecond"
75  1 new orphan changesets
76  $ hg log -G
77  @  11:9a584314f3f3@default(draft) asecond
78  |
79  | *  10:a59c79776f7c@default(draft) bprime
80  | |
81  | x  8:81a687b96d4d@default(draft) aprime
82  |/
83  | *  7:464731bc0ed0@default(draft) add _d
84  | |
85  | *  6:52b8f9b04f83@default(draft) add _c
86  | |
87  | x  5:59476c3836ef@default(draft) add _b
88  | |
89  | x  4:12d519679175@default(draft) add _a
90  |/
91  o  0:f92638be10c7@default(public) add p
92
93  $ hg evolve --rev "orphan()" --update
94  move:[10] bprime
95  atop:[11] asecond
96  move:[6] add _c
97  move:[7] add _d
98  working directory is now at 739f18ac1d03
99  $ hg log -G
100  @  14:739f18ac1d03@default(draft) add _d
101  |
102  o  13:e5960578d158@default(draft) add _c
103  |
104  o  12:4ad33fa88946@default(draft) bprime
105  |
106  o  11:9a584314f3f3@default(draft) asecond
107  |
108  o  0:f92638be10c7@default(public) add p
109
110
111Evolve --rev more complex case: two sets of stacks one with prune an no successor, the other one
112partially solvable
113
114First set of stack:
115  $ mkstack "desc(_d)" c1_ c2_ c3_ c4_ >/dev/null
116  $ mkstack "desc(_d)" c1prime c2prime >/dev/null
117  $ mkstack "desc(_d)" c1second >/dev/null
118  $ hg prune "desc(c1_)" -s "desc(c1prime)"
119  1 changesets pruned
120  3 new orphan changesets
121  $ hg prune "desc(c2_)" -s "desc(c2prime)"
122  1 changesets pruned
123  $ hg prune "desc(c1prime)" -s "desc(c1second)"
124  1 changesets pruned
125  1 new orphan changesets
126  $ hg log -G -r "desc(_d)::"
127  @  21:dcf786e878fd@default(draft) add c1second
128  |
129  | *  20:507d52d715f6@default(draft) add c2prime
130  | |
131  | x  19:c995cb124ddc@default(draft) add c1prime
132  |/
133  | *  18:d096a2437fd0@default(draft) add c4_
134  | |
135  | *  17:cde95c6cba7a@default(draft) add c3_
136  | |
137  | x  16:e0d9f7a099fe@default(draft) add c2_
138  | |
139  | x  15:43b7c338b1f8@default(draft) add c1_
140  |/
141  o  14:739f18ac1d03@default(draft) add _d
142  |
143  ~
144
145Second set of stack with no successor for b2_:
146  $ mkstack "desc(_d)" b1_ b2_ b3_ b4_ >/dev/null
147  $ mkstack "desc(_d)" b1prime b3prime >/dev/null
148  $ hg prune "desc(b1_)" -s "desc(b1prime)"
149  1 changesets pruned
150  3 new orphan changesets
151  $ hg prune "desc(b3_)" -s "desc(b3prime)"
152  1 changesets pruned
153  $ hg prune "desc(b2_)"
154  1 changesets pruned
155
156  $ hg log -G -r "desc(_d)::"
157  @  27:b253ff5b65d1@default(draft) add b3prime
158  |
159  o  26:4acf61f11dfb@default(draft) add b1prime
160  |
161  | *  25:594e1fbbd61f@default(draft) add b4_
162  | |
163  | x  24:be27500cfc76@default(draft) add b3_
164  | |
165  | x  23:b54f77dc5831@default(draft) add b2_
166  | |
167  | x  22:0e1eba27e9aa@default(draft) add b1_
168  |/
169  | o  21:dcf786e878fd@default(draft) add c1second
170  |/
171  | *  20:507d52d715f6@default(draft) add c2prime
172  | |
173  | x  19:c995cb124ddc@default(draft) add c1prime
174  |/
175  | *  18:d096a2437fd0@default(draft) add c4_
176  | |
177  | *  17:cde95c6cba7a@default(draft) add c3_
178  | |
179  | x  16:e0d9f7a099fe@default(draft) add c2_
180  | |
181  | x  15:43b7c338b1f8@default(draft) add c1_
182  |/
183  o  14:739f18ac1d03@default(draft) add _d
184  |
185  ~
186
187Solve the full second stack and only part of the first one
188  $ echo "(desc(_d)::) - desc(c3_)"
189  (desc(_d)::) - desc(c3_)
190  $ hg evolve --rev "(desc(_d)::) - desc(c3_)"
191  skipping d096a2437fd0, consider including orphan ancestors
192  move:[20] add c2prime
193  atop:[21] add c1second
194  move:[25] add b4_
195  atop:[27] add b3prime
196
197Cleanup
198  $ hg evolve --rev "(desc(_d)::)" --update
199  move:[17] add c3_
200  atop:[28] add c2prime
201  move:[18] add c4_
202  working directory is now at 35e7b797ace5
203  $ hg log -G -r "desc(_d)::"
204  @  31:35e7b797ace5@default(draft) add c4_
205  |
206  o  30:0b9488394e89@default(draft) add c3_
207  |
208  | o  29:ea93190a9cd1@default(draft) add b4_
209  | |
210  o |  28:881b9c092e53@default(draft) add c2prime
211  | |
212  | o  27:b253ff5b65d1@default(draft) add b3prime
213  | |
214  | o  26:4acf61f11dfb@default(draft) add b1prime
215  | |
216  o |  21:dcf786e878fd@default(draft) add c1second
217  |/
218  o  14:739f18ac1d03@default(draft) add _d
219  |
220  ~
221
222Test multiple revision with some un-evolvable because parent is split
223---------------------------------------------------------------------
224
225  $ hg up 'desc(c2prime)'
226  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
227  $ mkcommit c3part1
228  created new head
229  $ hg prev
230  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
231  [28] add c2prime
232  $ mkcommit c3part2
233  created new head
234  $ hg prune -s 'desc(c3part1)' 'desc(c3_)'
235  1 changesets pruned
236  1 new orphan changesets
237  $ hg prune -s 'desc(c3part2)' 'desc(c3_)'
238  1 changesets pruned
239  2 new content-divergent changesets
240  $ hg up 'desc(b3prime)'
241  2 files updated, 0 files merged, 3 files removed, 0 files unresolved
242  $ hg amend -m 'b3second'
243  1 new orphan changesets
244  $ hg evolve --rev "orphan()"
245  move:[29] add b4_
246  atop:[34] b3second
247  skipping 0b9488394e89: divergent rewriting. can't choose destination
248