1-- Verify that we can resolve this extended use case involving a
2-- dropped_modified conflict:
3--
4--     A
5--    / \
6--   M1  D
7--   | \ |
8--   M2  P
9--    \ /
10--     Q
11--
12-- The file is modified and merged into the dropped branch twice.
13
14mtn_setup()
15
16addfile("file_2", "file_2 base") -- modify/rename left, drop right; drop
17commit("testbranch", "base")
18base = base_revision()
19
20writefile("file_2", "file_2 left 1")
21
22commit("testbranch", "left 1")
23left_1 = base_revision()
24
25revert_to(base)
26
27check(mtn("drop", "file_2"), 0, false, false)
28
29commit("testbranch", "right 1")
30right_1 = base_revision()
31
32check(mtn("show_conflicts", left_1, right_1), 0, nil, true)
33check(samelines("stderr",
34 {"mtn: [left]     506d8ed51b06c0080e8bb307155a88637045b532",
35  "mtn: [right]    a2889488ed1801a904d0219ec9939dfc2e9be033",
36  "mtn: [ancestor] f80ff103551d0313647d6c84990bc9db6b158dac",
37  "mtn: conflict: file 'file_2'",
38  "mtn: modified on the left, named file_2",
39  "mtn: dropped on the right",
40  "mtn: 1 conflict with supported resolutions."}))
41
42check(mtn("conflicts", "store", left_1, right_1), 0, nil, true)
43
44check(mtn("conflicts", "resolve_first", "keep"), 0, nil, true)
45
46check(mtn("explicit_merge", "--resolve-conflicts", left_1, right_1, "testbranch"), 0, nil, true)
47check(samelines("stderr",
48 {"mtn: [left]  506d8ed51b06c0080e8bb307155a88637045b532",
49  "mtn: [right] a2889488ed1801a904d0219ec9939dfc2e9be033",
50  "mtn: keeping 'file_2' from left",
51  "mtn: history for 'file_2' from left will be lost; see user manual Merge Conflicts section",
52  "mtn: [merged] 3df3126220588440def7b08f488ca35eaa94f1b6"}))
53
54check(mtn("update"), 0, nil, true)
55check(samelines("file_2", {"file_2 left 1"}))
56
57right_2 = base_revision()
58
59-- round 2; modify the file again
60revert_to(left_1)
61
62writefile("file_2", "file_2 left 2")
63
64commit("testbranch", "left 2")
65left_2 = base_revision()
66
67check(mtn("show_conflicts", left_2, right_2), 0, nil, true)
68check(samelines("stderr",
69 {"mtn: [left]     5a144a43f03692e389f3ddd4c510a4d9754061d5",
70  "mtn: [right]    3df3126220588440def7b08f488ca35eaa94f1b6",
71  "mtn: [ancestor] 506d8ed51b06c0080e8bb307155a88637045b532",
72  "mtn: conflict: file 'file_2'",
73  "mtn: modified on the left, named file_2",
74  "mtn: dropped and recreated on the right",
75  "mtn: 1 conflict with supported resolutions."}))
76
77check(mtn("conflicts", "store", left_2, right_2), 0, nil, true)
78
79check(mtn("conflicts", "resolve_first_left", "keep"), 0, nil, true)
80check(mtn("conflicts", "resolve_first_right", "drop"), 0, nil, true)
81
82check(mtn("explicit_merge", "--resolve-conflicts", left_2, right_2, "testbranch"), 0, nil, true)
83check(qgrep("mtn: keeping 'file_2' from left", "stderr"))
84check(qgrep("mtn: dropping 'file_2' from right", "stderr"))
85
86check(mtn("update"), 0, nil, true)
87check(samelines("file_2", {"file_2 left 2"}))
88
89-- end of file
90