On Thu, 2009-12-17, Kannan wrote:
> Julian Foad wrote:
> [..]
> > It would be great if you could trace the calls back to wherever the
> > non-canonical paths are generated, and fix them at that point.
> 
> Thank you Julian, for the comments. Attached herewith is the patch to
> canonicalize the URLs. If this seems fine, I shall send the patch to
> upgrade ..add_component() to ..add_component2().
> 
> [[[
> Log:
> Ensure the URLs are canonical before passing to the new
> `svn_path_url_add_component2()'.
> 
> [ in subversion/libsvn_ra_neon ]
> 
> * commit.c
>   (checkout_resource): Canonicalize the 'BASE' as
>   `svn_path_url_add_component2()' won't handle it.
> 
> * props.c
>   (svn_ra_neon__get_baseline_info, svn_ra_neon__get_one_prop): Same.
> 
> * options.c
>   (svn_ra_neon__exchange_capabilities): Same.

Hi Kannan.

With your patch, the code in "commit.c" now looks like this (ignoring
all the error handling):

do_checkout():
  ...
  *locn = svn_ra_neon__request_get_location(request, pool);

checkout_resource():
  do_checkout(cc, rsrc->vsn_url, allow_404, token, &code, &locn, pool);
  ne_uri_parse(locn, &parse);
  rsrc->wr_url = svn_uri_canonicalize(parse.path, rsrc->pool);

Does the "ne_uri_parse" function create a non-canonical ".path", or does
the do_checkout() function create a non-canonical URL?

If the former, we should look for all other uses of ne_uri_parse() and
canonicalize after them as well. If the latter, we should fix the
do_checkout() function and look for all other uses of
svn_ra_neon__request_get_location().

(What does the non-canonical URL or URI look like?)

- Julian


Reply via email to