# # # add_file "tests/automate_show_conflicts/expected-multiple-names.stdout" # content [a99bb258bbc6163abb9536757671d21cc6d85e9f] # # patch "roster_merge.cc" # from [b4908780906e5d6cedcf8a9a45bbf152debf6912] # to [8e55c52922cb3850fef51f0e7c680b43de688503] # # patch "tests/automate_show_conflicts/expected-invalid-rename.stdout" # from [4c93b3d355de2514c2cd5933df3fde827929c7af] # to [d02d26164df0bcc9f1ef8fdb1837cbfa10c1b1d5] # # patch "tests/automate_show_conflicts/expected-orphaned-rename.stdout" # from [1d41ad105622b0f1d306717762e99631267e7b49] # to [ef25445ace7ea46983ce7db10b125d31896b2e28] # ============================================================ --- tests/automate_show_conflicts/expected-multiple-names.stdout a99bb258bbc6163abb9536757671d21cc6d85e9f +++ tests/automate_show_conflicts/expected-multiple-names.stdout a99bb258bbc6163abb9536757671d21cc6d85e9f @@ -0,0 +1,15 @@ + left [872b02c3aaa3b8ee6acf7e00e67108d5aaa8cb31] + right [bf62726ad7c36e553cb8906906866962786e52c0] +ancestor [560b97068441495b17d8924f6122a1c47213a08b] + + conflict "multiple names" + left_type "renamed file" + ancestor_name "foo" +ancestor_file_id [3dc9e2f630ea9c3e60e8947d41c4150b88340ea0] + left_name "bar" + left_file_id [3dc9e2f630ea9c3e60e8947d41c4150b88340ea0] + right_type "renamed file" + ancestor_name "foo" +ancestor_file_id [3dc9e2f630ea9c3e60e8947d41c4150b88340ea0] + right_name "baz" + right_file_id [3dc9e2f630ea9c3e60e8947d41c4150b88340ea0] ============================================================ --- roster_merge.cc b4908780906e5d6cedcf8a9a45bbf152debf6912 +++ roster_merge.cc 8e55c52922cb3850fef51f0e7c680b43de688503 @@ -183,6 +183,7 @@ namespace { namespace syms { + symbol const ancestor_file_id("ancestor_file_id"); symbol const ancestor_name("ancestor_name"); symbol const conflict("conflict"); symbol const left_file_id("left_file_id"); @@ -258,60 +259,73 @@ put_rename_conflict_left (basic_io::stan static void put_rename_conflict_left (basic_io::stanza & st, content_merge_adaptor & adaptor, - node_id const nid, - file_path const & ancestor_name) + node_id const nid) { content_merge_database_adaptor & db_adaptor (dynamic_cast(adaptor)); - boost::shared_ptr roster(db_adaptor.rosters[db_adaptor.left_rid]); - file_path name; + boost::shared_ptr ancestor_roster(db_adaptor.rosters[db_adaptor.lca]); + I(0 != ancestor_roster); + boost::shared_ptr left_roster(db_adaptor.rosters[db_adaptor.left_rid]); - roster->get_name (nid, name); + file_path ancestor_name; + file_path left_name; - if (file_type == get_type (*roster, nid)) + ancestor_roster->get_name (nid, ancestor_name); + left_roster->get_name (nid, left_name); + + if (file_type == get_type (*left_roster, nid)) { - file_id fid; - db_adaptor.db.get_file_content (db_adaptor.left_rid, nid, fid); st.push_str_pair(syms::left_type, "renamed file"); + file_id ancestor_fid; + db_adaptor.db.get_file_content (db_adaptor.lca, nid, ancestor_fid); st.push_str_pair(syms::ancestor_name, ancestor_name.as_external()); - st.push_str_pair(syms::left_name, name.as_external()); - st.push_hex_pair(syms::left_file_id, fid.inner()); + st.push_hex_pair(syms::ancestor_file_id, ancestor_fid.inner()); + file_id left_fid; + db_adaptor.db.get_file_content (db_adaptor.left_rid, nid, left_fid); + st.push_str_pair(syms::left_name, left_name.as_external()); + st.push_hex_pair(syms::left_file_id, left_fid.inner()); } else { st.push_str_pair(syms::left_type, "renamed directory"); st.push_str_pair(syms::ancestor_name, ancestor_name.as_external()); - st.push_str_pair(syms::left_name, name.as_external()); + st.push_str_pair(syms::left_name, left_name.as_external()); } } static void put_rename_conflict_right (basic_io::stanza & st, content_merge_adaptor & adaptor, - node_id const nid, - file_path const & ancestor_name) + node_id const nid) { content_merge_database_adaptor & db_adaptor (dynamic_cast(adaptor)); - boost::shared_ptr roster(db_adaptor.rosters[db_adaptor.right_rid]); - I(0 != roster); + boost::shared_ptr ancestor_roster(db_adaptor.rosters[db_adaptor.lca]); + I(0 != ancestor_roster); + boost::shared_ptr right_roster(db_adaptor.rosters[db_adaptor.right_rid]); + I(0 != right_roster); - file_path name; + file_path ancestor_name; + file_path right_name; - roster->get_name (nid, name); + ancestor_roster->get_name (nid, ancestor_name); + right_roster->get_name (nid, right_name); - if (file_type == get_type (*roster, nid)) + if (file_type == get_type (*right_roster, nid)) { - file_id fid; - db_adaptor.db.get_file_content (db_adaptor.right_rid, nid, fid); st.push_str_pair(syms::right_type, "renamed file"); + file_id ancestor_fid; + db_adaptor.db.get_file_content (db_adaptor.lca, nid, ancestor_fid); st.push_str_pair(syms::ancestor_name, ancestor_name.as_external()); - st.push_str_pair(syms::right_name, name.as_external()); - st.push_hex_pair(syms::right_file_id, fid.inner()); + st.push_hex_pair(syms::ancestor_file_id, ancestor_fid.inner()); + file_id right_fid; + db_adaptor.db.get_file_content (db_adaptor.right_rid, nid, right_fid); + st.push_str_pair(syms::right_name, right_name.as_external()); + st.push_hex_pair(syms::right_file_id, right_fid.inner()); } else { st.push_str_pair(syms::right_type, "renamed directory"); st.push_str_pair(syms::ancestor_name, ancestor_name.as_external()); - st.push_str_pair(syms::right_name, name.as_external()); + st.push_str_pair(syms::right_name, right_name.as_external()); } } @@ -464,7 +478,7 @@ roster_merge_result::report_invalid_name if (parent_lca_roster->has_node(conflict.nid)) { if (basic_io) - put_rename_conflict_right (st, adaptor, conflict.nid, lca_name); + put_rename_conflict_right (st, adaptor, conflict.nid); else P(F("'%s' renamed to '%s' on the right") % lca_name % right_name); @@ -545,28 +559,28 @@ roster_merge_result::report_directory_lo if (left_name != lca_name) if (basic_io) - put_rename_conflict_left (st, adaptor, conflict.nid, lca_name); + put_rename_conflict_left (st, adaptor, conflict.nid); else P(F("'%s' renamed to '%s' on the left") % lca_name % left_name); if (right_name != lca_name) if (basic_io) - put_rename_conflict_right (st, adaptor, conflict.nid, lca_name); + put_rename_conflict_right (st, adaptor, conflict.nid); else P(F("'%s' renamed to '%s' on the right") % lca_name % right_name); if (left_parent_name != lca_parent_name) if (basic_io) - put_rename_conflict_left (st, adaptor, conflict.parent_name.first, lca_parent_name); + put_rename_conflict_left (st, adaptor, conflict.parent_name.first); else P(F("'%s' renamed to '%s' on the left") % lca_parent_name % left_parent_name); if (right_parent_name != lca_parent_name) if (basic_io) - put_rename_conflict_right (st, adaptor, conflict.parent_name.first, lca_parent_name); + put_rename_conflict_right (st, adaptor, conflict.parent_name.first); else P(F("'%s' renamed to '%s' on the right") % lca_parent_name % right_parent_name); @@ -641,7 +655,7 @@ roster_merge_result::report_orphaned_nod if (parent_lca_roster->has_node(conflict.nid)) { if (basic_io) - put_rename_conflict_left (st, adaptor, conflict.nid, lca_name); + put_rename_conflict_left (st, adaptor, conflict.nid); else if (type == file_type) P(F("file '%s' was renamed from '%s' on the left") @@ -738,8 +752,8 @@ roster_merge_result::report_multiple_nam if (basic_io) { st.push_str_pair(syms::conflict, "multiple names"); - put_rename_conflict_left (st, adaptor, conflict.nid, lca_name); - put_rename_conflict_right (st, adaptor, conflict.nid, lca_name); + put_rename_conflict_left (st, adaptor, conflict.nid); + put_rename_conflict_right (st, adaptor, conflict.nid); } else { @@ -754,6 +768,8 @@ roster_merge_result::report_multiple_nam P(F("renamed to '%s' on the right") % right_name); } + if (basic_io) + put_stanza(st, output); } } @@ -833,7 +849,7 @@ roster_merge_result::report_duplicate_na left_lca_roster->get_name(left_nid, left_lca_name); if (basic_io) - put_rename_conflict_left (st, adaptor, left_nid, left_lca_name); + put_rename_conflict_left (st, adaptor, left_nid); else if (left_type == file_type) P(F("renamed from file '%s' on the left") % left_lca_name); @@ -867,7 +883,7 @@ roster_merge_result::report_duplicate_na } if (basic_io) - put_rename_conflict_right (st, adaptor, right_nid, right_lca_name); + put_rename_conflict_right (st, adaptor, right_nid); else { if (right_type == file_type) @@ -884,7 +900,7 @@ roster_merge_result::report_duplicate_na right_lca_roster->get_name(right_nid, right_lca_name); if (basic_io) - put_rename_conflict_left (st, adaptor, left_nid, left_lca_name); + put_rename_conflict_left (st, adaptor, left_nid); else { if (left_type == file_type) @@ -894,7 +910,7 @@ roster_merge_result::report_duplicate_na } if (basic_io) - put_rename_conflict_right (st, adaptor, right_nid, right_lca_name); + put_rename_conflict_right (st, adaptor, right_nid); else { if (right_type == file_type) ============================================================ --- tests/automate_show_conflicts/expected-invalid-rename.stdout 4c93b3d355de2514c2cd5933df3fde827929c7af +++ tests/automate_show_conflicts/expected-invalid-rename.stdout d02d26164df0bcc9f1ef8fdb1837cbfa10c1b1d5 @@ -1,11 +1,12 @@ ancestor [e7f711a68627ccae4aded5907fc805 left [2bf9335ed387a7f1f082b0bc5ecdffa303d8393f] right [459c32f4c7b4676d47e23aff2bd67c1e2eae5f09] ancestor [e7f711a68627ccae4aded5907fc80516ea1215fd] + conflict "invalid name" + left_type "pivoted root" + ancestor_name "foo" + right_type "renamed file" + ancestor_name "bad/_MTN" +ancestor_file_id [629d9e5d254241abf4b46f108fb53189e314e41d] + right_name "foo/_MTN" + right_file_id [629d9e5d254241abf4b46f108fb53189e314e41d] - conflict "invalid name" - left_type "pivoted root" -ancestor_name "foo" - right_type "renamed file" -ancestor_name "bad/_MTN" - right_name "foo/_MTN" -right_file_id [629d9e5d254241abf4b46f108fb53189e314e41d] ============================================================ --- tests/automate_show_conflicts/expected-orphaned-rename.stdout 1d41ad105622b0f1d306717762e99631267e7b49 +++ tests/automate_show_conflicts/expected-orphaned-rename.stdout ef25445ace7ea46983ce7db10b125d31896b2e28 @@ -1,11 +1,12 @@ ancestor [b5f52dbc0dc530adffbdd140a7de5b left [4ceae2a74d9d0d7341d2cd01a71c9e84eb1fefa7] right [16a19ace8ec26cd2ed13c7e727a3021e82a2204f] ancestor [b5f52dbc0dc530adffbdd140a7de5b129cf74f29] + conflict "orphaned file" + right_type "deleted directory" + ancestor_name "foo" + left_type "renamed file" + ancestor_name "bar" +ancestor_file_id [ac4c6d06436632e017bb7d3ea241734e8899f8ce] + left_name "foo/baz" + left_file_id [ac4c6d06436632e017bb7d3ea241734e8899f8ce] - conflict "orphaned file" - right_type "deleted directory" -ancestor_name "foo" - left_type "renamed file" -ancestor_name "bar" - left_name "foo/baz" - left_file_id [ac4c6d06436632e017bb7d3ea241734e8899f8ce]