# # # add_dir "tests/pluck_basics" # # add_file "tests/pluck_basics/__driver__.lua" # content [1c8172760fd4da3eb1f8b5b10132ee0ff2b75426] # # patch "cmd_merging.cc" # from [72a355cbf0cc7d06dc3c320f1335b53ca34c2d70] # to [53b98e970d76db48b171fdcee4450b54dcc7bde0] # # patch "testsuite.lua" # from [124e9b129be94555e7697d500d062074182114c1] # to [d905626236ef9c395cb971c3e592cfe56c704015] # # patch "work.cc" # from [cb297d3eae1d559e1fd90bb91b3e7f332cecce01] # to [05710dd0c0854ce19635a8e78178472d64491031] # ============================================================ --- tests/pluck_basics/__driver__.lua 1c8172760fd4da3eb1f8b5b10132ee0ff2b75426 +++ tests/pluck_basics/__driver__.lua 1c8172760fd4da3eb1f8b5b10132ee0ff2b75426 @@ -0,0 +1,42 @@ +mtn_setup() + +addfile("testfile", "1\n2\n3\n4\n5\n") +commit() +root_rev = base_revision() + +writefile("testfile", "1-changed\n2\n3\n4\n5\n") +commit() +first_rev = base_revision() + +writefile("testfile", "1-changed\n2\n3-changed\n4\n5\n") +addfile("somefile", "blah blah\n") +commit() +second_rev = base_revision() + +revert_to(root_rev) +remove("somefile") +check(mtn("rename", "-e", "testfile", "otherfile"), 0, false, false) +writefile("otherfile", "1\n2\n3\n4\n5-changed\n") + +check(mtn("pluck", "-r", second_rev), 0, false, false) +newtext = readfile("otherfile") +check(newtext == "1\n2\n3-changed\n4\n5-changed\n") +check(readfile("somefile") == "blah blah\n") + +check(mtn("pluck", "-r", second_rev, "-r", first_rev), 0, false, false) +newtext = readfile("otherfile") +check(newtext == "1\n2\n3\n4\n5-changed\n") +-- this should _not_ have deleted "somefile", even though the second->first +-- transition deletes "somefile", because the identity link between these two +-- files with the name "somefile" has been broken. +check(exists("somefile")) + +-- should get a conflict on the two "somefile" adds +check(mtn("pluck", "-r", root_rev, "-r", second_rev), 1, false, false) + +check(mtn("drop", "-e", "somefile"), 0, false, false) +-- now it should work again +check(mtn("pluck", "-r", root_rev, "-r", second_rev), 0, false, false) +newtext = readfile("otherfile") +check(newtext == "1-changed\n2\n3-changed\n4\n5-changed\n") +check(readfile("somefile") == "blah blah\n") ============================================================ --- cmd_merging.cc 72a355cbf0cc7d06dc3c320f1335b53ca34c2d70 +++ cmd_merging.cc 53b98e970d76db48b171fdcee4450b54dcc7bde0 @@ -672,19 +672,22 @@ // Get the FROM roster and markings shared_ptr from_roster = shared_ptr(new roster_t()); + MM(*from_roster); marking_map from_markings; app.db.get_roster(from_rid, *from_roster, from_markings); // Get the FROM->WORKING and FROM->TO csets, and also the base roster // and working rid while we're at it cset from_to_working, from_to_to; - roster_t base_roster; + MM(from_to_working); + MM(from_to_to); + roster_t base_roster; MM(base_roster); revision_id working_rid; { // Get the workspace stuff temp_node_id_source nis; revision_id working_rid; - roster_t working_true_roster, base_roster; + roster_t working_true_roster; get_base_and_current_roster_shape(base_roster, working_true_roster, nis, app); update_current_roster_from_filesystem(working_true_roster, app); @@ -708,6 +711,8 @@ // compatible nids. temp_node_id_source nis; roster_t working_roster, to_roster; + MM(working_roster); + MM(to_roster); marking_map working_markings, to_markings; make_roster_for_base_plus_cset(from_rid, from_to_working, working_rid, @@ -744,6 +749,8 @@ // we apply the working to merged cset to the workspace // and write the cset from the base to merged roster in _MTN/work cset update, remaining; + MM(update); + MM(remaining); make_cset(working_roster, merged_roster, update); make_cset(base_roster, merged_roster, remaining); ============================================================ --- testsuite.lua 124e9b129be94555e7697d500d062074182114c1 +++ testsuite.lua d905626236ef9c395cb971c3e592cfe56c704015 @@ -645,3 +645,4 @@ table.insert(tests, "ls_unknown_of_unknown_subdir") table.insert(tests, "automate_branches") table.insert(tests, "merge_conflict_with_no_lca") +table.insert(tests, "pluck_basics") ============================================================ --- work.cc cb297d3eae1d559e1fd90bb91b3e7f332cecce01 +++ work.cc 05710dd0c0854ce19635a8e78178472d64491031 @@ -1038,7 +1038,7 @@ file_id curr_id(curr_id_raw); E(curr_id == old_id, F("content of file '%s' has changed, not overwriting") % pth_unsplit); - P(F("updating %s") % pth_unsplit); + P(F("modifying %s") % pth_unsplit); file_data dat; source.get_file_content(new_id, dat);