|
1 ======================================================= |
|
2 Tests the resolution of content divergence: basic cases |
|
3 ======================================================= |
|
4 |
|
5 This file intend to cover basic case of content divergence. See the other test |
|
6 file for more advanced cases. |
|
7 |
|
8 $ cat >> $HGRCPATH <<EOF |
|
9 > [alias] |
|
10 > glog = log -GT "{rev}:{node|short} {desc|firstline}\n ({bookmarks}) [{branch}] {phase}" |
|
11 > [defaults] |
|
12 > amend=-d "0 0" |
|
13 > fold=-d "0 0" |
|
14 > [web] |
|
15 > push_ssl = false |
|
16 > allow_push = * |
|
17 > [phases] |
|
18 > publish = False |
|
19 > [diff] |
|
20 > git = 1 |
|
21 > unified = 0 |
|
22 > [ui] |
|
23 > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline} [{troubles}]\n |
|
24 > [extensions] |
|
25 > EOF |
|
26 $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH |
|
27 $ mkcommit() { |
|
28 > echo "$1" > "$1" |
|
29 > hg add "$1" |
|
30 > hg ci -m "add $1" |
|
31 > } |
|
32 |
|
33 $ mkcommits() { |
|
34 > for i in $@; do mkcommit $i ; done |
|
35 > } |
|
36 |
|
37 Basic test of divergence: two divergent changesets with the same parents |
|
38 With --all --any we dedupe the divergent and solve the divergence once |
|
39 |
|
40 $ hg init test1 |
|
41 $ cd test1 |
|
42 $ echo a > a |
|
43 $ hg ci -Aqm "added a" |
|
44 $ echo b > b |
|
45 $ hg ci -Aqm "added b" |
|
46 |
|
47 $ hg up .^ |
|
48 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
49 $ echo bdivergent > bdivergent1 |
|
50 $ hg ci -Am "divergent" |
|
51 adding bdivergent1 |
|
52 created new head |
|
53 |
|
54 $ hg up .^ |
|
55 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
56 $ echo bdivergent > bdivergent2 |
|
57 $ hg ci -Am "divergent" |
|
58 adding bdivergent2 |
|
59 created new head |
|
60 |
|
61 $ hg prune -s 8374d2ddc3a4 "desc('added b')" |
|
62 1 changesets pruned |
|
63 $ hg prune -s 593c57f2117e "desc('added b')" --hidden |
|
64 1 changesets pruned |
|
65 2 new content-divergent changesets |
|
66 |
|
67 $ hg log -G |
|
68 @ 3:8374d2ddc3a4@default(draft) divergent [content-divergent] |
|
69 | |
|
70 | * 2:593c57f2117e@default(draft) divergent [content-divergent] |
|
71 |/ |
|
72 o 0:9092f1db7931@default(draft) added a [] |
|
73 |
|
74 |
|
75 $ hg evolve --all --any --content-divergent |
|
76 merge:[2] divergent |
|
77 with: [3] divergent |
|
78 base: [1] added b |
|
79 updating to "local" side of the conflict: 593c57f2117e |
|
80 merging "other" content-divergent changeset '8374d2ddc3a4' |
|
81 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
82 working directory is now at 45bf1312f454 |
|
83 $ hg log -G |
|
84 @ 4:45bf1312f454@default(draft) divergent [] |
|
85 | |
|
86 o 0:9092f1db7931@default(draft) added a [] |
|
87 |
|
88 |
|
89 $ cd .. |
|
90 |
|
91 Extra setup |
|
92 ----------- |
|
93 |
|
94 (the test below were initially in a different file) |
|
95 |
|
96 $ hg init cdiv |
|
97 $ cd cdiv |
|
98 $ echo ".*\.orig" > .hgignore |
|
99 $ hg add .hgignore |
|
100 $ hg ci -m "added hgignore" |
|
101 $ for ch in a b c d; do echo foo > $ch; hg add $ch; hg ci -qm "added "$ch; done; |
|
102 |
|
103 $ hg glog |
|
104 @ 4:c41c793e0ef1 added d |
|
105 | () [default] draft |
|
106 o 3:ca1b80f7960a added c |
|
107 | () [default] draft |
|
108 o 2:b1661037fa25 added b |
|
109 | () [default] draft |
|
110 o 1:c7586e2a9264 added a |
|
111 | () [default] draft |
|
112 o 0:8fa14d15e168 added hgignore |
|
113 () [default] draft |
|
114 |
|
115 Merging branch difference |
|
116 ------------------------- |
|
117 |
|
118 Creating content-divergence with branch change where base, divergent and other |
|
119 have different branches |
|
120 |
|
121 $ hg branch -r . foobar |
|
122 changed branch on 1 changesets |
|
123 |
|
124 $ hg up c41c793e0ef1 --hidden |
|
125 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
126 updated to hidden changeset c41c793e0ef1 |
|
127 (hidden revision 'c41c793e0ef1' was rewritten as: 9e5dffcb3d48) |
|
128 working directory parent is obsolete! (c41c793e0ef1) |
|
129 (use 'hg evolve' to update to its successor: 9e5dffcb3d48) |
|
130 $ echo bar > d |
|
131 $ hg branch watwat |
|
132 marked working directory as branch watwat |
|
133 $ hg amend |
|
134 2 new content-divergent changesets |
|
135 |
|
136 $ hg glog |
|
137 @ 6:264b04f771fb added d |
|
138 | () [watwat] draft |
|
139 | * 5:9e5dffcb3d48 added d |
|
140 |/ () [foobar] draft |
|
141 o 3:ca1b80f7960a added c |
|
142 | () [default] draft |
|
143 o 2:b1661037fa25 added b |
|
144 | () [default] draft |
|
145 o 1:c7586e2a9264 added a |
|
146 | () [default] draft |
|
147 o 0:8fa14d15e168 added hgignore |
|
148 () [default] draft |
|
149 |
|
150 $ hg evolve --content-divergent --config ui.interactive=True<<EOF |
|
151 > c |
|
152 > EOF |
|
153 merge:[6] added d |
|
154 with: [5] added d |
|
155 base: [4] added d |
|
156 merging "other" content-divergent changeset '9e5dffcb3d48' |
|
157 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
158 content divergent changesets on different branches. |
|
159 choose branch for the resolution changeset. (a) default or (b) watwat or (c) foobar? c |
|
160 working directory is now at 0ac42f1bc15c |
|
161 |
|
162 $ hg glog |
|
163 @ 7:0ac42f1bc15c added d |
|
164 | () [foobar] draft |
|
165 o 3:ca1b80f7960a added c |
|
166 | () [default] draft |
|
167 o 2:b1661037fa25 added b |
|
168 | () [default] draft |
|
169 o 1:c7586e2a9264 added a |
|
170 | () [default] draft |
|
171 o 0:8fa14d15e168 added hgignore |
|
172 () [default] draft |
|
173 |
|
174 Testing merging of commit messages |
|
175 ----------------------------------- |
|
176 |
|
177 When base and one of the divergent has same commit messages and other divergent |
|
178 has different one |
|
179 |
|
180 $ echo wat > d |
|
181 $ hg amend |
|
182 |
|
183 $ hg up .^ |
|
184 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
185 |
|
186 $ echo bar > d |
|
187 $ hg ci -Aqm "added a d with bar in it, expect some beers" |
|
188 |
|
189 $ hg prune -r 0ac42f1bc15c -s . --hidden |
|
190 1 changesets pruned |
|
191 2 new content-divergent changesets |
|
192 |
|
193 $ hg glog |
|
194 @ 9:59081c9c425a added a d with bar in it, expect some beers |
|
195 | () [default] draft |
|
196 | * 8:f621d00f5f0e added d |
|
197 |/ () [foobar] draft |
|
198 o 3:ca1b80f7960a added c |
|
199 | () [default] draft |
|
200 o 2:b1661037fa25 added b |
|
201 | () [default] draft |
|
202 o 1:c7586e2a9264 added a |
|
203 | () [default] draft |
|
204 o 0:8fa14d15e168 added hgignore |
|
205 () [default] draft |
|
206 |
|
207 $ hg evolve --content-divergent |
|
208 merge:[9] added a d with bar in it, expect some beers |
|
209 with: [8] added d |
|
210 base: [7] added d |
|
211 merging "other" content-divergent changeset 'f621d00f5f0e' |
|
212 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
213 working directory is now at a9d6fd6b5e40 |
|
214 |
|
215 $ hg glog |
|
216 @ 10:a9d6fd6b5e40 added a d with bar in it, expect some beers |
|
217 | () [default] draft |
|
218 o 3:ca1b80f7960a added c |
|
219 | () [default] draft |
|
220 o 2:b1661037fa25 added b |
|
221 | () [default] draft |
|
222 o 1:c7586e2a9264 added a |
|
223 | () [default] draft |
|
224 o 0:8fa14d15e168 added hgignore |
|
225 () [default] draft |
|
226 |
|
227 When base has different message and both divergents has same one |
|
228 |
|
229 $ echo foo > d |
|
230 $ hg amend -m "foo to d" |
|
231 |
|
232 $ hg up a9d6fd6b5e40 --hidden |
|
233 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
234 updated to hidden changeset a9d6fd6b5e40 |
|
235 (hidden revision 'a9d6fd6b5e40' was rewritten as: b10b07a394f1) |
|
236 working directory parent is obsolete! (a9d6fd6b5e40) |
|
237 (use 'hg evolve' to update to its successor: b10b07a394f1) |
|
238 $ echo babar > d |
|
239 $ hg amend -m "foo to d" |
|
240 2 new content-divergent changesets |
|
241 |
|
242 $ hg glog |
|
243 @ 12:0bb497fed24a foo to d |
|
244 | () [default] draft |
|
245 | * 11:b10b07a394f1 foo to d |
|
246 |/ () [default] draft |
|
247 o 3:ca1b80f7960a added c |
|
248 | () [default] draft |
|
249 o 2:b1661037fa25 added b |
|
250 | () [default] draft |
|
251 o 1:c7586e2a9264 added a |
|
252 | () [default] draft |
|
253 o 0:8fa14d15e168 added hgignore |
|
254 () [default] draft |
|
255 |
|
256 $ hg evolve --content-divergent |
|
257 merge:[12] foo to d |
|
258 with: [11] foo to d |
|
259 base: [10] added a d with bar in it, expect some beers |
|
260 merging "other" content-divergent changeset 'b10b07a394f1' |
|
261 merging d |
|
262 warning: conflicts while merging d! (edit, then use 'hg resolve --mark') |
|
263 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
264 fix conflicts and see `hg help evolve.interrupted` |
|
265 [1] |
|
266 |
|
267 $ echo foobar > d |
|
268 $ hg resolve -m |
|
269 (no more unresolved files) |
|
270 continue: hg evolve --continue |
|
271 $ hg evolve --continue |
|
272 working directory is now at 11175423b5dc |
|
273 |
|
274 $ hg glog |
|
275 @ 13:11175423b5dc foo to d |
|
276 | () [default] draft |
|
277 o 3:ca1b80f7960a added c |
|
278 | () [default] draft |
|
279 o 2:b1661037fa25 added b |
|
280 | () [default] draft |
|
281 o 1:c7586e2a9264 added a |
|
282 | () [default] draft |
|
283 o 0:8fa14d15e168 added hgignore |
|
284 () [default] draft |
|
285 |
|
286 When all three base, divergent and other has different commit messages creating |
|
287 conflicts |
|
288 |
|
289 $ echo bar > d |
|
290 $ hg amend -m "bar to d, expect beers" |
|
291 |
|
292 $ hg up 11175423b5dc --hidden |
|
293 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
294 updated to hidden changeset 11175423b5dc |
|
295 (hidden revision '11175423b5dc' was rewritten as: 27f0463f169a) |
|
296 working directory parent is obsolete! (11175423b5dc) |
|
297 (use 'hg evolve' to update to its successor: 27f0463f169a) |
|
298 $ echo wat > d |
|
299 $ hg amend -m "wat to d, wat?" |
|
300 2 new content-divergent changesets |
|
301 |
|
302 $ hg glog |
|
303 @ 15:f542037ddf31 wat to d, wat? |
|
304 | () [default] draft |
|
305 | * 14:27f0463f169a bar to d, expect beers |
|
306 |/ () [default] draft |
|
307 o 3:ca1b80f7960a added c |
|
308 | () [default] draft |
|
309 o 2:b1661037fa25 added b |
|
310 | () [default] draft |
|
311 o 1:c7586e2a9264 added a |
|
312 | () [default] draft |
|
313 o 0:8fa14d15e168 added hgignore |
|
314 () [default] draft |
|
315 |
|
316 $ hg evolve --content-divergent |
|
317 merge:[15] wat to d, wat? |
|
318 with: [14] bar to d, expect beers |
|
319 base: [13] foo to d |
|
320 merging "other" content-divergent changeset '27f0463f169a' |
|
321 merging d |
|
322 warning: conflicts while merging d! (edit, then use 'hg resolve --mark') |
|
323 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
324 fix conflicts and see `hg help evolve.interrupted` |
|
325 [1] |
|
326 |
|
327 $ echo watbar > d |
|
328 $ hg resolve -m |
|
329 (no more unresolved files) |
|
330 continue: hg evolve --continue |
|
331 |
|
332 $ cat > editor.sh <<EOF |
|
333 > #!/bin/sh |
|
334 > printf "**showing editors text**\n\n" |
|
335 > cat \$1 |
|
336 > printf "\n**done showing editors text**\n\n" |
|
337 > cat > \$1 <<ENDOF |
|
338 > watbar to d |
|
339 > ENDOF |
|
340 > EOF |
|
341 |
|
342 $ HGEDITOR='sh ./editor.sh' hg evolve --continue |
|
343 **showing editors text** |
|
344 |
|
345 HG: Conflicts while merging changeset description of content-divergent changesets. |
|
346 HG: Resolve conflicts in commit messages to continue. |
|
347 |
|
348 <<<<<<< divergent |
|
349 wat to d, wat?||||||| base |
|
350 foo to d======= |
|
351 bar to d, expect beers>>>>>>> other |
|
352 |
|
353 **done showing editors text** |
|
354 |
|
355 working directory is now at 89ea3eee2d69 |
|
356 |
|
357 $ hg glog |
|
358 @ 16:89ea3eee2d69 watbar to d |
|
359 | () [default] draft |
|
360 o 3:ca1b80f7960a added c |
|
361 | () [default] draft |
|
362 o 2:b1661037fa25 added b |
|
363 | () [default] draft |
|
364 o 1:c7586e2a9264 added a |
|
365 | () [default] draft |
|
366 o 0:8fa14d15e168 added hgignore |
|
367 () [default] draft |
|
368 |
|
369 $ cd .. |
|
370 |
|
371 Stabilize divergent changesets with same parent |
|
372 =============================================== |
|
373 |
|
374 $ glog() { |
|
375 > hg log -G --template \ |
|
376 > '{rev}:{node|short}@{branch}({phase}) bk:[{bookmarks}] {desc|firstline}\n' "$@" |
|
377 > } |
|
378 |
|
379 $ hg init content-divergent-savanna |
|
380 $ cd content-divergent-savanna |
|
381 $ echo a > a |
|
382 $ hg add a |
|
383 $ hg ci -m 'root' |
|
384 $ hg phase --public . |
|
385 $ cat << EOF >> a |
|
386 > flore |
|
387 > arthur |
|
388 > zephir |
|
389 > some |
|
390 > less |
|
391 > conflict |
|
392 > EOF |
|
393 $ hg ci -m 'More addition' |
|
394 $ glog |
|
395 @ 1:867e43582046@default(draft) bk:[] More addition |
|
396 | |
|
397 o 0:6569b5a81c7e@default(public) bk:[] root |
|
398 |
|
399 $ echo 'babar' >> a |
|
400 $ hg amend |
|
401 $ hg up --hidden 'min(desc("More addition"))' |
|
402 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
403 updated to hidden changeset 867e43582046 |
|
404 (hidden revision '867e43582046' was rewritten as: fc6349f931da) |
|
405 working directory parent is obsolete! (867e43582046) |
|
406 (use 'hg evolve' to update to its successor: fc6349f931da) |
|
407 $ mv a a.old |
|
408 $ echo 'jungle' > a |
|
409 $ cat a.old >> a |
|
410 $ rm a.old |
|
411 $ hg amend |
|
412 2 new content-divergent changesets |
|
413 $ glog |
|
414 @ 3:051337a45e7c@default(draft) bk:[] More addition |
|
415 | |
|
416 | * 2:fc6349f931da@default(draft) bk:[] More addition |
|
417 |/ |
|
418 o 0:6569b5a81c7e@default(public) bk:[] root |
|
419 |
|
420 |
|
421 Stabilize it |
|
422 |
|
423 $ hg evolve -qn --confirm --content-divergent |
|
424 merge:[3] More addition |
|
425 with: [2] More addition |
|
426 base: [1] More addition |
|
427 perform evolve? [Ny] n |
|
428 abort: evolve aborted by user |
|
429 [255] |
|
430 $ echo y | hg evolve -qn --confirm --config ui.interactive=True --content-divergent |
|
431 merge:[3] More addition |
|
432 with: [2] More addition |
|
433 base: [1] More addition |
|
434 perform evolve? [Ny] y |
|
435 hg update -c 051337a45e7c && |
|
436 hg merge fc6349f931da && |
|
437 hg commit -m "auto merge resolving conflict between 051337a45e7c and fc6349f931da"&& |
|
438 hg up -C 867e43582046 && |
|
439 hg revert --all --rev tip && |
|
440 hg commit -m "`hg log -r 051337a45e7c --template={desc}`"; |
|
441 $ hg evolve -v --content-divergent |
|
442 merge:[3] More addition |
|
443 with: [2] More addition |
|
444 base: [1] More addition |
|
445 merging "other" content-divergent changeset 'fc6349f931da' |
|
446 resolving manifests |
|
447 merging a |
|
448 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
449 committing files: |
|
450 a |
|
451 committing manifest |
|
452 committing changelog |
|
453 working directory is now at 5bf84d1d71d1 |
|
454 $ hg st |
|
455 $ glog |
|
456 @ 4:5bf84d1d71d1@default(draft) bk:[] More addition |
|
457 | |
|
458 o 0:6569b5a81c7e@default(public) bk:[] root |
|
459 |
|
460 $ hg summary |
|
461 parent: 4:5bf84d1d71d1 tip |
|
462 More addition |
|
463 branch: default |
|
464 commit: (clean) |
|
465 update: (current) |
|
466 phases: 1 draft |
|
467 $ hg export . --config diff.unified=3 |
|
468 # HG changeset patch |
|
469 # User test |
|
470 # Date 0 0 |
|
471 # Thu Jan 01 00:00:00 1970 +0000 |
|
472 # Node ID 5bf84d1d71d12f451bfe1e09b93045eb6338cd6c |
|
473 # Parent 6569b5a81c7e307ddc076550e8c0f6d75b6effcd |
|
474 More addition |
|
475 |
|
476 diff --git a/a b/a |
|
477 --- a/a |
|
478 +++ b/a |
|
479 @@ -1,1 +1,9 @@ |
|
480 +jungle |
|
481 a |
|
482 +flore |
|
483 +arthur |
|
484 +zephir |
|
485 +some |
|
486 +less |
|
487 +conflict |
|
488 +babar |
|
489 |
|
490 Check conflict during divergence resolution |
|
491 ------------------------------------------------- |
|
492 |
|
493 $ hg up --hidden 'min(desc("More addition"))' |
|
494 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
495 updated to hidden changeset 867e43582046 |
|
496 (hidden revision '867e43582046' was rewritten as: 5bf84d1d71d1) |
|
497 working directory parent is obsolete! (867e43582046) |
|
498 (use 'hg evolve' to update to its successor: 5bf84d1d71d1) |
|
499 $ echo 'gotta break' >> a |
|
500 $ hg amend |
|
501 2 new content-divergent changesets |
|
502 # reamend so that the case is not the first precursor. |
|
503 $ hg amend -m "More addition (2)" |
|
504 $ hg phase 'contentdivergent()' |
|
505 4: draft |
|
506 6: draft |
|
507 |
|
508 $ glog |
|
509 @ 6:13c1b75640a1@default(draft) bk:[] More addition (2) |
|
510 | |
|
511 | * 4:5bf84d1d71d1@default(draft) bk:[] More addition |
|
512 |/ |
|
513 o 0:6569b5a81c7e@default(public) bk:[] root |
|
514 |
|
515 |
|
516 $ hg evolve -qn --content-divergent |
|
517 hg update -c 13c1b75640a1 && |
|
518 hg merge 5bf84d1d71d1 && |
|
519 hg commit -m "auto merge resolving conflict between 13c1b75640a1 and 5bf84d1d71d1"&& |
|
520 hg up -C 867e43582046 && |
|
521 hg revert --all --rev tip && |
|
522 hg commit -m "`hg log -r 13c1b75640a1 --template={desc}`"; |
|
523 $ hg evolve --content-divergent |
|
524 merge:[6] More addition (2) |
|
525 with: [4] More addition |
|
526 base: [1] More addition |
|
527 merging "other" content-divergent changeset '5bf84d1d71d1' |
|
528 merging a |
|
529 warning: conflicts while merging a! (edit, then use 'hg resolve --mark') |
|
530 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
531 fix conflicts and see `hg help evolve.interrupted` |
|
532 [1] |
|
533 |
|
534 $ cat > a <<EOF |
|
535 > jungle |
|
536 > a |
|
537 > flore |
|
538 > arthur |
|
539 > zephir |
|
540 > some |
|
541 > less |
|
542 > conflict |
|
543 > babar |
|
544 > EOF |
|
545 |
|
546 $ hg resolve -m |
|
547 (no more unresolved files) |
|
548 continue: hg evolve --continue |
|
549 $ hg evolve --continue |
|
550 working directory is now at 2346e1147fed |
|
551 $ glog |
|
552 @ 7:2346e1147fed@default(draft) bk:[] More addition (2) |
|
553 | |
|
554 o 0:6569b5a81c7e@default(public) bk:[] root |
|
555 |
|
556 $ hg exp --config diff.unified=3 |
|
557 # HG changeset patch |
|
558 # User test |
|
559 # Date 0 0 |
|
560 # Thu Jan 01 00:00:00 1970 +0000 |
|
561 # Node ID 2346e1147fedc8c9aa17f9ba7870dcd8be52f567 |
|
562 # Parent 6569b5a81c7e307ddc076550e8c0f6d75b6effcd |
|
563 More addition (2) |
|
564 |
|
565 diff --git a/a b/a |
|
566 --- a/a |
|
567 +++ b/a |
|
568 @@ -1,1 +1,9 @@ |
|
569 +jungle |
|
570 a |
|
571 +flore |
|
572 +arthur |
|
573 +zephir |
|
574 +some |
|
575 +less |
|
576 +conflict |
|
577 +babar |
|
578 $ cd .. |