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