-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Stefan Sperling wrote: [..] > Canonicalising in place looks suspicous. Why do we let these > strings run around in non-canonicalised form for a while, and then > later canonicalise them? There is code above these lines that also > uses rsrc->vsn_url, for instance. > Isn't it possible to canonicalise these strings earlier, when rsrc > is allocated and initialised?
Thank you for the comments, Stefan. Canonicalization of the base is now done, where they're getting initialized. rsrc->wr_url is initialized in the same place, but in place canonicalization has been changed. >> Index: ../../subversion/libsvn_ra_neon/props.c >> =================================================================== >> --- ../../subversion/libsvn_ra_neon/props.c (revision 882427) >> +++ ../../subversion/libsvn_ra_neon/props.c (working copy) >> @@ -991,7 +991,12 @@ >> >> /* maybe return bc_url to the caller */ >> if (bc_url) >> - *bc_url = *my_bc_url; >> + { >> + /* Canonicalize the base here as `svn_path_url_add_component2()' >> + won't handle it */ >> + bc_url->data = svn_uri_canonicalize(my_bc_url->data, pool); >> + bc_url->len = my_bc_url->len; > > Here, my_bc_url() comes from svn_ra_neon__get_baseline_props(). > Why doesn't svn_ra_neon__get_baseline_props() canonicalise its result? `my_bc_rel' gets its value from `svn_ra_neon__get_baseline_props()' whereas `my_bc_url' is initialized in the same place. Attaching the updated patch herewith. [[[ Log: Make a proper fix to resolve some deprecation warnings using `svn_path_url_add_component2()' by canonicalizing the base before passing to the above method; and a minor indentation fix. [in subversion/libsvn_ra_neon] * commit.c (get_version_url, create_activity, commit_add_dir, commit_add_file commit_close_file, add_child): Use `svn_path_url_add_component2()'. (commit_delete_entry): Use `svn_path_url_add_component2()' and a minor indentation fix in comment. (svn_ra_neon__get_commit_editor, checkout_resource, apply_revprops): Canonicalize the base before passing to `svn_path_url_add_component2()'. * props.c (svn_ra_neon__get_baseline_info): Canonicalize the base before passing to `svn_path_url_add_component2()'. Patch by: Kannan R <kann...@collab.net> ]]] - -- Thanks & Regards, Kannan -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQEVAwUBSxPdi3lTqcY7ytmIAQL4FQf7BAFuQz9brjUtGNFKWb/PIcz3srbfsbPh p50XX91GLSEBjy4PKdQwTJyuDdyOT3UFc0WFSjmy8hFcoAANvyAEWuqOWU+2F4Qk BQs+n8XLTHfmAT/W3XV5pyUs8eJzQRTAd/Il2Zux3V6gAXihuNEUDshO+1rMBupi dx8/H5kbmViOB/3/1JaAEXpU5rjM+rKrjylKTPDgqMyeFOahVLcUikDYykgC+pMi uxgZERdQ+iaYuefxcTBWXMyUIpYFVCSVrQjse28ASmewlWkSm0fZ8Ruzt1cRRmni /z3AUbRtuGFMvVwXYJ+tGY1OmV7uDl/awVS3x2VufF00xcgHjCvmpg== =C2dF -----END PGP SIGNATURE-----
Index: subversion/libsvn_ra_neon/commit.c =================================================================== --- subversion/libsvn_ra_neon/commit.c (revision 885339) +++ subversion/libsvn_ra_neon/commit.c (working copy) @@ -203,9 +203,9 @@ the version resource URL of RSRC. */ if (parent && parent->vsn_url && parent->revision == rsrc->revision) { - rsrc->vsn_url = svn_path_url_add_component(parent->vsn_url, - rsrc->name, - rsrc->pool); + rsrc->vsn_url = svn_path_url_add_component2(parent->vsn_url, + rsrc->name, + rsrc->pool); return SVN_NO_ERROR; } @@ -231,7 +231,7 @@ rsrc->revision, pool)); - url = svn_path_url_add_component(bc_url.data, bc_relative.data, pool); + url = svn_path_url_add_component2(bc_url.data, bc_relative.data, pool); } /* Get the DAV:checked-in property, which contains the URL of the @@ -325,8 +325,8 @@ the activity, and create the activity. The URL for our activity will be ACTIVITY_COLL/UUID */ SVN_ERR(get_activity_collection(cc, &activity_collection, FALSE, pool)); - url = svn_path_url_add_component(activity_collection->data, - uuid_buf, pool); + url = svn_path_url_add_component2(activity_collection->data, + uuid_buf, pool); SVN_ERR(svn_ra_neon__simple_request(&code, cc->ras, "MKACTIVITY", url, NULL, NULL, 201 /* Created */, @@ -338,8 +338,8 @@ if (code == 404) { SVN_ERR(get_activity_collection(cc, &activity_collection, TRUE, pool)); - url = svn_path_url_add_component(activity_collection->data, - uuid_buf, pool); + url = svn_path_url_add_component2(activity_collection->data, + uuid_buf, pool); SVN_ERR(svn_ra_neon__simple_request(&code, cc->ras, "MKACTIVITY", url, NULL, NULL, 201, 0, pool)); @@ -373,7 +373,7 @@ rsrc->pool = pool; rsrc->revision = revision; rsrc->name = name; - rsrc->url = svn_path_url_add_component(parent->url, name, pool); + rsrc->url = svn_path_url_add_component2(parent->url, name, pool); rsrc->local_path = svn_path_join(parent->local_path, name, pool); /* Case 1: the resource is truly "new". Either it was added as a @@ -382,7 +382,7 @@ URL by the rules of deltaV: "copy structure is preserved below the WR you COPY to." */ if (created || (parent->vsn_url == NULL)) - rsrc->wr_url = svn_path_url_add_component(parent->wr_url, name, pool); + rsrc->wr_url = svn_path_url_add_component2(parent->wr_url, name, pool); /* Case 2: the resource is already under version-control somewhere. This means it has a VR URL already, and the WR URL won't exist @@ -518,7 +518,11 @@ _("Unable to parse URL '%s'"), locn); } - rsrc->wr_url = apr_pstrdup(rsrc->pool, parse.path); + /* Canonicalize the base here as `svn_path_url_add_component2()' + won't handle it */ + rsrc->wr_url = svn_uri_canonicalize + (apr_pstrdup(rsrc->pool, parse.path), pool); + ne_uri_free(&parse); return SVN_NO_ERROR; @@ -714,7 +718,7 @@ SVN_ERR(checkout_resource(parent->cc, parent->rsrc, TRUE, NULL, pool)); /* create the URL for the child resource */ - child = svn_path_url_add_component(parent->rsrc->wr_url, name, pool); + child = svn_path_url_add_component2(parent->rsrc->wr_url, name, pool); /* Start out assuming that we're deleting a file; try to lookup the path itself in the token-hash, and if found, attach it to the If: @@ -729,8 +733,8 @@ const char *token_header_val; const char *token_uri; - token_uri = svn_path_url_add_component(parent->cc->ras->url->data, - path, pool); + token_uri = svn_path_url_add_component2(parent->cc->ras->url->data, + path, pool); token_header_val = apr_psprintf(pool, "<%s> (<%s>)", token_uri, token); extra_headers = apr_hash_make(pool); @@ -773,7 +777,7 @@ Note that we're not sending the locks in the If: header, for the same reason we're not sending in MERGE's headers: httpd has - limits on the amount of data it's willing to receive in headers. */ + limits on the amount of data it's willing to receive in headers. */ apr_hash_t *child_tokens = NULL; svn_ra_neon__request_t *request; @@ -888,9 +892,9 @@ "source" argument to the COPY request. The "Destination:" header given to COPY is simply the wr_url that is already part of the child object. */ - copy_src = svn_path_url_add_component(bc_url.data, - bc_relative.data, - workpool); + copy_src = svn_path_url_add_component2(bc_url.data, + bc_relative.data, + workpool); /* Have neon do the COPY. */ SVN_ERR(svn_ra_neon__copy(parent->cc->ras, @@ -1088,9 +1092,9 @@ "source" argument to the COPY request. The "Destination:" header given to COPY is simply the wr_url that is already part of the file_baton. */ - copy_src = svn_path_url_add_component(bc_url.data, - bc_relative.data, - workpool); + copy_src = svn_path_url_add_component2(bc_url.data, + bc_relative.data, + workpool); /* Have neon do the COPY. */ SVN_ERR(svn_ra_neon__copy(parent->cc->ras, @@ -1271,9 +1275,9 @@ svn_ra_neon__set_header (extra_headers, "If", apr_psprintf(pool, "<%s> (<%s>)", - svn_path_url_add_component(cc->ras->url->data, - file->rsrc->url, - request->pool), + svn_path_url_add_component2(cc->ras->url->data, + file->rsrc->url, + request->pool), file->token)); if (pb->base_checksum) @@ -1389,8 +1393,11 @@ vcc, NULL, &svn_ra_neon__checked_in_prop, pool)); baseline_rsrc.pool = pool; - baseline_rsrc.vsn_url = baseline_url->data; + /* Canonicalize the base here as `svn_path_url_add_component2()' + won't handle it. */ + baseline_rsrc.vsn_url = svn_uri_canonicalize(baseline_url->data, pool); + /* To set the revision properties, we must checkout the latest baseline and get back a mutable "working" baseline. */ err = checkout_resource(cc, &baseline_rsrc, FALSE, NULL, pool); @@ -1452,6 +1459,10 @@ /* ### should we perform an OPTIONS to validate the server we're about ### to talk to? */ + /* Canonicalize the base here as `svn_path_url_add_component2()' + won't handle it */ + cc->ras->act_coll = svn_uri_canonicalize(cc->ras->act_coll, pool); + /* ** Create an Activity. This corresponds directly to an FS transaction. ** We will check out all further resources within the context of this Index: subversion/libsvn_ra_neon/props.c =================================================================== --- subversion/libsvn_ra_neon/props.c (revision 885339) +++ subversion/libsvn_ra_neon/props.c (working copy) @@ -991,7 +991,12 @@ /* maybe return bc_url to the caller */ if (bc_url) - *bc_url = *my_bc_url; + { + /* Canonicalize the base here as `svn_path_url_add_component2()' + won't handle it */ + bc_url->data = svn_uri_canonicalize(my_bc_url->data, pool); + bc_url->len = my_bc_url->len; + } if (latest_rev != NULL) {