Author: cmpilato Date: Mon Jan 24 21:46:43 2011 New Revision: 1062999 URL: http://svn.apache.org/viewvc?rev=1062999&view=rev Log: On the 'uris-as-urls' branch: Generalize (privately) a class of URL-path-related functions so they can be shared amongst mod_dav_svn, libsvn_ra_serf, and libsvn_ra_neon.
* subversion/include/private/svn_fspath.h (svn_urlpath__basename, svn_urlpath__dirname, svn_urlpath__join, svn_urlpath__get_longest_ancestor, svn_urlpath__is_ancestor, svn_urlpath__is_canonical, svn_urlpath__is_child, svn_urlpath__is_root, svn_urlpath__canonicalize, svn_urlpath__skip_ancestor, svn_urlpath__split): Renamed from libsvn_ra_serf/ra_serf.h:svn_ra_serf__uri*. * subversion/libsvn_subr/dirent_uri.c (svn_urlpath__canonicalize): Was libsvn_ra_serf/util.c:svn_ra_serf__uri_canonicalize(). * subversion/libsvn_ra_serf/util.c (): Track renamed svn_ra_serf__uri_* functions. (svn_ra_serf__uri_canonicalize): Moved to libsvn_subr/dirent_uri.c:svn_urlpath__canonicalize(). * subversion/libsvn_ra_serf/commit.c, * subversion/libsvn_ra_serf/merge.c, * subversion/libsvn_ra_serf/options.c, * subversion/libsvn_ra_serf/property.c, * subversion/libsvn_ra_serf/serf.c (): Track renamed svn_ra_serf__uri_* functions. Modified: subversion/branches/uris-as-urls/subversion/include/private/svn_fspath.h subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/commit.c subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/merge.c subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/options.c subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/property.c subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/ra_serf.h subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/serf.c subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/util.c subversion/branches/uris-as-urls/subversion/libsvn_subr/dirent_uri.c Modified: subversion/branches/uris-as-urls/subversion/include/private/svn_fspath.h URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/include/private/svn_fspath.h?rev=1062999&r1=1062998&r2=1062999&view=diff ============================================================================== --- subversion/branches/uris-as-urls/subversion/include/private/svn_fspath.h (original) +++ subversion/branches/uris-as-urls/subversion/include/private/svn_fspath.h Mon Jan 24 21:46:43 2011 @@ -173,6 +173,28 @@ svn_fspath__get_longest_ancestor(const c apr_pool_t *result_pool); + + +/** A faux fspath API used by the DAV modules to help us distinguish + * between real URI-decoded fspaths and URI-encoded URL path-portions. + */ +#define svn_urlpath__basename svn_fspath__basename +#define svn_urlpath__dirname svn_fspath__dirname +#define svn_urlpath__get_longest_ancestor svn_fspath__get_longest_ancestor +#define svn_urlpath__is_ancestor svn_fspath__is_ancestor +#define svn_urlpath__is_canonical svn_fspath__is_canonical +#define svn_urlpath__is_child svn_fspath__is_child +#define svn_urlpath__is_root svn_fspath__is_root +#define svn_urlpath__join svn_fspath__join +#define svn_urlpath__skip_ancestor svn_fspath__skip_ancestor +#define svn_urlpath__split svn_fspath__split + +/* Like svn_fspath__canonicalize(), but this one accepts both full + URLs and URL path-portions. */ +const char * +svn_urlpath__canonicalize(const char *uri, apr_pool_t *pool); + + #ifdef __cplusplus } #endif /* __cplusplus */ Modified: subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/commit.c URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/commit.c?rev=1062999&r1=1062998&r2=1062999&view=diff ============================================================================== --- subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/commit.c (original) +++ subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/commit.c Mon Jan 24 21:46:43 2011 @@ -41,6 +41,7 @@ #include "svn_private_config.h" #include "private/svn_dep_compat.h" +#include "private/svn_fspath.h" #include "ra_serf.h" #include "../libsvn_ra/ra_loader.h" @@ -311,7 +312,7 @@ handle_checkout(serf_request_t *request, if (status) err = svn_error_compose_create(svn_error_wrap_apr(status, NULL), err); - ctx->resource_url = svn_ra_serf__uri_canonicalize(uri.path, ctx->pool); + ctx->resource_url = svn_urlpath__canonicalize(uri.path, ctx->pool); } return err; @@ -488,7 +489,7 @@ get_version_url(const char **checked_in_ if (current_version) { *checked_in_url = - svn_ra_serf__uri_canonicalize(current_version->data, pool); + svn_urlpath__canonicalize(current_version->data, pool); return SVN_NO_ERROR; } } @@ -543,7 +544,7 @@ get_version_url(const char **checked_in_ _("Path '%s' not present"), session->repos_url.path); - root_checkout = svn_ra_serf__uri_canonicalize(root_checkout, pool); + root_checkout = svn_urlpath__canonicalize(root_checkout, pool); } *checked_in_url = svn_path_url_add_component2(root_checkout, relpath, pool); Modified: subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/merge.c URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/merge.c?rev=1062999&r1=1062998&r2=1062999&view=diff ============================================================================== --- subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/merge.c (original) +++ subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/merge.c Mon Jan 24 21:46:43 2011 @@ -298,7 +298,7 @@ end_merge(svn_ra_serf__xml_parser_t *par const char *href; href = apr_hash_get(info->props, "href", APR_HASH_KEY_STRING); - if (! svn_ra_serf__uri_is_ancestor(ctx->merge_url, href)) + if (! svn_urlpath__is_ancestor(ctx->merge_url, href)) { /* ### need something better than APR_EGENERAL */ return svn_error_createf(APR_EGENERAL, NULL, @@ -320,7 +320,7 @@ end_merge(svn_ra_serf__xml_parser_t *par an ancestor of HREF. All that remains is to determine of HREF is the same as CTX->MERGE_URL, or -- if not -- is relative value as a child thereof. */ - href = svn_ra_serf__uri_is_child(ctx->merge_url, href, NULL); + href = svn_urlpath__is_child(ctx->merge_url, href, NULL); if (! href) href = ""; @@ -365,7 +365,7 @@ end_merge(svn_ra_serf__xml_parser_t *par info->prop_val = apr_pstrmemdup(info->pool, info->prop_val, info->prop_val_len); if (strcmp(info->prop_name, "href") == 0) - info->prop_val = svn_ra_serf__uri_canonicalize(info->prop_val, + info->prop_val = svn_urlpath__canonicalize(info->prop_val, info->pool); /* Set our property. */ @@ -454,7 +454,7 @@ svn_ra_serf__merge_lock_token_list(apr_h path.data = key; path.len = klen; - if (parent && !svn_ra_serf__uri_is_ancestor(parent, key)) + if (parent && !svn_urlpath__is_ancestor(parent, key)) continue; svn_ra_serf__add_open_tag_buckets(body, alloc, "S:lock", NULL); Modified: subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/options.c URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/options.c?rev=1062999&r1=1062998&r2=1062999&view=diff ============================================================================== --- subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/options.c (original) +++ subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/options.c Mon Jan 24 21:46:43 2011 @@ -39,6 +39,7 @@ #include "svn_version.h" #include "svn_dirent_uri.h" #include "svn_private_config.h" +#include "private/svn_fspath.h" #include "ra_serf.h" @@ -187,7 +188,7 @@ end_options(svn_ra_serf__xml_parser_t *p { options_ctx->collect_cdata = FALSE; options_ctx->activity_collection = - svn_ra_serf__uri_canonicalize(options_ctx->attr_val, options_ctx->pool); + svn_urlpath__canonicalize(options_ctx->attr_val, options_ctx->pool); pop_state(options_ctx); } @@ -336,7 +337,7 @@ capabilities_headers_iterator_callback(v orc->session->repos_root = orc->session->repos_url; orc->session->repos_root.path = apr_pstrdup(orc->session->pool, val); orc->session->repos_root_str = - svn_ra_serf__uri_canonicalize( + svn_urlpath__canonicalize( apr_uri_unparse(orc->session->pool, &orc->session->repos_root, 0), Modified: subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/property.c URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/property.c?rev=1062999&r1=1062998&r2=1062999&view=diff ============================================================================== --- subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/property.c (original) +++ subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/property.c Mon Jan 24 21:46:43 2011 @@ -32,6 +32,7 @@ #include "svn_dirent_uri.h" #include "private/svn_dav_protocol.h" +#include "private/svn_fspath.h" #include "svn_private_config.h" #include "ra_serf.h" @@ -344,7 +345,7 @@ end_propfind(svn_ra_serf__xml_parser_t * if (strcmp(ctx->depth, "1") == 0) { ctx->current_path = - svn_ra_serf__uri_canonicalize(info->val, ctx->pool); + svn_urlpath__canonicalize(info->val, ctx->pool); } else { @@ -1034,7 +1035,7 @@ svn_ra_serf__get_baseline_info(const cha "the requested checked-in value")); } - baseline_url = svn_ra_serf__uri_canonicalize(baseline_url, pool); + baseline_url = svn_urlpath__canonicalize(baseline_url, pool); SVN_ERR(svn_ra_serf__retrieve_props(props, session, conn, baseline_url, revision, "0", @@ -1051,7 +1052,7 @@ svn_ra_serf__get_baseline_info(const cha "requested baseline-collection value")); } - basecoll_url = svn_ra_serf__uri_canonicalize(basecoll_url, pool); + basecoll_url = svn_urlpath__canonicalize(basecoll_url, pool); if (latest_revnum) { Modified: subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/ra_serf.h URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/ra_serf.h?rev=1062999&r1=1062998&r2=1062999&view=diff ============================================================================== --- subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/ra_serf.h (original) +++ subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/ra_serf.h Mon Jan 24 21:46:43 2011 @@ -64,27 +64,6 @@ extern "C" { #endif -/* A faux fspath API used inside this library to help us distinguish - * between real URI-decoded fspaths and URI-encoded URL path-portions. - */ -#define svn_ra_serf__uri_basename svn_fspath__basename -#define svn_ra_serf__uri_dirname svn_fspath__dirname -#define svn_ra_serf__uri_get_longest_ancestor svn_fspath__get_longest_ancestor -#define svn_ra_serf__uri_is_ancestor svn_fspath__is_ancestor -#define svn_ra_serf__uri_is_canonical svn_fspath__is_canonical -#define svn_ra_serf__uri_is_child svn_fspath__is_child -#define svn_ra_serf__uri_is_root svn_fspath__is_root -#define svn_ra_serf__uri_join svn_fspath__join -#define svn_ra_serf__uri_skip_ancestor svn_fspath__skip_ancestor -#define svn_ra_serf__uri_split svn_fspath__split - -/* Like svn_fspath__canonicalize(), but this one accepts both full - URLs and URL path-portions. */ -const char * -svn_ra_serf__uri_canonicalize(const char *uri, - apr_pool_t *pool); - - /* Forward declarations. */ typedef struct svn_ra_serf__session_t svn_ra_serf__session_t; typedef struct svn_ra_serf__auth_protocol_t svn_ra_serf__auth_protocol_t; Modified: subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/serf.c URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/serf.c?rev=1062999&r1=1062998&r2=1062999&view=diff ============================================================================== --- subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/serf.c (original) +++ subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/serf.c Mon Jan 24 21:46:43 2011 @@ -774,7 +774,7 @@ path_dirent_walker(void *baton, apr_hash_set(dirents->full_paths, path, path_len, entry); - base_name = svn_path_uri_decode(svn_ra_serf__uri_basename(path, pool), + base_name = svn_path_uri_decode(svn_urlpath__basename(path, pool), pool); apr_hash_set(dirents->base_paths, base_name, APR_HASH_KEY_STRING, entry); @@ -908,7 +908,7 @@ svn_ra_serf__get_dir(svn_ra_session_t *r */ dirent_walk.full_paths = apr_hash_make(pool); dirent_walk.base_paths = apr_hash_make(pool); - dirent_walk.orig_path = svn_ra_serf__uri_canonicalize(path, pool); + dirent_walk.orig_path = svn_urlpath__canonicalize(path, pool); SVN_ERR(svn_ra_serf__walk_all_paths(props, revision, path_dirent_walker, &dirent_walk, pool)); Modified: subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/util.c URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/util.c?rev=1062999&r1=1062998&r2=1062999&view=diff ============================================================================== --- subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/util.c (original) +++ subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/util.c Mon Jan 24 21:46:43 2011 @@ -915,7 +915,7 @@ svn_ra_serf__response_get_location(serf_ headers = serf_bucket_response_get_headers(response); val = serf_bucket_headers_get(headers, "Location"); - return val ? svn_ra_serf__uri_canonicalize(val, pool) : NULL; + return val ? svn_urlpath__canonicalize(val, pool) : NULL; } /* Implements svn_ra_serf__response_handler_t */ @@ -1802,7 +1802,7 @@ svn_ra_serf__discover_vcc(const char **v svn_error_clear(err); /* Okay, strip off a component from PATH. */ - path = svn_ra_serf__uri_dirname(path, pool); + path = svn_urlpath__dirname(path, pool); } } } @@ -1837,9 +1837,9 @@ svn_ra_serf__discover_vcc(const char **v session->repos_root = session->repos_url; session->repos_root.path = apr_pstrdup(session->pool, url_buf->data); session->repos_root_str = - svn_ra_serf__uri_canonicalize(apr_uri_unparse(session->pool, - &session->repos_root, 0), - session->pool); + svn_urlpath__canonicalize(apr_uri_unparse(session->pool, + &session->repos_root, 0), + session->pool); } /* Store the repository UUID in the cache. */ @@ -1884,7 +1884,7 @@ svn_ra_serf__get_relative_path(const cha } else { - *rel_path = svn_ra_serf__uri_is_child(decoded_root, decoded_orig, pool); + *rel_path = svn_urlpath__is_child(decoded_root, decoded_orig, pool); SVN_ERR_ASSERT(*rel_path != NULL); } return SVN_NO_ERROR; @@ -1934,21 +1934,3 @@ svn_ra_serf__error_on_status(int status_ return SVN_NO_ERROR; } - - -const char * -svn_ra_serf__uri_canonicalize(const char *uri, - apr_pool_t *pool) -{ - if (svn_path_is_url(uri)) - { - uri = svn_url_canonicalize(uri, pool); - } - else - { - uri = svn_fspath__canonicalize(uri, pool); - uri = svn_path_uri_decode(uri, pool); - uri = svn_path_uri_encode(uri, pool); - } - return uri; -} Modified: subversion/branches/uris-as-urls/subversion/libsvn_subr/dirent_uri.c URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/libsvn_subr/dirent_uri.c?rev=1062999&r1=1062998&r2=1062999&view=diff ============================================================================== --- subversion/branches/uris-as-urls/subversion/libsvn_subr/dirent_uri.c (original) +++ subversion/branches/uris-as-urls/subversion/libsvn_subr/dirent_uri.c Mon Jan 24 21:46:43 2011 @@ -2423,7 +2423,8 @@ svn_url_get_file_url_from_dirent(const c } -/* ------------------------ The fspath API ------------------------ */ + +/* -------------- The fspath API (see private/svn_fspath.h) -------------- */ svn_boolean_t svn_fspath__is_canonical(const char *fspath) @@ -2576,3 +2577,25 @@ svn_fspath__get_longest_ancestor(const c assert(svn_fspath__is_canonical(result)); return result; } + + + + +/* -------------- The urlpath API (see private/svn_fspath.h) ------------- */ + +const char * +svn_urlpath__canonicalize(const char *uri, + apr_pool_t *pool) +{ + if (svn_path_is_url(uri)) + { + uri = svn_url_canonicalize(uri, pool); + } + else + { + uri = svn_fspath__canonicalize(uri, pool); + uri = svn_path_uri_decode(uri, pool); + uri = svn_path_uri_encode(uri, pool); + } + return uri; +}