> -----Original Message-----
> From: Bert Huijben [mailto:b...@qqmail.nl]
> Sent: donderdag 5 september 2013 22:59
> To: 'Philip Martin'; 'Daniel Shahaf'
> Cc: 'James McCoy'; dev@subversion.apache.org
> Subject: RE: upgrade_tests 7 FAIL when working directory has a "+"
character
> 
> 
> 
> > -----Original Message-----
> > From: Philip Martin [mailto:philip.mar...@wandisco.com]
> > Sent: donderdag 5 september 2013 21:20
> > To: Daniel Shahaf
> > Cc: James McCoy; dev@subversion.apache.org
> > Subject: Re: upgrade_tests 7 FAIL when working directory has a "+"
> character
> >
> > 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.
> 
> How does this path enter 'svn'?
> 
> Shouldn't this just be handled by the 'svn_uri_canonicalize()' that
handles
> all url commandline arguments?
> 
> (Or does this code introduce it in the raw 'entries' files before the
> conversion?)

Yes,  basic_upgrade_1_0 (=upgrade tests 7) does indeed do a raw search and
replace on the entries file via xml_entries_relocate().

So the fix is probably to just add the necessary svn_uri_canonicalize() call
in the right place of the upgrade (=read from 'entries') code.

[Note the other mail: Changing the canonicalization rules requires a format
bump, as that can make urls in wc.db invalid]


>       Bert

Reply via email to