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