You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2011/05/04 00:52:48 UTC
svn commit: r1099290 - in /subversion/trunk/subversion: include/svn_client.h
libsvn_client/commit_util.c libsvn_client/ra.c
Author: rhuijben
Date: Tue May 3 22:52:47 2011
New Revision: 1099290
URL: http://svn.apache.org/viewvc?rev=1099290&view=rev
Log:
Store commit paths as normal relpaths instead of as uri encoded partial uris.
Its easier to decode once, then to decode everywhere.
* subversion/include/svn_client.h
(svn_client_commit_item3_t): Add session_relpath.
* subversion/libsvn_client/commit_util.c
(svn_client__condense_commit_items): Store decoded relative path in
session_relpath instead of undecoded in url.
(do_item_commit): Hash on decoded path.
(svn_client__do_commit): Don't decode paths.
* subversion/libsvn_client/ra.c
(get_wc_prop,
push_wc_prop): Don't uri decode for every item in the loop. Just assume
item->path is an abspath.
Modified:
subversion/trunk/subversion/include/svn_client.h
subversion/trunk/subversion/libsvn_client/commit_util.c
subversion/trunk/subversion/libsvn_client/ra.c
Modified: subversion/trunk/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1099290&r1=1099289&r2=1099290&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_client.h (original)
+++ subversion/trunk/subversion/include/svn_client.h Tue May 3 22:52:47 2011
@@ -473,6 +473,12 @@ typedef struct svn_client_commit_item3_t
* same lifetime as this data structure.
*/
apr_array_header_t *outgoing_prop_changes;
+
+ /**
+ * When processing the commit this contains the relative path for
+ * the commit session. #NULL until the commit item is preprocessed.
+ */
+ const char *session_relpath;
} svn_client_commit_item3_t;
/** The commit candidate structure.
Modified: subversion/trunk/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit_util.c?rev=1099290&r1=1099289&r2=1099290&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/commit_util.c (original)
+++ subversion/trunk/subversion/libsvn_client/commit_util.c Tue May 3 22:52:47 2011
@@ -1076,7 +1076,7 @@ svn_client__condense_commit_items(const
}
/* Now that we've settled on a *BASE_URL, go hack that base off
- of all of our URLs. */
+ of all of our URLs and store it as session_relpath. */
for (i = 0; i < ci->nelts; i++)
{
svn_client_commit_item3_t *this_item
@@ -1085,9 +1085,10 @@ svn_client__condense_commit_items(const
size_t base_url_len = strlen(*base_url);
if (url_len > base_url_len)
- this_item->url = apr_pstrdup(pool, this_item->url + base_url_len + 1);
+ this_item->session_relpath = svn_uri_is_child(*base_url,
+ this_item->url, pool);
else
- this_item->url = "";
+ this_item->session_relpath = "";
}
#ifdef SVN_CLIENT_COMMIT_DEBUG
@@ -1432,7 +1433,7 @@ do_item_commit(void **dir_baton,
/* Add this file mod to the FILE_MODS hash. */
mod->item = item;
mod->file_baton = file_baton;
- apr_hash_set(file_mods, item->url, APR_HASH_KEY_STRING, mod);
+ apr_hash_set(file_mods, item->session_relpath, APR_HASH_KEY_STRING, mod);
}
else if (file_baton)
{
@@ -1491,13 +1492,13 @@ svn_client__do_commit(const char *base_u
*sha1_checksums = apr_hash_make(result_pool);
/* Build a hash from our COMMIT_ITEMS array, keyed on the
- URI-decoded relative paths (which come from the item URLs). And
+ relative paths (which come from the item URLs). And
keep an array of those decoded paths, too. */
for (i = 0; i < commit_items->nelts; i++)
{
svn_client_commit_item3_t *item =
APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
- const char *path = svn_path_uri_decode(item->url, scratch_pool);
+ const char *path = item->session_relpath;
apr_hash_set(items_hash, path, APR_HASH_KEY_STRING, item);
APR_ARRAY_PUSH(paths, const char *) = path;
}
Modified: subversion/trunk/subversion/libsvn_client/ra.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/ra.c?rev=1099290&r1=1099289&r2=1099290&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/ra.c (original)
+++ subversion/trunk/subversion/libsvn_client/ra.c Tue May 3 22:52:47 2011
@@ -104,13 +104,13 @@ get_wc_prop(void *baton,
= APR_ARRAY_IDX(cb->commit_items, i,
svn_client_commit_item3_t *);
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, item->path, pool));
-
- if (! strcmp(relpath,
- svn_path_uri_decode(item->url, pool)))
- return svn_error_return(svn_wc_prop_get2(value, cb->ctx->wc_ctx,
- local_abspath, name,
- pool, pool));
+ if (! strcmp(relpath, item->session_relpath))
+ {
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(item->path));
+ return svn_error_return(svn_wc_prop_get2(value, cb->ctx->wc_ctx,
+ item->path, name,
+ pool, pool));
+ }
}
return SVN_NO_ERROR;
@@ -150,17 +150,14 @@ push_wc_prop(void *baton,
svn_client_commit_item3_t *item
= APR_ARRAY_IDX(cb->commit_items, i, svn_client_commit_item3_t *);
- if (strcmp(relpath, svn_path_uri_decode(item->url, pool)) == 0)
+ if (strcmp(relpath, item->session_relpath) == 0)
{
apr_pool_t *cpool = item->incoming_prop_changes->pool;
svn_prop_t *prop = apr_palloc(cpool, sizeof(*prop));
prop->name = apr_pstrdup(cpool, name);
if (value)
- {
- prop->value
- = svn_string_ncreate(value->data, value->len, cpool);
- }
+ prop->value = svn_string_dup(value, pool);
else
prop->value = NULL;