1-- Test resolving orphaned_file and orphaned_directory conflicts
2mtn_setup()
3
4addfile("foo", "foo base")
5mkdir("stuff")
6addfile("stuff/file1", "file1 1")
7commit("testbranch", "base")
8base = base_revision()
9
10check(mtn("rm", "stuff/file1"), 0, false, false)
11check(mtn("rm", "stuff"), 0, false, false)
12commit("testbranch", "right 1")
13right_1 = base_revision()
14
15revert_to(base)
16
17addfile("stuff/file2", "file2 1")
18addfile("stuff/file3", "file3 1")
19mkdir("stuff/dir1")
20addfile("stuff/dir1/file4", "file4")
21mkdir("stuff/dir2")
22addfile("stuff/dir2/file5", "file5")
23mkdir("stuff/dir3")
24check(mtn("add", "stuff/dir3"), 0, nil, false)
25commit("testbranch", "left 1")
26left_1 = base_revision()
27
28check(mtn("conflicts", "store"), 0, nil, true)
29check(samelines("stderr", {"mtn: 5 conflicts with supported resolutions.",
30                           "mtn: stored in '_MTN/conflicts'"}))
31
32-- Check suggested resolutions for orphaned directory
33check(mtn("conflicts", "show_first"), 0, nil, true)
34check(samelines("stderr", {"mtn: orphaned node 'stuff/dir1'",
35                           "mtn: possible resolutions:",
36                           "mtn: resolve_first drop",
37                           "mtn: resolve_first rename \"file_name\""}))
38
39-- invalid resolution identifier
40check(mtn("conflicts", "resolve_first", "foo"), 1, nil, true)
41check(qgrep("'foo' is not a supported conflict resolution for orphaned_node", "stderr"))
42
43-- stuff/dir1 => dir1
44check(mtn("conflicts", "resolve_first", "rename", "dir1"), 0, nil, nil)
45
46-- stuff/dir2 => dropped (later gives error due to not empty)
47check(mtn("conflicts", "show_first"), 0, nil, true)
48check(qgrep("orphaned node 'stuff/dir2'", "stderr"));
49check(mtn("conflicts", "resolve_first", "drop"), 0, nil, nil)
50
51-- stuff/dir3 => dropped
52check(mtn("conflicts", "show_first"), 0, nil, true)
53check(qgrep("orphaned node 'stuff/dir3'", "stderr"));
54check(mtn("conflicts", "resolve_first", "drop"), 0, nil, nil)
55
56-- Check suggested resolutions for orphaned file
57check(mtn("conflicts", "show_first"), 0, nil, true)
58canonicalize("stderr")
59check(
60"mtn: orphaned node 'stuff/file2'\n" ..
61"mtn: possible resolutions:\n" ..
62"mtn: resolve_first drop\n" ..
63"mtn: resolve_first rename \"file_name\"\n" == readfile("stderr"))
64
65-- stuff/file2 => file2
66check(mtn("conflicts", "resolve_first", "rename", "file2"), 0, nil, nil)
67
68-- stuff/file3 => dropped
69check(mtn("conflicts", "show_first"), 0, nil, true)
70check(qgrep("orphaned node 'stuff/file3'", "stderr"));
71check(mtn("conflicts", "resolve_first", "drop"), 0, nil, nil)
72
73check(mtn("merge", "--resolve-conflicts"), 1, nil, true)
74check(qgrep("directory 'stuff/dir2'; it is not empty", "stderr"));
75
76check(mtn("drop", "stuff/dir2/file5"), 0, nil, false)
77commit("testbranch", "right 2")
78right_2 = base_revision()
79
80--  and now we start the resolution process over again
81check(mtn("conflicts", "store"), 0, nil, true)
82check(samelines("stderr", {"mtn: 5 conflicts with supported resolutions.",
83                           "mtn: stored in '_MTN/conflicts'"}))
84check(mtn("conflicts", "show_first"), 0, nil, true)
85check(qgrep("orphaned node 'stuff/dir1'", "stderr"));
86check(mtn("conflicts", "resolve_first", "rename", "dir1"), 0, nil, nil)
87
88check(mtn("conflicts", "show_first"), 0, nil, true)
89check(qgrep("orphaned node 'stuff/dir2'", "stderr"));
90check(mtn("conflicts", "resolve_first", "drop"), 0, nil, nil)
91
92check(mtn("conflicts", "show_first"), 0, nil, true)
93check(qgrep("orphaned node 'stuff/dir3'", "stderr"));
94check(mtn("conflicts", "resolve_first", "drop"), 0, nil, nil)
95
96check(mtn("conflicts", "show_first"), 0, nil, true)
97check(qgrep("orphaned node 'stuff/file2'", "stderr"));
98check(mtn("conflicts", "resolve_first", "rename", "file2"), 0, nil, nil)
99
100check(mtn("conflicts", "show_first"), 0, nil, true)
101check(qgrep("orphaned node 'stuff/file3'", "stderr"));
102check(mtn("conflicts", "resolve_first", "drop"), 0, nil, nil)
103
104check(mtn("merge", "--resolve-conflicts"), 0, nil, true)
105check(mtn("update"), 0, nil, true)
106check(exists("file2"))
107check(not exists("file3"))
108check(exists("dir1"))
109check(not exists("dir2"))
110check(not exists("stuff"))
111
112-- end of file
113