You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/05/25 20:44:50 UTC
svn commit: r948165 - in /subversion/trunk/subversion/libsvn_client:
client.h commit.c copy.c locking_commands.c mergeinfo.c ra.c switch.c
update.c
Author: hwright
Date: Tue May 25 18:44:49 2010
New Revision: 948165
URL: http://svn.apache.org/viewvc?rev=948165&view=rev
Log:
Make an internal client library path require absolute paths.
* subversion/libsvn_client/switch.c,
subversion/libsvn_client/copy.c,
subversion/libsvn_client/mergeinfo.c,
subversion/libsvn_client/update.c,
subversion/libsvn_client/commit.c,
subversion/libsvn_client/locking_commands.c:
Update callers througout.
* subversion/libsvn_client/client.h
(svn_client__ra_session_from_path,
svn_client__open_ra_session_internal): Update param name, docstring.
* subversion/libsvn_client/ra.c
(callback_baton_t): Change base_dir member name.
(invalidate_wc_props, set_wc_prop, get_wc_prop): Use the base absolute path.
(svn_client__open_ra_session_internal): Require an absolute path.
(svn_client__ra_session_from_path): Update caller.
Modified:
subversion/trunk/subversion/libsvn_client/client.h
subversion/trunk/subversion/libsvn_client/commit.c
subversion/trunk/subversion/libsvn_client/copy.c
subversion/trunk/subversion/libsvn_client/locking_commands.c
subversion/trunk/subversion/libsvn_client/mergeinfo.c
subversion/trunk/subversion/libsvn_client/ra.c
subversion/trunk/subversion/libsvn_client/switch.c
subversion/trunk/subversion/libsvn_client/update.c
Modified: subversion/trunk/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/client.h?rev=948165&r1=948164&r2=948165&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/client.h (original)
+++ subversion/trunk/subversion/libsvn_client/client.h Tue May 25 18:44:49 2010
@@ -250,8 +250,8 @@ svn_client__get_youngest_common_ancestor
that it is the same node in both PEG_REVISION and REVISION. If it
is not, then @c SVN_ERR_CLIENT_UNRELATED_RESOURCES is returned.
- BASE_DIR is the working copy path the ra_session corresponds to, should
- only be used if PATH_OR_URL is a url.
+ BASE_DIR_ABSPATH is the working copy path the ra_session corresponds to,
+ should only be used if PATH_OR_URL is a url.
If PEG_REVISION's kind is svn_opt_revision_unspecified, it is
interpreted as "head" for a URL or "working" for a working-copy path.
@@ -269,7 +269,7 @@ svn_client__ra_session_from_path(svn_ra_
svn_revnum_t *rev_p,
const char **url_p,
const char *path_or_url,
- const char *base_dir,
+ const char *base_dir_abspath,
const svn_opt_revision_t *peg_revision,
const svn_opt_revision_t *revision,
svn_client_ctx_t *ctx,
@@ -376,7 +376,7 @@ svn_client__default_walker_error_handler
- READ_ONLY_WC indicates that the RA layer should not attempt to
modify the WC props directly.
- BASE_DIR may be NULL if the RA operation does not correspond to a
+ BASE_DIR_ABSPATH may be NULL if the RA operation does not correspond to a
working copy (in which case, USE_ADMIN should be FALSE).
The calling application's authentication baton is provided in CTX,
@@ -387,7 +387,7 @@ svn_client__default_walker_error_handler
svn_error_t *
svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
const char *base_url,
- const char *base_dir,
+ const char *base_dir_abspath,
const apr_array_header_t *commit_items,
svn_boolean_t use_admin,
svn_boolean_t read_only_wc,
Modified: subversion/trunk/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit.c?rev=948165&r1=948164&r2=948165&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/commit.c (original)
+++ subversion/trunk/subversion/libsvn_client/commit.c Tue May 25 18:44:49 2010
@@ -610,11 +610,13 @@ get_ra_editor(svn_ra_session_t **ra_sess
{
void *commit_baton;
apr_hash_t *commit_revprops;
+ const char *base_dir_abspath;
+
+ SVN_ERR(svn_dirent_get_absolute(&base_dir_abspath, base_dir, pool));
/* Open an RA session to URL. */
- SVN_ERR(svn_client__open_ra_session_internal(ra_session,
- base_url, base_dir,
- commit_items,
+ SVN_ERR(svn_client__open_ra_session_internal(ra_session, base_url,
+ base_dir_abspath, commit_items,
is_commit, !is_commit,
ctx, pool));
Modified: subversion/trunk/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/copy.c?rev=948165&r1=948164&r2=948165&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/copy.c (original)
+++ subversion/trunk/subversion/libsvn_client/copy.c Tue May 25 18:44:49 2010
@@ -1160,6 +1160,7 @@ wc_to_repos_copy(svn_commit_info_t **com
{
const char *message;
const char *top_src_path, *top_dst_url;
+ const char *top_src_abspath;
svn_ra_session_t *ra_session;
const svn_delta_editor_t *editor;
void *edit_baton;
@@ -1214,9 +1215,10 @@ wc_to_repos_copy(svn_commit_info_t **com
pool);
}
+ SVN_ERR(svn_dirent_get_absolute(&top_src_abspath, top_src_path, pool));
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, top_dst_url,
- top_src_path,
- NULL, TRUE, TRUE, ctx, pool));
+ top_src_abspath, NULL, TRUE,
+ TRUE, ctx, pool));
/* If requested, determine the nearest existing parent of the destination,
and reparent the ra session there. */
Modified: subversion/trunk/subversion/libsvn_client/locking_commands.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/locking_commands.c?rev=948165&r1=948164&r2=948165&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/locking_commands.c (original)
+++ subversion/trunk/subversion/libsvn_client/locking_commands.c Tue May 25 18:44:49 2010
@@ -390,6 +390,7 @@ svn_client_lock(const apr_array_header_t
apr_pool_t *pool)
{
const char *base_dir;
+ const char *base_dir_abspath = NULL;
const char *common_parent_url;
svn_ra_session_t *ra_session;
apr_hash_t *path_revs, *urls_to_paths;
@@ -412,6 +413,8 @@ svn_client_lock(const apr_array_header_t
ctx, pool));
/* Open an RA session to the common parent of TARGETS. */
+ if (base_dir)
+ SVN_ERR(svn_dirent_get_absolute(&base_dir_abspath, base_dir, pool));
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, common_parent_url,
base_dir, NULL, FALSE, FALSE, ctx, pool));
@@ -434,6 +437,7 @@ svn_client_unlock(const apr_array_header
apr_pool_t *pool)
{
const char *base_dir;
+ const char *base_dir_abspath = NULL;
const char *common_parent_url;
svn_ra_session_t *ra_session;
apr_hash_t *path_tokens, *urls_to_paths;
@@ -447,8 +451,10 @@ svn_client_unlock(const apr_array_header
ctx, pool));
/* Open an RA session. */
+ if (base_dir)
+ SVN_ERR(svn_dirent_get_absolute(&base_dir_abspath, base_dir, pool));
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, common_parent_url,
- base_dir, NULL, FALSE, FALSE, ctx, pool));
+ base_dir_abspath, NULL, FALSE, FALSE, ctx, pool));
/* If break_lock is not set, lock tokens are required by the server.
If the targets were all URLs, ensure that we provide lock tokens,
Modified: subversion/trunk/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/mergeinfo.c?rev=948165&r1=948164&r2=948165&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/trunk/subversion/libsvn_client/mergeinfo.c Tue May 25 18:44:49 2010
@@ -1597,12 +1597,13 @@ location_from_path_and_rev(const char **
svn_ra_session_t *ra_session;
apr_pool_t *subpool = svn_pool_create(pool);
svn_revnum_t rev;
+ const char *local_abspath;
+
+ if (!svn_path_is_url(path_or_url))
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url, subpool));
SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev, url,
- path_or_url,
- !svn_path_is_url(path_or_url)
- ? path_or_url
- : NULL,
+ path_or_url, local_abspath,
peg_revision, peg_revision,
ctx, subpool));
*url = apr_pstrdup(pool, *url);
Modified: subversion/trunk/subversion/libsvn_client/ra.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/ra.c?rev=948165&r1=948164&r2=948165&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/ra.c (original)
+++ subversion/trunk/subversion/libsvn_client/ra.c Tue May 25 18:44:49 2010
@@ -49,7 +49,7 @@ typedef struct
/* Holds the directory that corresponds to the REPOS_URL at svn_ra_open3()
time. When callbacks specify a relative path, they are joined with
this base directory. */
- const char *base_dir;
+ const char *base_dir_abspath;
/* When true, makes sure temporary files are created
outside the working copy. */
@@ -117,12 +117,10 @@ get_wc_prop(void *baton,
}
/* If we don't have a base directory, then there are no properties. */
- else if (cb->base_dir == NULL)
+ else if (cb->base_dir_abspath == NULL)
return SVN_NO_ERROR;
- SVN_ERR(svn_dirent_get_absolute(&local_abspath,
- svn_dirent_join(cb->base_dir, relpath, pool),
- pool));
+ local_abspath = svn_dirent_join(cb->base_dir_abspath, relpath, pool);
return svn_error_return(svn_wc_prop_get2(value, cb->ctx->wc_ctx,
local_abspath, name, pool, pool));
@@ -188,9 +186,7 @@ set_wc_prop(void *baton,
callback_baton_t *cb = baton;
const char *local_abspath;
- SVN_ERR(svn_dirent_get_absolute(&local_abspath,
- svn_dirent_join(cb->base_dir, path, pool),
- pool));
+ local_abspath = svn_dirent_join(cb->base_dir_abspath, path, pool);
/* We pass 1 for the 'force' parameter here. Since the property is
coming from the repository, we definitely want to accept it.
@@ -255,9 +251,7 @@ invalidate_wc_props(void *baton,
wb.prop_name = prop_name;
wb.wc_ctx = cb->ctx->wc_ctx;
- SVN_ERR(svn_dirent_get_absolute(&local_abspath,
- svn_dirent_join(cb->base_dir, path, pool),
- pool));
+ local_abspath = svn_dirent_join(cb->base_dir_abspath, path, pool);
return svn_error_return(
svn_wc__node_walk_children(cb->ctx->wc_ctx, local_abspath, FALSE,
@@ -289,7 +283,7 @@ get_client_string(void *baton,
svn_error_t *
svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
const char *base_url,
- const char *base_dir,
+ const char *base_dir_abspath,
const apr_array_header_t *commit_items,
svn_boolean_t use_admin,
svn_boolean_t read_only_wc,
@@ -300,7 +294,9 @@ svn_client__open_ra_session_internal(svn
callback_baton_t *cb = apr_pcalloc(pool, sizeof(*cb));
const char *uuid = NULL;
- SVN_ERR_ASSERT(base_dir != NULL || ! use_admin);
+ SVN_ERR_ASSERT(base_dir_abspath != NULL || ! use_admin);
+ SVN_ERR_ASSERT(base_dir_abspath == NULL
+ || svn_dirent_is_absolute(base_dir_abspath));
cbtable->open_tmp_file = open_tmp_file;
cbtable->get_wc_prop = use_admin ? get_wc_prop : NULL;
@@ -313,21 +309,17 @@ svn_client__open_ra_session_internal(svn
cbtable->cancel_func = ctx->cancel_func ? cancel_callback : NULL;
cbtable->get_client_string = get_client_string;
- cb->base_dir = base_dir;
+ cb->base_dir_abspath = base_dir_abspath;
cb->read_only_wc = read_only_wc;
cb->pool = pool;
cb->commit_items = commit_items;
cb->ctx = ctx;
- if (base_dir)
+ if (base_dir_abspath)
{
- const char *base_dir_abspath;
- svn_error_t *err;
-
- SVN_ERR(svn_dirent_get_absolute(&base_dir_abspath, base_dir, pool));
- err = svn_wc__node_get_repos_info(NULL, &uuid, ctx->wc_ctx,
- base_dir_abspath, FALSE, FALSE,
- pool, pool);
+ svn_error_t *err = svn_wc__node_get_repos_info(NULL, &uuid, ctx->wc_ctx,
+ base_dir_abspath, FALSE,
+ FALSE, pool, pool);
if (err && (err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY
|| err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND
@@ -411,7 +403,7 @@ svn_client__ra_session_from_path(svn_ra_
svn_revnum_t *rev_p,
const char **url_p,
const char *path_or_url,
- const char *base_dir,
+ const char *base_dir_abspath,
const svn_opt_revision_t *peg_revision_p,
const svn_opt_revision_t *revision,
svn_client_ctx_t *ctx,
@@ -440,7 +432,8 @@ svn_client__ra_session_from_path(svn_ra_
pool));
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, initial_url,
- base_dir, NULL, base_dir != NULL,
+ base_dir_abspath, NULL,
+ base_dir_abspath != NULL,
FALSE, ctx, pool));
dead_end_rev.kind = svn_opt_revision_unspecified;
Modified: subversion/trunk/subversion/libsvn_client/switch.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/switch.c?rev=948165&r1=948164&r2=948165&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/switch.c (original)
+++ subversion/trunk/subversion/libsvn_client/switch.c Tue May 25 18:44:49 2010
@@ -166,7 +166,7 @@ switch_internal(svn_revnum_t *result_rev
/* Open an RA session to 'source' URL */
SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum,
&switch_rev_url,
- switch_url, anchor,
+ switch_url, anchor_abspath,
peg_revision, revision,
ctx, pool));
SVN_ERR(svn_ra_get_repos_root2(ra_session, &source_root, pool));
Modified: subversion/trunk/subversion/libsvn_client/update.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/update.c?rev=948165&r1=948164&r2=948165&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/update.c (original)
+++ subversion/trunk/subversion/libsvn_client/update.c Tue May 25 18:44:49 2010
@@ -199,7 +199,7 @@ update_internal(svn_revnum_t *result_rev
/* Open an RA session for the URL */
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, anchor_url,
- anchor, NULL, TRUE, TRUE,
+ anchor_abspath, NULL, TRUE, TRUE,
ctx, pool));
/* ### todo: shouldn't svn_client__get_revision_number be able
Re: svn commit: r948165 - in /subversion/trunk/subversion/libsvn_client:
client.h commit.c copy.c locking_commands.c mergeinfo.c ra.c switch.c
update.c
Posted by Greg Stein <gs...@gmail.com>.
On Tue, May 25, 2010 at 14:44, <hw...@apache.org> wrote:
>...
> +++ subversion/trunk/subversion/libsvn_client/mergeinfo.c Tue May 25 18:44:49 2010
> @@ -1597,12 +1597,13 @@ location_from_path_and_rev(const char **
> svn_ra_session_t *ra_session;
> apr_pool_t *subpool = svn_pool_create(pool);
> svn_revnum_t rev;
> + const char *local_abspath;
> +
> + if (!svn_path_is_url(path_or_url))
> + SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url, subpool));
>
> SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev, url,
> - path_or_url,
> - !svn_path_is_url(path_or_url)
> - ? path_or_url
> - : NULL,
> + path_or_url, local_abspath,
> peg_revision, peg_revision,
> ctx, subpool));
local_abspath should be initialized to NULL for equivalence.
>...
Cheers,
-g