Using 1.6 client ================ noorul@noorul:/tmp/wc/repos$ ls a ls: cannot access a: No such file or directory noorul@noorul:/tmp/wc/repos$ svn cl testlist a svn: warning: 'a' is not under version control noorul@noorul:/tmp/wc/repos$ svn cl a --remove svn: warning: 'a' is not under version control noorul@noorul:/tmp/wc/repos$ touch a noorul@noorul:/tmp/wc/repos$ ls a a noorul@noorul:/tmp/wc/repos$ svn cl testlist a svn: warning: 'a' is not under version control noorul@noorul:/tmp/wc/repos$ svn cl a --remove svn: warning: 'a' is not under version control
Using 1.7 client ================ noorul@noorul:/tmp/wc/repos1$ ls a ls: cannot access a: No such file or directory noorul@noorul:/tmp/wc/repos1$ ~/projects/subversion/builds/trunk/bin/svn cl testlist a noorul@noorul:/tmp/wc/repos1$ ~/projects/subversion/builds/trunk/bin/svn cl a --remove noorul@noorul:/tmp/wc/repos1$ touch a noorul@noorul:/tmp/wc/repos1$ ls a a noorul@noorul:/tmp/wc/repos1$ ~/projects/subversion/builds/trunk/bin/svn cl testlist a noorul@noorul:/tmp/wc/repos1$ ~/projects/subversion/builds/trunk/bin/svn cl a --remove The attached patch fixes this regression. Log [[[ Fix regression in 'svn cl' add/remove operations on non-existent/unversioned target. * subversion/libsvn_wc/adm_ops.c (svn_wc_set_changelist2): If the target is unversioned/non-existent then return error (SVN_ERR_UNVERSIONED_RESOURCE). * subversion/tests/cmdline/changelist_tests.py (add_remove_non_existent_target, add_remove_unversioned_target): New tests. (test_list): Run them. Patch by: Noorul Islam K M <noorul{_AT_}collab.net> Found by: danielsh ]]]
Index: subversion/tests/cmdline/changelist_tests.py =================================================================== --- subversion/tests/cmdline/changelist_tests.py (revision 1145455) +++ subversion/tests/cmdline/changelist_tests.py (working copy) @@ -1132,8 +1132,44 @@ 'revert', '-R', sbox.ospath('A')) svntest.actions.run_and_verify_info(expected_infos, sbox.ospath('A/mu')) +def add_remove_non_existent_target(sbox): + "add and remove non-existent target to changelist" + sbox.build(read_only = True) + wc_dir = sbox.wc_dir + bogus_path = os.path.join(wc_dir, 'A', 'bogus') + expected_err = "svn: warning: W200005: '" + \ + re.escape(os.path.abspath(bogus_path)) + \ + "' is not under version control" + + svntest.actions.run_and_verify_svn2(None, None, expected_err, 0, + 'changelist', 'testlist', + bogus_path) + + svntest.actions.run_and_verify_svn2(None, None, expected_err, 0, + 'changelist', bogus_path, + '--remove') + +def add_remove_unversioned_target(sbox): + "add and remove unversioned target to changelist" + + sbox.build(read_only = True) + unversioned = sbox.ospath('unversioned') + svntest.main.file_write(unversioned, "dummy contents", 'w+') + + expected_err = "svn: warning: W200005: '" + \ + re.escape(os.path.abspath(unversioned)) + \ + "' is not under version control" + + svntest.actions.run_and_verify_svn2(None, None, expected_err, 0, + 'changelist', 'testlist', + unversioned) + + svntest.actions.run_and_verify_svn2(None, None, expected_err, 0, + 'changelist', unversioned, + '--remove') + ######################################################################## # Run the tests @@ -1153,6 +1189,8 @@ move_added_keeps_changelist, change_to_dir, revert_deleted_in_changelist, + add_remove_non_existent_target, + add_remove_unversioned_target, ] if __name__ == '__main__': Index: subversion/libsvn_wc/adm_ops.c =================================================================== --- subversion/libsvn_wc/adm_ops.c (revision 1145455) +++ subversion/libsvn_wc/adm_ops.c (working copy) @@ -2200,11 +2200,21 @@ void *notify_baton, apr_pool_t *scratch_pool) { + svn_node_kind_t kind; + /* Assert that we aren't being asked to set an empty changelist. */ SVN_ERR_ASSERT(! (new_changelist && new_changelist[0] == '\0')); SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath)); + SVN_ERR(svn_wc_read_kind(&kind, wc_ctx, local_abspath, FALSE, scratch_pool)); + + if (kind == svn_node_none) + return svn_error_createf(SVN_ERR_UNVERSIONED_RESOURCE, NULL, + _("'%s' is not under version control"), + svn_dirent_local_style(local_abspath, + scratch_pool)); + SVN_ERR(svn_wc__db_op_set_changelist(wc_ctx->db, local_abspath, new_changelist, changelist_filter, depth, notify_func, notify_baton,