# # # patch "roster.cc" # from [069744e4971f2031ceeb1efcd9b0f9b5a7c3ed5f] # to [7a8b8cd151e3e0f231af809c2c8c32654e3255d6] # ============================================================ --- roster.cc 069744e4971f2031ceeb1efcd9b0f9b5a7c3ed5f +++ roster.cc 7a8b8cd151e3e0f231af809c2c8c32654e3255d6 @@ -2882,15 +2882,16 @@ s.insert(t); return s; } + + revision_id old_rid(string("0000000000000000000000000000000000000000")); + revision_id left_rid(string("1111111111111111111111111111111111111111")); + revision_id right_rid(string("2222222222222222222222222222222222222222")); + revision_id new_rid(string("3333333333333333333333333333333333333333")); } static void foo_mark_test() { - revision_id root_rid(string("0000000000000000000000000000000000000000")); - revision_id left_rid(string("1111111111111111111111111111111111111111")); - revision_id right_rid(string("2222222222222222222222222222222222222222")); - revision_id new_rid(string("3333333333333333333333333333333333333333")); file_id file_content(string("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); testing_node_id_source nis; roster_t left_roster; MM(left_roster); @@ -2906,8 +2907,8 @@ right_roster.create_dir_node(root_nid); right_roster.attach_node(root_nid, root_name); marking_t root_marking; - root_marking.birth_revision = root_rid; - root_marking.parent_name.insert(root_rid); + root_marking.birth_revision = old_rid; + root_marking.parent_name.insert(old_rid); safe_insert(left_markings, make_pair(root_nid, root_marking)); safe_insert(right_markings, make_pair(root_nid, root_marking)); @@ -2922,13 +2923,13 @@ right_roster.attach_node(file_nid, right_name); marking_t file_marking; - file_marking.birth_revision = root_rid; - file_marking.file_content.insert(root_rid); + file_marking.birth_revision = old_rid; + file_marking.file_content.insert(old_rid); // left - file_marking.parent_name.insert(left_rid); + file_marking.parent_name = singleton(left_rid); safe_insert(left_markings, make_pair(file_nid, file_marking)); // right - file_marking.parent_name.insert(right_rid); + file_marking.parent_name = singleton(right_rid); safe_insert(right_markings, make_pair(file_nid, file_marking)); cset left_cs; MM(left_cs); @@ -2950,17 +2951,90 @@ nis); I(safe_get(new_markings, root_nid) == root_marking); - I(safe_get(new_markings, file_nid).birth_revision == root_rid); + I(safe_get(new_markings, file_nid).birth_revision == old_rid); I(safe_get(new_markings, file_nid).parent_name == singleton(new_rid)); - I(safe_get(new_markings, file_nid).file_content == singleton(root_rid)); + I(safe_get(new_markings, file_nid).file_content == singleton(old_rid)); I(safe_get(new_markings, file_nid).attrs.empty()); } +static void +bar_mark_test() +{ + file_id file_content_left(string("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); + file_id file_content_right(string("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")); + file_id file_content_new(string("cccccccccccccccccccccccccccccccccccccccc")); + testing_node_id_source nis; + roster_t left_roster; MM(left_roster); + roster_t right_roster; MM(right_roster); + marking_map left_markings; MM(left_markings); + marking_map right_markings; MM(right_markings); + + split_path root_name; + file_path().split(root_name); + node_id root_nid = nis.next(); + left_roster.create_dir_node(root_nid); + left_roster.attach_node(root_nid, root_name); + right_roster.create_dir_node(root_nid); + right_roster.attach_node(root_nid, root_name); + marking_t root_marking; + root_marking.birth_revision = old_rid; + root_marking.parent_name.insert(old_rid); + safe_insert(left_markings, make_pair(root_nid, root_marking)); + safe_insert(right_markings, make_pair(root_nid, root_marking)); + + split_path name; + file_path_internal("foo").split(name); + node_id file_nid = nis.next(); + left_roster.create_file_node(file_content_left, file_nid); + left_roster.attach_node(file_nid, name); + right_roster.create_file_node(file_content_right, file_nid); + right_roster.attach_node(file_nid, name); + + marking_t file_marking; + file_marking.birth_revision = old_rid; + file_marking.parent_name.insert(old_rid); + // left + file_marking.file_content = singleton(left_rid); + safe_insert(left_markings, make_pair(file_nid, file_marking)); + // right + file_marking.file_content = singleton(right_rid); + safe_insert(right_markings, make_pair(file_nid, file_marking)); + + cset left_cs; MM(left_cs); + cset right_cs; MM(right_cs); + safe_insert(left_cs.deltas_applied, make_pair(name, + make_pair(file_content_left, + file_content_new))); + safe_insert(right_cs.deltas_applied, make_pair(name, + make_pair(file_content_right, + file_content_new))); + + set left_uncommon_ancestors, right_uncommon_ancestors; + left_uncommon_ancestors.insert(left_rid); + right_uncommon_ancestors.insert(right_rid); + + roster_t new_roster; MM(new_roster); + marking_map new_markings; MM(new_markings); + make_roster_for_merge(left_rid, left_roster, left_markings, left_cs, + left_uncommon_ancestors, + right_rid, right_roster, right_markings, right_cs, + right_uncommon_ancestors, + new_rid, new_roster, new_markings, + nis); + + I(safe_get(new_markings, root_nid) == root_marking); + I(safe_get(new_markings, file_nid).birth_revision == old_rid); + I(safe_get(new_markings, file_nid).parent_name == singleton(old_rid)); + I(safe_get(new_markings, file_nid).file_content == singleton(new_rid)); + I(safe_get(new_markings, file_nid).attrs.empty()); +} + void add_roster_tests(test_suite * suite) { I(suite); suite->add(BOOST_TEST_CASE(&foo_mark_test)); + suite->add(BOOST_TEST_CASE(&bar_mark_test)); suite->add(BOOST_TEST_CASE(&bad_attr_test)); suite->add(BOOST_TEST_CASE(&check_sane_roster_loop_test)); suite->add(BOOST_TEST_CASE(&check_sane_roster_test));