svn delete fails when deleting multiple URLs with URL-encoded spaces
From: Simon Wilson <sepwilson_at_gmail.com>
Date: Thu, 17 Mar 2011 12:19:01 +0100
I'm posting here for feedback before opening an issue with the Subversion tracker.
Passing multiple URLs to 'svn delete' generates the following error when one or more of the URLs contains a URL-encoded space (i.e. %20):
URL 'file:///Users/me/dev/repo/lib/tags/2.0.3.008%2520(R2.0.3)' does not exist
The error has status 160013 and originates at subversion/libsvn_client/delete.c, 197
The actual URL specified to 'svn delete' was 'file:///Users/me/dev/repo/lib/tags/2.0.3.008%20(R2.0.3)', i.e. the name of the directory being deleted is '2.0.3.008 (R2.0.3)'.
The error description indicates that 'svn delete' is double-encoding the URL, incorrectly replacing the '%' character from the URL-encoded space (i.e. %20) with %25, resulting in an incorrect URL.
Specifying a single URL with a URL-encoded space to 'svn delete' works as expected.
A cursory glance at the source for svn_client_delete3 and svn_path_condense_targets indicates that svn_path_condense_targets contains special-case handling for a single URL. This might explain why the double-encoding is not encountered when a single URL is specified to 'svn delete' and may indicate that svn_path_condense_targets is the source of the error.
* This appears to be a regression. I could not reproduce this error with 'svn' on the command line for the build of 1.6.5 included with Mac OS X 10.6.6. I also could not reproduce this when using the svn_client_delete2 API with a 1.6.6 static library we built from source.
* This behavior seems to have been introduced at some point between 1.6.7 and 1.6.12. We have verified that the bug exists in 1.6.12 and is still in evidence in 1.6.16. We have not tested 1.6.7 - 1.6.11 explicitly.
* This may not seem to be a particularly severe issue to users of the 'svn' command-line interface. However, we use the svn_client_delete2 API in our Mac svn product to allow the user to delete the selected files in a browser GUI which supports multiple selection. This makes it trivial for the user to delete multiple items from a repository in a single commit, and greatly increases the likelihood of users experiencing this issue.
This is an archived mail posted to the Subversion Dev mailing list.