Author: philip
Date: Sat Mar 13 09:27:20 2010
New Revision: 922511

URL: http://svn.apache.org/viewvc?rev=922511&view=rev
Log:
Remove access batons from client commit code.

* subversion/libsvn_client/commit.c
  (struct check_dir_delete_baton): Remove access baton.
  (check_nonrecursive_dir_delete): Check locks instead of access batons.
  (svn_client_commit4): Acquire and release locks instead of access batons.

Modified:
    subversion/trunk/subversion/libsvn_client/commit.c

Modified: subversion/trunk/subversion/libsvn_client/commit.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit.c?rev=922511&r1=922510&r2=922511&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/commit.c (original)
+++ subversion/trunk/subversion/libsvn_client/commit.c Sat Mar 13 09:27:20 2010
@@ -1001,7 +1001,6 @@ commit_item_is_changed(void *baton, void
 
 struct check_dir_delete_baton
 {
-  svn_wc_adm_access_t *base_dir_access;
   svn_wc_context_t *wc_ctx;
   svn_depth_t depth;
 };
@@ -1010,17 +1009,24 @@ static svn_error_t *
 check_nonrecursive_dir_delete(void *baton, void *this_item, apr_pool_t *pool)
 {
   struct check_dir_delete_baton *btn = baton;
-  const char *target_abspath;
+  const char *target_abspath, *lock_abspath;
+  svn_boolean_t locked_here;
+  svn_node_kind_t kind;
 
   SVN_ERR(svn_dirent_get_absolute(&target_abspath, *(const char **)this_item,
                                   pool));
 
-  {
-    svn_wc_adm_access_t *adm_access;
-    SVN_ERR_W(svn_wc_adm_probe_retrieve(&adm_access, btn->base_dir_access,
-                                        target_abspath, pool),
-              _("Are all the targets part of the same working copy?"));
-  }
+  SVN_ERR(svn_wc__node_get_kind(&kind, btn->wc_ctx, target_abspath, FALSE,
+                                pool));
+  if (kind == svn_node_dir)
+    lock_abspath = target_abspath;
+  else
+    lock_abspath = svn_dirent_dirname(target_abspath, pool);
+
+  SVN_ERR(svn_wc_locked2(&locked_here, NULL, btn->wc_ctx, lock_abspath, pool));
+  if (!locked_here)
+    return svn_error_create(SVN_ERR_WC_LOCKED, NULL,
+                           _("Are all targets part of the same working 
copy?"));
 
   /* ### TODO(sd): This check is slightly too strict.  It should be
      ### possible to:
@@ -1040,13 +1046,10 @@ check_nonrecursive_dir_delete(void *bato
   */
   if (btn->depth != svn_depth_infinity)
     {
-      svn_wc_status2_t *status;
-      svn_node_kind_t kind;
-
-      SVN_ERR(svn_io_check_path(target_abspath, &kind, pool));
-
       if (kind == svn_node_dir)
         {
+          svn_wc_status2_t *status;
+
           /* ### Looking at schedule is probably enough, no need for
                  pristine compare etc. */
           SVN_ERR(svn_wc_status3(&status, btn->wc_ctx, target_abspath, pool,
@@ -1094,8 +1097,8 @@ svn_client_commit4(svn_commit_info_t **c
   apr_hash_t *lock_tokens;
   apr_hash_t *tempfiles = NULL;
   apr_hash_t *checksums;
-  svn_wc_adm_access_t *base_dir_access;
   apr_array_header_t *commit_items;
+  svn_error_t *lock_err;
   svn_error_t *cmt_err = SVN_NO_ERROR, *unlock_err = SVN_NO_ERROR;
   svn_error_t *bump_err = SVN_NO_ERROR, *cleanup_err = SVN_NO_ERROR;
   svn_boolean_t commit_in_progress = FALSE;
@@ -1152,13 +1155,10 @@ svn_client_commit4(svn_commit_info_t **c
         }
     }
 
-  SVN_ERR(svn_wc__adm_open_in_context(&base_dir_access,
-                                      ctx->wc_ctx,
-                                      base_dir,
-                                      TRUE,  /* Write lock */
-                                      -1, /* recursive lock */
-                                      ctx->cancel_func, ctx->cancel_baton,
-                                      pool));
+  if ((lock_err = svn_wc__acquire_write_lock(NULL, ctx->wc_ctx, base_dir,
+                                             pool, pool)))
+    return svn_error_return(svn_error_compose_create(lock_err,
+                     svn_wc__release_write_lock(ctx->wc_ctx, base_dir, pool)));
 
   /* One day we might support committing from multiple working copies, but
      we don't yet.  This check ensures that we don't silently commit a
@@ -1169,7 +1169,6 @@ svn_client_commit4(svn_commit_info_t **c
   {
     struct check_dir_delete_baton btn;
 
-    btn.base_dir_access = base_dir_access;
     btn.wc_ctx = ctx->wc_ctx;
     btn.depth = depth;
     SVN_ERR(svn_iter_apr_array(NULL, targets,
@@ -1308,7 +1307,7 @@ svn_client_commit4(svn_commit_info_t **c
      clean-up. */
   if (! bump_err)
     {
-      unlock_err = svn_wc_adm_close2(base_dir_access, pool);
+      unlock_err = svn_wc__release_write_lock(ctx->wc_ctx, base_dir, pool);
 
       if (! unlock_err)
         cleanup_err = remove_tmpfiles(tempfiles, pool);


Reply via email to