Using 1.6 client
================
noorul_at_noorul:/tmp/wc/repos$ ls a
ls: cannot access a: No such file or directory
noorul_at_noorul:/tmp/wc/repos$ svn cl testlist a
svn: warning: 'a' is not under version control
noorul_at_noorul:/tmp/wc/repos$ svn cl a --remove
svn: warning: 'a' is not under version control
noorul_at_noorul:/tmp/wc/repos$ touch a
noorul_at_noorul:/tmp/wc/repos$ ls a
a
noorul_at_noorul:/tmp/wc/repos$ svn cl testlist a
svn: warning: 'a' is not under version control
noorul_at_noorul:/tmp/wc/repos$ svn cl a --remove
svn: warning: 'a' is not under version control
Using 1.7 client
================
noorul_at_noorul:/tmp/wc/repos1$ ls a
ls: cannot access a: No such file or directory
noorul_at_noorul:/tmp/wc/repos1$ ~/projects/subversion/builds/trunk/bin/svn cl testlist a
noorul_at_noorul:/tmp/wc/repos1$ ~/projects/subversion/builds/trunk/bin/svn cl a --remove
noorul_at_noorul:/tmp/wc/repos1$ touch a
noorul_at_noorul:/tmp/wc/repos1$ ls a
a
noorul_at_noorul:/tmp/wc/repos1$ ~/projects/subversion/builds/trunk/bin/svn cl testlist a
noorul_at_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,
Received on 2011-07-12 09:21:28 CEST