You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2011/10/20 19:28:11 UTC
svn commit: r1186944 - in /subversion/trunk/subversion:
libsvn_wc/update_editor.c tests/cmdline/special_tests.py
Author: stsp
Date: Thu Oct 20 17:28:11 2011
New Revision: 1186944
URL: http://svn.apache.org/viewvc?rev=1186944&view=rev
Log:
Fix an assertion failure when updating a symlink. The client's method of
determining whether an incoming file is a symlink was faulty.
Reported by: Søren Thing Andersen
* subversion/tests/cmdline/special_tests.py
(update_symlink): New test. Triggers an assertion failure with 1.7.0.
* subversion/libsvn_wc/update_editor.c
(close_file): If the status of a symlink doesn't change, the server
won't send a property change, so don't expect to see a property change
for svn:special if the update doesn't change the property.
Also, correctly handle incoming deletion of svn:special, in which
case the server sends a NULL value for svn:special.
Modified:
subversion/trunk/subversion/libsvn_wc/update_editor.c
subversion/trunk/subversion/tests/cmdline/special_tests.py
Modified: subversion/trunk/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/update_editor.c?rev=1186944&r1=1186943&r2=1186944&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/trunk/subversion/libsvn_wc/update_editor.c Thu Oct 20 17:28:11 2011
@@ -4270,6 +4270,7 @@ close_file(void *file_baton,
{
int i;
+ svn_boolean_t seen_special_prop = FALSE;
for (i = 0; i < regular_prop_changes->nelts; ++i)
{
@@ -4278,9 +4279,14 @@ close_file(void *file_baton,
if (strcmp(prop->name, SVN_PROP_SPECIAL) == 0)
{
- incoming_is_link = TRUE;
+ seen_special_prop = TRUE;
+ incoming_is_link = (prop->value != NULL);
+ break;
}
}
+
+ if (!seen_special_prop)
+ incoming_is_link = local_is_link;
}
Modified: subversion/trunk/subversion/tests/cmdline/special_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/special_tests.py?rev=1186944&r1=1186943&r2=1186944&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/special_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/special_tests.py Thu Oct 20 17:28:11 2011
@@ -860,6 +860,47 @@ def symlink_to_wc_svnversion(sbox):
symlink_path, sbox.repo_url,
[ "1\n" ], [])
+# Regression in 1.7.0: Update fails to change a symlink
+@SkipUnless(svntest.main.is_posix_os)
+def update_symlink(sbox):
+ "update a symlink"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ mu_path = sbox.ospath('A/mu')
+ iota_path = sbox.ospath('iota')
+ symlink_path = sbox.ospath('symlink')
+
+ # create a symlink to /A/mu
+ os.symlink("A/mu", symlink_path)
+ sbox.simple_add('symlink')
+ sbox.simple_commit()
+
+ # change the symlink to /iota
+ os.remove(symlink_path)
+ os.symlink("iota", symlink_path)
+ sbox.simple_commit()
+
+ # update back to r2
+ svntest.main.run_svn(False, 'update', '-r', '2', wc_dir)
+
+ # now update to head; 1.7.0 throws an assertion here
+ expected_output = svntest.wc.State(wc_dir, {
+ 'symlink' : Item(status='U '),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({'symlink': Item(contents="This is the file 'iota'.\n",
+ props={'svn:special' : '*'})})
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+ expected_status.add({
+ 'symlink' : Item(status=' ', wc_rev='3'),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
########################################################################
# Run the tests
@@ -887,6 +928,7 @@ test_list = [ None,
merge_foreign_symlink,
symlink_to_wc_basic,
symlink_to_wc_svnversion,
+ update_symlink,
]
if __name__ == '__main__':