# # # patch "ChangeLog" # from [e49d9cea0ea66e2c20628a77999e4d622930ced5] # to [baa49448050650d3748b546c9b5dc2199eca35fb] # # patch "cmd_merging.cc" # from [3199f210b63b2f88248d416f45fad9cb7494229b] # to [f6ac6ed245ff4603bcfc8d1197e1e7b57f0f8de8] # # patch "cmd_ws_commit.cc" # from [90bed7e987225e0705db556a3c383bc459b4f440] # to [bfe3d967696acea08b7b1ba51d42333f56636eaa] # # patch "tests/two_parent_workspace_commands_that_fail/__driver__.lua" # from [4ac3985a30348b3d51c911af46749ba9e30ddca8] # to [d48af1c64a6ef41df1c6ed6cd0e355ee675af624] # ============================================================ --- ChangeLog e49d9cea0ea66e2c20628a77999e4d622930ced5 +++ ChangeLog baa49448050650d3748b546c9b5dc2199eca35fb @@ -1,7 +1,9 @@ 2007-02-07 Zack Weinberg * cmd_diff_log.cc (prepare_diff): Handle multi-parent workspaces gracefully. + * cmd_merging.cc (update): Likewise. + * cmd_ws_commit.cc (revert): Likewise. * tests/two_parent_workspace_commands_that_fail * tests/two_parent_workspace_pluck: New tests (expected to fail). ============================================================ --- cmd_merging.cc 3199f210b63b2f88248d416f45fad9cb7494229b +++ cmd_merging.cc f6ac6ed245ff4603bcfc8d1197e1e7b57f0f8de8 @@ -140,10 +140,13 @@ CMD(update, N_("workspace"), "", app.require_workspace(); // Figure out where we are + parent_map parents; + app.work.get_parent_rosters(parents); - revision_id old_rid; - app.work.get_revision_id(old_rid); + N(parents.size() == 1, + F("this command can only be used in a single-parent workspace")); + revision_id old_rid = parents.begin()->first; N(!null_id(old_rid), F("this workspace is a new project; cannot update")); @@ -223,10 +226,10 @@ CMD(update, N_("workspace"), "", temp_node_id_source nis; // Get the OLD and WORKING rosters - shared_ptr old_roster = shared_ptr(new roster_t()); + database::roster_t_cp old_roster = parents.begin()->second.first; MM(*old_roster); roster_t working_roster; MM(working_roster); - app.work.get_base_and_current_roster_shape(*old_roster, working_roster, nis); + app.work.get_current_roster_shape(working_roster, nis); app.work.update_current_roster_from_filesystem(working_roster); // Get the CHOSEN roster ============================================================ --- cmd_ws_commit.cc 90bed7e987225e0705db556a3c383bc459b4f440 +++ cmd_ws_commit.cc bfe3d967696acea08b7b1ba51d42333f56636eaa @@ -80,7 +80,6 @@ CMD(revert, N_("workspace"), N_("[PATH]. N_("revert file(s), dir(s) or entire workspace (\".\")"), options::opts::depth | options::opts::exclude | options::opts::missing) { - temp_node_id_source nis; roster_t old_roster, new_roster; cset included, excluded; @@ -89,9 +88,19 @@ CMD(revert, N_("workspace"), N_("[PATH]. app.require_workspace(); - app.work.get_base_and_current_roster_shape(old_roster, new_roster, nis); + { + parent_map parents; + app.work.get_parent_rosters(parents); + N(parents.size() == 1, + F("this command can only be used in a single-parent workspace")); + old_roster = *(parents.begin()->second.first); - node_restriction mask(args_to_paths(args), args_to_paths(app.opts.exclude_patterns), + temp_node_id_source nis; + app.work.get_current_roster_shape(new_roster, nis); + } + + node_restriction mask(args_to_paths(args), + args_to_paths(app.opts.exclude_patterns), app.opts.depth, old_roster, new_roster, app); ============================================================ --- tests/two_parent_workspace_commands_that_fail/__driver__.lua 4ac3985a30348b3d51c911af46749ba9e30ddca8 +++ tests/two_parent_workspace_commands_that_fail/__driver__.lua d48af1c64a6ef41df1c6ed6cd0e355ee675af624 @@ -37,8 +37,9 @@ check(mtn("automate", "content_diff", "- check(mtn("diff", "-r", left), 0, false, nil) check(mtn("automate", "content_diff", "-r", right), 0, false, nil) -xfail(mtn("revert"), 1, nil, diag) -xfail(mtn("update"), 1, nil, diag) +-- revert and update: to where? +check(mtn("revert", "."), 1, nil, diag) +check(mtn("update"), 1, nil, diag) xfail(mtn("automate", "get_base_revision_id"), 1, nil, diag) xfail(mtn("automate", "inventory"), 1, nil, diag)