# # # add_dir "tests/two_parent_workspace_inodeprints" # # add_file "tests/two_parent_workspace_inodeprints/__driver__.lua" # content [20474a5b7729e2cc271b140b967e28aa2506fc90] # # patch "ChangeLog" # from [f8a7477a5565d0a2ae1f442776fefbf57c84eac7] # to [f27f757d1843f8441951490e64aab716b3add816] # # patch "testsuite.lua" # from [f92a7dcff9079237855ae6c1f0c385a217b0873b] # to [932d4fa81caea0309eb6c20542b63d6f94056eb3] # # patch "work.cc" # from [20cc76bbc742cd22f37cf5043f55a46c2cef2f94] # to [1ec7ff6b263d869ba1e66d4c3716fd7b0c28a48e] # ============================================================ --- tests/two_parent_workspace_inodeprints/__driver__.lua 20474a5b7729e2cc271b140b967e28aa2506fc90 +++ tests/two_parent_workspace_inodeprints/__driver__.lua 20474a5b7729e2cc271b140b967e28aa2506fc90 @@ -0,0 +1,37 @@ +mtn_setup() + +addfile("foo", "ancestor\nancestor") +commit() +anc = base_revision() + +writefile("foo", "left\nancestor") +addfile("left", "only on left") +commit() +other = base_revision() +remove("left") + +revert_to(anc) +writefile("foo", "ancestor\nright") +addfile("right", "only on right") +commit() + +check(mtn("merge_into_workspace", other), 0, false, false) + +-- check that we've got the expected initial status +check(mtn("status"), 0, true, false) +check(qgrep("patched[ ]\+foo", "stdout")) + +-- enable inodeprints +writefile("_MTN/inodeprints") + +check(mtn("status"), 0, true, false) +check(qgrep("patched[ ]\+foo", "stdout")) + +addfile("bar", "this is bar") +sleep(5) + +check(fsize("_MTN/inodeprints") == 0) + +commit() + +check(fsize("_MTN/inodeprints") ~= 0) ============================================================ --- ChangeLog f8a7477a5565d0a2ae1f442776fefbf57c84eac7 +++ ChangeLog f27f757d1843f8441951490e64aab716b3add816 @@ -1,3 +1,10 @@ +2007-02-09 Matthew Gregan + + * work.cc (maybe_update_inodeprints): Update for multi-parent + workspace. + * tests/two_parent_workspace_inodeprints: New test. + * testsuite.lua: Add it. + 2007-02-07 Zack Weinberg * work.cc (perform_rename): Work in a two-parent workspace. ============================================================ --- testsuite.lua f92a7dcff9079237855ae6c1f0c385a217b0873b +++ testsuite.lua 932d4fa81caea0309eb6c20542b63d6f94056eb3 @@ -715,3 +715,4 @@ table.insert(tests, "two_parent_workspac table.insert(tests, "two_parent_workspace_add_drop_rename") table.insert(tests, "two_parent_workspace_attrs") table.insert(tests, "two_parent_workspace_pivot_root") +table.insert(tests, "two_parent_workspace_inodeprints") ============================================================ --- work.cc 20cc76bbc742cd22f37cf5043f55a46c2cef2f94 +++ work.cc 1ec7ff6b263d869ba1e66d4c3716fd7b0c28a48e @@ -434,34 +434,42 @@ workspace::maybe_update_inodeprints() inodeprint_map ipm_new; temp_node_id_source nis; - roster_t old_roster, new_roster; + roster_t new_roster; - get_base_and_current_roster_shape(old_roster, new_roster, nis); + get_current_roster_shape(new_roster, nis); update_current_roster_from_filesystem(new_roster); + parent_map parents; + get_parent_rosters(parents); + node_map const & new_nodes = new_roster.all_nodes(); for (node_map::const_iterator i = new_nodes.begin(); i != new_nodes.end(); ++i) { node_id nid = i->first; - if (old_roster.has_node(nid)) + for (parent_map::const_iterator parent = parents.begin(); + parent != parents.end(); ++parent) { - node_t old_node = old_roster.get_node(nid); - if (is_file_t(old_node)) + roster_t const parent_ros = parent_roster(parent); + if (parent_ros.has_node(nid)) { - node_t new_node = i->second; - I(is_file_t(new_node)); + node_t old_node = parent_ros.get_node(nid); + if (is_file_t(old_node)) + { + node_t new_node = i->second; + I(is_file_t(new_node)); - file_t old_file = downcast_to_file_t(old_node); - file_t new_file = downcast_to_file_t(new_node); + file_t old_file = downcast_to_file_t(old_node); + file_t new_file = downcast_to_file_t(new_node); - if (new_file->content == old_file->content) - { - split_path sp; - new_roster.get_name(nid, sp); - file_path fp(sp); - hexenc ip; - if (inodeprint_file(fp, ip)) - ipm_new.insert(inodeprint_entry(fp, ip)); + if (new_file->content == old_file->content) + { + split_path sp; + new_roster.get_name(nid, sp); + file_path fp(sp); + hexenc ip; + if (inodeprint_file(fp, ip)) + ipm_new.insert(inodeprint_entry(fp, ip)); + } } } }