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 2013/01/30 00:43:53 UTC

svn commit: r1440220 - in /subversion/trunk/subversion: libsvn_client/resolved.c libsvn_wc/conflicts.c

Author: rhuijben
Date: Tue Jan 29 23:43:52 2013
New Revision: 1440220

URL: http://svn.apache.org/viewvc?rev=1440220&view=rev
Log:
Make libsvn_client obtain a write lock before calling the resolver code.
The working copy code shouldn't obtain write locks as that makes it impossible
for the client code to combine operations within a write lock.
(Obtaining a lock when a lock already exists raises an error)

* subversion/libsvn_client/resolved.c
  (svn_client_resolve): Use SVN_WC__CALL_WITH_WRITE_LOCK().

* subversion/libsvn_wc/conflicts.c
  (conflict_status_walker_baton): Remove wc_ctx from baton. Shouldn't be
     necessary.
  (conflict_status_walker): Don't obtain lock here.
  (svn_wc__resolve_conflicts): Update baton initialization.

Modified:
    subversion/trunk/subversion/libsvn_client/resolved.c
    subversion/trunk/subversion/libsvn_wc/conflicts.c

Modified: subversion/trunk/subversion/libsvn_client/resolved.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/resolved.c?rev=1440220&r1=1440219&r2=1440220&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/resolved.c (original)
+++ subversion/trunk/subversion/libsvn_client/resolved.c Tue Jan 29 23:43:52 2013
@@ -55,17 +55,19 @@ svn_client_resolve(const char *path,
 
   SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
 
-  SVN_ERR(svn_wc__resolve_conflicts(ctx->wc_ctx, local_abspath,
-                                    depth,
-                                    TRUE /* resolve_text */,
-                                    "" /* resolve_prop (ALL props) */,
-                                    TRUE /* resolve_tree */,
-                                    conflict_choice,
-                                    ctx->conflict_func2,
-                                    ctx->conflict_baton2,
-                                    ctx->cancel_func, ctx->cancel_baton,
-                                    ctx->notify_func2, ctx->notify_baton2,
-                                    pool));
+  SVN_WC__CALL_WITH_WRITE_LOCK(
+      svn_wc__resolve_conflicts(ctx->wc_ctx, local_abspath,
+                                depth,
+                                TRUE /* resolve_text */,
+                                "" /* resolve_prop (ALL props) */,
+                                TRUE /* resolve_tree */,
+                                conflict_choice,
+                                ctx->conflict_func2,
+                                ctx->conflict_baton2,
+                                ctx->cancel_func, ctx->cancel_baton,
+                                ctx->notify_func2, ctx->notify_baton2,
+                                pool),
+      ctx->wc_ctx, local_abspath, TRUE, pool);
 
   return SVN_NO_ERROR;
 }

Modified: subversion/trunk/subversion/libsvn_wc/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/conflicts.c?rev=1440220&r1=1440219&r2=1440220&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_wc/conflicts.c Tue Jan 29 23:43:52 2013
@@ -2620,7 +2620,6 @@ svn_wc__mark_resolved_prop_conflicts(svn
 /* Baton for conflict_status_walker */
 struct conflict_status_walker_baton
 {
-  svn_wc_context_t *wc_ctx;
   svn_wc__db_t *db;
   svn_boolean_t resolve_text;
   const char *resolve_prop;
@@ -2716,18 +2715,14 @@ conflict_status_walker(void *baton,
                           /* Break the move by reverting the deleted half of
                            * the move, keeping the copied-half as a copy.
                            * Reverting a node requires write lock on parent. */
-                          SVN_WC__CALL_WITH_WRITE_LOCK(
-                            svn_wc__revert_internal(cswb->db, local_abspath,
-                                                    svn_depth_infinity,
-                                                    FALSE, 
-                                                    cswb->cancel_func,
-                                                    cswb->cancel_baton,
-                                                    cswb->notify_func,
-                                                    cswb->notify_baton,
-                                                    scratch_pool),
-                            cswb->wc_ctx,
-                            svn_dirent_dirname(local_abspath, scratch_pool),
-                            FALSE, scratch_pool);
+                          SVN_ERR(svn_wc__revert_internal(cswb->db, local_abspath,
+                                                          svn_depth_infinity,
+                                                          FALSE, 
+                                                          cswb->cancel_func,
+                                                          cswb->cancel_baton,
+                                                          cswb->notify_func,
+                                                          cswb->notify_baton,
+                                                          scratch_pool));
                           break;
                         default:
                           /* ### TODO other node_status cases */
@@ -2876,7 +2871,6 @@ svn_wc__resolve_conflicts(svn_wc_context
   else if (depth == svn_depth_unknown)
     depth = svn_depth_infinity;
 
-  cswb.wc_ctx = wc_ctx;
   cswb.db = wc_ctx->db;
   cswb.resolve_text = resolve_text;
   cswb.resolve_prop = resolve_prop;