# # # patch "merge.cc" # from [54cca8e44707cd0c1ca8d0805efb2521185076b1] # to [da50821577d3818bdabac10a8ae77844b6774bda] # # patch "roster_merge.cc" # from [17f4b5ac24ef49e234af24f7cde4d9223165d433] # to [e431f1e6fc453f98840813a8481f06f7b2751676] # # patch "tests/conflict_messages/__driver__.lua" # from [1af78d5744833cc37c601e2f9c24638cb31f45ea] # to [c7e54a78d0aa9d810198584d02251278d8b53db2] # ============================================================ --- merge.cc 54cca8e44707cd0c1ca8d0805efb2521185076b1 +++ merge.cc da50821577d3818bdabac10a8ae77844b6774bda @@ -79,7 +79,7 @@ namespace left_roster, right_roster, adaptor); - bool merged; + bool merged = false; switch (method) { ============================================================ --- roster_merge.cc 17f4b5ac24ef49e234af24f7cde4d9223165d433 +++ roster_merge.cc e431f1e6fc453f98840813a8481f06f7b2751676 @@ -127,7 +127,7 @@ dump_conflicts(roster_merge_result const dump_conflicts(roster_merge_result const & result, string & out) { if (result.missing_root_dir) - out += (FL("missing root conflict: root directory has been removed")).str(); + out += (FL("missing root conflict: root directory has been removed\n")).str(); dump(result.invalid_name_conflicts, out); dump(result.directory_loop_conflicts, out); @@ -2188,7 +2188,7 @@ struct multiple_name_plus_helper : publi node_id name_conflict_nid; node_id left_parent, right_parent; path_component left_name, right_name; - void make_dn_conflict(string const & left, string const & right) + void make_multiple_name_conflict(string const & left, string const & right) { file_path left_path = file_path_internal(left); file_path right_path = file_path_internal(right); @@ -2200,7 +2200,7 @@ struct multiple_name_plus_helper : publi right_parent = right_roster.get_node(right_path)->parent; right_name = right_roster.get_node(right_path)->name; } - void check_dn_conflict() + void check_multiple_name_conflict() { I(!result.is_clean()); multiple_name_conflict const & c = idx(result.multiple_name_conflicts, 0); @@ -2222,7 +2222,7 @@ struct multiple_name_plus_duplicate_name { a_nid = nis.next(); b_nid = nis.next(); - make_dn_conflict("a", "b"); + make_multiple_name_conflict("a", "b"); make_dir(left_roster, left_markings, left_rid, left_rid, "b", b_nid); make_dir(right_roster, right_markings, right_rid, right_rid, "a", a_nid); } @@ -2233,7 +2233,7 @@ struct multiple_name_plus_duplicate_name // b should have landed fine I(result.roster.get_node(file_path_internal("a"))->self == a_nid); I(result.roster.get_node(file_path_internal("b"))->self == b_nid); - check_dn_conflict(); + check_multiple_name_conflict(); } }; @@ -2247,13 +2247,13 @@ struct multiple_name_plus_orphan : publi b_nid = nis.next(); make_dir(left_roster, left_markings, old_rid, left_rid, "a", a_nid); make_dir(right_roster, right_markings, old_rid, right_rid, "b", b_nid); - make_dn_conflict("a/foo", "b/foo"); + make_multiple_name_conflict("a/foo", "b/foo"); } virtual void check() { I(result.roster.all_nodes().size() == 2); - check_dn_conflict(); + check_multiple_name_conflict(); } }; @@ -2267,7 +2267,7 @@ struct multiple_name_plus_directory_loop b_nid = nis.next(); make_dir(left_roster, left_markings, old_rid, old_rid, "a", a_nid); make_dir(right_roster, right_markings, old_rid, old_rid, "b", b_nid); - make_dn_conflict("a/foo", "b/foo"); + make_multiple_name_conflict("a/foo", "b/foo"); make_dir(left_roster, left_markings, old_rid, left_rid, "a/foo/b", b_nid); make_dir(right_roster, right_markings, old_rid, right_rid, "b/foo/a", a_nid); } @@ -2275,7 +2275,7 @@ struct multiple_name_plus_directory_loop virtual void check() { I(downcast_to_dir_t(result.roster.get_node(name_conflict_nid))->children.size() == 2); - check_dn_conflict(); + check_multiple_name_conflict(); } }; @@ -2290,14 +2290,14 @@ struct multiple_name_plus_invalid_name : right_roster.drop_detached_node(right_roster.detach_node(file_path())); safe_erase(right_markings, root_nid); make_dir(right_roster, right_markings, old_rid, right_rid, "", new_root_nid); - make_dn_conflict("new_root/_MTN", "foo"); + make_multiple_name_conflict("new_root/_MTN", "foo"); } virtual void check() { I(result.roster.root()->self == new_root_nid); I(result.roster.all_nodes().size() == 2); - check_dn_conflict(); + check_multiple_name_conflict(); } }; @@ -2320,7 +2320,8 @@ struct multiple_name_plus_missing_root : make_dir(right_roster, right_markings, old_rid, right_rid, "", right_root_nid); make_dir(right_roster, right_markings, old_rid, right_rid, "left_root", left_root_nid); } - void check_helper(multiple_name_conflict const & left_c, multiple_name_conflict const & right_c) + void check_helper(multiple_name_conflict const & left_c, + multiple_name_conflict const & right_c) { I(left_c.nid == left_root_nid); I(left_c.left == make_pair(the_null_node, path_component())); ============================================================ --- tests/conflict_messages/__driver__.lua 1af78d5744833cc37c601e2f9c24638cb31f45ea +++ tests/conflict_messages/__driver__.lua c7e54a78d0aa9d810198584d02251278d8b53db2 @@ -33,6 +33,9 @@ check(qgrep("conflict: missing root dire check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: missing root directory", "stderr")) +check(mtn("explicit_merge", first, second, "missing"), 1, false, true) +check(qgrep("conflict: missing root directory", "stderr")) + check(mtn("merge", "--branch", "missing"), 1, false, true) check(qgrep("conflict: missing root directory", "stderr")) @@ -74,6 +77,9 @@ check(qgrep("conflict: invalid name", "s check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: invalid name", "stderr")) +check(mtn("explicit_merge", first, second, "invalid-add"), 1, false, true) +check(qgrep("conflict: invalid name", "stderr")) + check(mtn("merge", "--branch", "invalid-add"), 1, false, true) check(qgrep("conflict: invalid name", "stderr")) @@ -114,6 +120,9 @@ check(qgrep("conflict: invalid name", "s check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: invalid name", "stderr")) +check(mtn("explicit_merge", first, second, "invalid-rename"), 1, false, true) +check(qgrep("conflict: invalid name", "stderr")) + check(mtn("merge", "--branch", "invalid-rename"), 1, false, true) check(qgrep("conflict: invalid name", "stderr")) @@ -157,6 +166,9 @@ check(qgrep("conflict: directory loop", check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: directory loop", "stderr")) +check(mtn("explicit_merge", first, second, "loop"), 1, false, true) +check(qgrep("conflict: directory loop", "stderr")) + check(mtn("merge", "--branch", "loop"), 1, false, true) check(qgrep("conflict: directory loop", "stderr")) @@ -202,6 +214,9 @@ check(qgrep("conflict: orphaned file", " check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: orphaned file", "stderr")) +check(mtn("explicit_merge", first, second, "orphaned-add"), 1, false, true) +check(qgrep("conflict: orphaned file", "stderr")) + check(mtn("merge", "--branch", "orphaned-add"), 1, false, true) check(qgrep("conflict: orphaned file", "stderr")) @@ -246,6 +261,9 @@ check(qgrep("conflict: orphaned file", " check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: orphaned file", "stderr")) +check(mtn("explicit_merge", first, second, "orphaned-rename"), 1, false, true) +check(qgrep("conflict: orphaned file", "stderr")) + check(mtn("merge", "--branch", "orphaned-rename"), 1, false, true) check(qgrep("conflict: orphaned file", "stderr")) @@ -283,6 +301,9 @@ check(qgrep("conflict: multiple names", check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: multiple names", "stderr")) +check(mtn("explicit_merge", first, second, "multiple"), 1, false, true) +check(qgrep("conflict: multiple names", "stderr")) + check(mtn("merge", "--branch", "multiple"), 1, false, true) check(qgrep("conflict: multiple names", "stderr")) @@ -324,6 +345,9 @@ check(qgrep("conflict: duplicate name", check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: duplicate name", "stderr")) +check(mtn("explicit_merge", first, second, "duplicate-adds"), 1, false, true) +check(qgrep("conflict: duplicate name", "stderr")) + check(mtn("merge", "--branch", "duplicate-adds"), 1, false, true) check(qgrep("conflict: duplicate name", "stderr")) @@ -362,6 +386,9 @@ check(qgrep("conflict: duplicate name", check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: duplicate name", "stderr")) +check(mtn("explicit_merge", first, second, "duplicate-renames"), 1, false, true) +check(qgrep("conflict: duplicate name", "stderr")) + check(mtn("merge", "--branch", "duplicate-renames"), 1, false, true) check(qgrep("conflict: duplicate name", "stderr")) @@ -399,6 +426,9 @@ check(qgrep("conflict: duplicate name", check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: duplicate name", "stderr")) +check(mtn("explicit_merge", first, second, "duplicate-add-rename"), 1, false, true) +check(qgrep("conflict: duplicate name", "stderr")) + check(mtn("merge", "--branch", "duplicate-add-rename"), 1, false, true) check(qgrep("conflict: duplicate name", "stderr")) @@ -441,6 +471,9 @@ check(qgrep("conflict: multiple values f check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: multiple values for attribute", "stderr")) +check(mtn("explicit_merge", first, second, "attribute-attached"), 1, false, true) +check(qgrep("conflict: multiple values for attribute", "stderr")) + check(mtn("merge", "--branch", "attribute-attached"), 1, false, true) check(qgrep("conflict: multiple values for attribute", "stderr")) @@ -457,6 +490,8 @@ remove("foo") remove("_MTN") check(mtn("setup", ".", "--branch", "attribute-detached"), 0, false, false) remove("foo") +remove("bar") +remove("baz") addfile("foo", "attribute foo detached") check(mtn("attr", "set", "foo", "attr1", "value1"), 0, false, false) @@ -485,6 +520,9 @@ check(qgrep("conflict: multiple values f check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: multiple values for attribute", "stderr")) +check(mtn("explicit_merge", first, second, "attribute-detached"), 1, false, true) +check(qgrep("conflict: multiple values for attribute", "stderr")) + check(mtn("merge", "--branch", "attribute-detached"), 1, false, true) check(qgrep("conflict: multiple values for attribute", "stderr")) @@ -531,6 +569,9 @@ check(qgrep("conflict: content conflict check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: content conflict on file", "stderr")) +check(mtn("explicit_merge", first, second, "content-attached"), 1, false, true) +check(qgrep("conflict: content conflict on file", "stderr")) + check(mtn("merge", "--branch", "content-attached"), 1, false, true) check(qgrep("conflict: content conflict on file", "stderr")) @@ -571,6 +612,9 @@ check(qgrep("conflict: content conflict check(mtn("show_conflicts", first, second), 0, false, true) check(qgrep("conflict: content conflict on file", "stderr")) +check(mtn("explicit_merge", first, second, "content-detached"), 1, false, true) +check(qgrep("conflict: content conflict on file", "stderr")) + check(mtn("merge", "--branch", "content-detached"), 1, false, true) check(qgrep("conflict: content conflict on file", "stderr"))