Philip Martin <philip.mar...@wandisco.com> writes:

> Daniel Shahaf <danie...@apache.org> writes:
>
>> On Wed, Sep 04, 2013 at 11:50:49PM -0400, James McCoy wrote:
>>> This was with svn 1.7.9.  I haven't had a chance to test newer
>>> versions, but looking through the code in trunk, it looks like it
>>> would still be a problem.
>>
>> Confirmed, it reproduces in trunk:
>>
>> Index: subversion/tests/cmdline/upgrade_tests.py
>> ===================================================================
>> --- subversion/tests/cmdline/upgrade_tests.py   (revision 1520363)
>> +++ subversion/tests/cmdline/upgrade_tests.py   (working copy)
>> @@ -425,7 +425,7 @@ def simple_entries_replace(path, from_url, to_url)
>>  def basic_upgrade_1_0(sbox):
>>    "test upgrading a working copy created with 1.0.0"
>>  
>> -  sbox.build(create_wc = False)
>> +  sbox.build(name='foo+', create_wc = False)
>>    replace_sbox_with_tarfile(sbox, 'upgrade_1_0.tar.bz2')
>>  
>>    url = sbox.repo_url
>>
>> % ../runpytest upgrade basic_upgrade_1_0 2>&1 | head
>> W: lt-svn: subversion/libsvn_subr/path.c:119: svn_path_join_internal: 
>> Assertion `svn_path_is_canonical_internal(base, pool)' failed.
>>
>> W: CMD: /home/danielsh/src/svn/t1/subversion/svn/svn upgrade 
>> 'svn-test-work/working_copies/foo+' --config-dir 
>> /home/danielsh/src/svn/t1/subversion/tests/cmdline/svn-test-work/local_tmp/config
>>  --password rayjandom --no-auth-cache --username jrandom terminated by 
>> signal 6
>
> It looks like the %2B is failing svn_uri_is_canonical.  Looking at
> svn_uri__char_validity in libsvn_subr/path.c the table says that '+'
> should not be % encoded.  The problem is that the Python testsuite uses
> urllib.pathname2url(self.repo_dir) and that has different ideas, it
> does % encode '+'.

Index: subversion/tests/cmdline/svntest/sandbox.py
===================================================================
--- subversion/tests/cmdline/svntest/sandbox.py (revision 1520259)
+++ subversion/tests/cmdline/svntest/sandbox.py (working copy)
@@ -57,7 +57,7 @@
     if not read_only:
       self.repo_dir = os.path.join(svntest.main.general_repo_dir, self.name)
       self.repo_url = (svntest.main.options.test_area_url + '/'
-                       + urllib.pathname2url(self.repo_dir))
+                       + urllib.quote(self.repo_dir, '/+'))
       self.add_test_path(self.repo_dir)
     else:
       self.repo_dir = svntest.main.pristine_greek_repos_dir

That works for '+'.  A real patch would need to ensure that the safe set
passed to urllib.quote matches the safe set required by Subversion.

-- 
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*

Reply via email to