# # # patch "cmd_ws_commit.cc" # from [7bf89bc93737f48a23e7aafe729b09aa99264f42] # to [9cc4e1d34ff79de8fc704a4a4472433e947a35fe] # # patch "tests/fetching_nonexistent_entry_from_children_bug/__driver__.lua" # from [1363ec0ba98d3102cc4947749bc1843f15210a2a] # to [4b82854d39018a121885571307a4747b79f0d6e0] # # patch "tests/restricted_diff_bug/__driver__.lua" # from [a647180dc43752bed9e934c8aaa9eae8d3003b91] # to [0083013dbf5d0fc5b1f7fdb9fc62d090b684f061] # # patch "tests/restrictions_with_renames_and_adds/__driver__.lua" # from [7a202360833e8a12a30b62e76df826cd0589bcac] # to [6cfd296484ee2463c0bd86591f3736cdae49cc3f] # ============================================================ --- cmd_ws_commit.cc 7bf89bc93737f48a23e7aafe729b09aa99264f42 +++ cmd_ws_commit.cc 9cc4e1d34ff79de8fc704a4a4472433e947a35fe @@ -150,7 +150,7 @@ CMD(revert, "revert", "", CMD_REF(worksp options::opts::depth | options::opts::exclude | options::opts::missing) { roster_t old_roster, new_roster; - cset included, excluded; + cset preserved; N(app.opts.missing || !args.empty() || !app.opts.exclude_patterns.empty(), F("you must pass at least one path to 'revert' (perhaps '.')")); @@ -200,19 +200,26 @@ CMD(revert, "revert", "", CMD_REF(worksp old_roster, new_roster, app); } + // We want the restricted roster to include all the changes + // that are to be *kept*. Then, the changes to revert are those + // from the new roster *back* to the restricted roster + roster_t restricted_roster; - make_restricted_roster(old_roster, new_roster, restricted_roster, + make_restricted_roster(new_roster, old_roster, restricted_roster, mask); - make_cset(old_roster, restricted_roster, included); - make_cset(restricted_roster, new_roster, excluded); + make_cset(old_roster, restricted_roster, preserved); - // The included cset will be thrown away (reverted) leaving the - // excluded cset pending in MTN/work which must be valid against the - // old roster. + // Leave the preserved cset pending in MTN/revision + // which must be valid against the old roster. - check_restricted_cset(old_roster, excluded); + check_restricted_cset(old_roster, preserved); + // if/when reverting through the editable_tree interface use + // make_cset(new_roster, restricted_roster, reverted); + // to get a cset that gets us back to the restricted roster + // from the current workspace roster + node_map const & nodes = old_roster.all_nodes(); for (node_map::const_iterator i = nodes.begin(); i != nodes.end(); ++i) @@ -270,7 +277,7 @@ CMD(revert, "revert", "", CMD_REF(worksp // around. revision_t remaining; - make_revision_for_workspace(parent_id(parents.begin()), excluded, remaining); + make_revision_for_workspace(parent_id(parents.begin()), preserved, remaining); // Race. app.work.put_work_rev(remaining); ============================================================ --- tests/fetching_nonexistent_entry_from_children_bug/__driver__.lua 1363ec0ba98d3102cc4947749bc1843f15210a2a +++ tests/fetching_nonexistent_entry_from_children_bug/__driver__.lua 4b82854d39018a121885571307a4747b79f0d6e0 @@ -23,5 +23,5 @@ check(mtn("rename", "foo", "baz/foo"), 0 -- a) the foo file is not changed -- b) we only restrict on bar -- c) we only restrict on baz -xfail(mtn("commit", "baz/foo"), 1, false, false) +check(mtn("commit", "-m", "wow", "baz/foo"), 1, false, false) ============================================================ --- tests/restricted_diff_bug/__driver__.lua a647180dc43752bed9e934c8aaa9eae8d3003b91 +++ tests/restricted_diff_bug/__driver__.lua 0083013dbf5d0fc5b1f7fdb9fc62d090b684f061 @@ -48,5 +48,5 @@ check(mtn("diff"), 0, false, false) check(mtn("mv", "dir1", "dir2"), 0, false, false) writefile("dir2/test.txt", "boohoo") check(mtn("diff"), 0, false, false) -xfail(mtn("diff", "dir2/test.txt"), 0, false, false) +check(mtn("diff", "dir2/test.txt"), 1, false, false) ============================================================ --- tests/restrictions_with_renames_and_adds/__driver__.lua 7a202360833e8a12a30b62e76df826cd0589bcac +++ tests/restrictions_with_renames_and_adds/__driver__.lua 6cfd296484ee2463c0bd86591f3736cdae49cc3f @@ -51,6 +51,6 @@ check(mtn("rename", "B", "newA/B"), 0, f commit() check(mtn("rename", "A", "newA"), 0, false, false) check(mtn("rename", "B", "newA/B"), 0, false, false) +-- these were once nonsensical, but should now do something "reasonable" +check(mtn("diff", "newA/B"), 0, false, false) +check(mtn("commit", "-m", "crazy", "newA/B"), 0, false, false) --- these are nonsensical, and should error out gracefully -check(mtn("diff", "newA/B"), 1, false, false) -check(mtn("commit", "newA/B"), 1, false, false)