# # patch "ChangeLog" # from [00be67da78804afd4d1a75955b9b951e37c3ea2a] # to [4ce033ead67135a5abedd314c72a2c140041ff94] # # patch "tests/t_no_rename_overwrite.at" # from [345db00bfc31ac8c23f0735fe890c4d869e37448] # to [1fe86d8eeda1180521602e9b66628aadad9b75ac] # # patch "work.cc" # from [2edb3fc960fee8c34b1abb13dff648ec63eeb40f] # to [dd1b1800d78f63c9f5615622d7c638c01c2f7459] # --- ChangeLog +++ ChangeLog @@ -1,3 +1,13 @@ +2005-04-16 Derek Scherger + + * work.cc (known_preimage_path): rename to... + (known_path): this, since it's image agnostic + (build_deletions): update for renamed function + (build_rename): ensure rename source exists in current revision + and rename target does not exist in current revision + + * tests/t_no_rename_overwrite.at: un-XFAIL + 2005-04-16 Nathaniel Smith * ChangeLog: Fixup after merge. --- tests/t_no_rename_overwrite.at +++ tests/t_no_rename_overwrite.at @@ -1,9 +1,6 @@ AT_SETUP([rename cannot overwrite files]) MONOTONE_SETUP -# This test is a bug report. -AT_XFAIL_IF(true) - # "rename" needs to check that it isn't overwriting existing # files/directories. @@ -19,19 +16,18 @@ ADD_FILE("rename_dir/file", [bar bar ]) -AT_CHECK(MONOTONE rename rename_file target_file, [3], [ignore], [ignore]) -AT_CHECK(MONOTONE rename rename_file target_dir, [3], [ignore], [ignore]) -AT_CHECK(MONOTONE rename rename_dir target_file, [3], [ignore], [ignore]) -AT_CHECK(MONOTONE rename rename_dir target_dir, [3], [ignore], [ignore]) +AT_CHECK(MONOTONE rename unknown_file other_file, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE rename rename_file target_file, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE rename rename_file target_dir, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE rename rename_dir target_file, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE rename rename_dir target_dir, [1], [ignore], [ignore]) COMMIT(testbranch) -AT_CHECK(MONOTONE rename rename_file target_file, [0], [ignore], [ignore]) -AT_CHECK(MONOTONE rename rename_file target_dir, [0], [ignore], [ignore]) -AT_CHECK(MONOTONE rename rename_dir target_file, [0], [ignore], [ignore]) -AT_CHECK(MONOTONE rename rename_dir target_dir, [0], [ignore], [ignore]) +AT_CHECK(MONOTONE rename unknown_file other_file, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE rename rename_file target_file, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE rename rename_file target_dir, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE rename rename_dir target_file, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE rename rename_dir target_dir, [1], [ignore], [ignore]) -# this should fail -COMMIT(testbranch) - AT_CLEANUP --- work.cc +++ work.cc @@ -88,9 +88,9 @@ } static bool -known_preimage_path(file_path const & p, - path_set const & ps, - bool & path_is_directory) +known_path(file_path const & p, + path_set const & ps, + bool & path_is_directory) { std::string path_as_dir = p() + "/"; for (path_set::const_iterator i = ps.begin(); i != ps.end(); ++i) @@ -126,7 +126,7 @@ N((*i)() != "", F("invalid path ''")); - if (! known_preimage_path(*i, ps, dir_p)) + if (! known_path(*i, ps, dir_p)) { P(F("skipping %s, not currently tracked\n") % *i); continue; @@ -163,16 +163,17 @@ extract_path_set(man, ps); apply_path_rearrangement(pr, ps); - bool dir_p = false; + bool src_dir_p = false; + bool dst_dir_p = false; - if (! known_preimage_path(src, ps, dir_p)) - { - P(F("skipping %s, not currently tracked\n") % src); - return; - } + N(known_path(src, ps, src_dir_p), + F("%s does not exist in current revision\n") % src); + N(!known_path(dst, ps, dst_dir_p), + F("%s already exists in current revision\n") % dst); + P(F("adding %s -> %s to working copy rename set\n") % src % dst); - if (dir_p) + if (src_dir_p) pr_new.renamed_dirs.insert(std::make_pair(src, dst)); else pr_new.renamed_files.insert(std::make_pair(src, dst));