You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2011/12/13 11:20:38 UTC

svn commit: r1213637 - /subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c

Author: julianfoad
Date: Tue Dec 13 10:20:38 2011
New Revision: 1213637

URL: http://svn.apache.org/viewvc?rev=1213637&view=rev
Log:
On the 'showing-merge-info' branch: fix a WC locking issue after r1213635.
Don't take out a WC write lock in 'svn' because we call svn_client_merge4()
which does, and we can't nest the locks.

* subversion/svn/merge-cmd.c
  (get_target_and_lock_abspath): Delete.
(merge_reintegrate_locked, merge_reintegrate): Combine as one function.

Modified:
    subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c

Modified: subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c?rev=1213637&r1=1213636&r2=1213637&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c Tue Dec 13 10:20:38 2011
@@ -34,7 +34,6 @@
 #include "svn_types.h"
 #include "cl.h"
 
-#include "private/svn_wc_private.h"
 #include "svn_private_config.h"
 
 
@@ -95,39 +94,16 @@ quoted_repos_relpath(const char **repos_
   return SVN_NO_ERROR;
 }
 
-/* Set *TARGET_ABSPATH to the absolute path of, and *LOCK_ABSPATH to
- the absolute path to lock for, TARGET_WCPATH. */
-static svn_error_t *
-get_target_and_lock_abspath(const char **target_abspath,
-                            const char **lock_abspath,
-                            const char *target_wcpath,
-                            svn_client_ctx_t *ctx,
-                            apr_pool_t *scratch_pool)
-{
-  svn_node_kind_t kind;
-  SVN_ERR(svn_dirent_get_absolute(target_abspath, target_wcpath,
-                                  scratch_pool));
-  SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, *target_abspath, FALSE,
-                           scratch_pool));
-  if (kind == svn_node_dir)
-    *lock_abspath = *target_abspath;
-  else
-    *lock_abspath = svn_dirent_dirname(*target_abspath, scratch_pool);
-
-  return SVN_NO_ERROR;
-}
-
 /* */
 static svn_error_t *
-merge_reintegrate_locked(const char *source_path_or_url,
-                         const svn_opt_revision_t *source_peg_revision,
-                         const char *target_wcpath,
-                         const char *target_wc_abspath,
-                         svn_boolean_t dry_run,
-                         svn_boolean_t quiet,
-                         const apr_array_header_t *merge_options,
-                         svn_client_ctx_t *ctx,
-                         apr_pool_t *scratch_pool)
+merge_reintegrate(const char *source_path_or_url,
+                  const svn_opt_revision_t *source_peg_revision,
+                  const char *target_wcpath,
+                  svn_boolean_t dry_run,
+                  svn_boolean_t quiet,
+                  const apr_array_header_t *merge_options,
+                  svn_client_ctx_t *ctx,
+                  apr_pool_t *scratch_pool)
 {
   const char *url1, *url2;
   svn_revnum_t rev1, rev2;
@@ -170,36 +146,6 @@ merge_reintegrate_locked(const char *sou
   return SVN_NO_ERROR;
 }
 
-/* */
-static svn_error_t *
-merge_reintegrate(const char *source,
-                  const svn_opt_revision_t *peg_revision,
-                  const char *target_wcpath,
-                  svn_boolean_t dry_run,
-                  svn_boolean_t quiet,
-                  const apr_array_header_t *merge_options,
-                  svn_client_ctx_t *ctx,
-                  apr_pool_t *pool)
-{
-  const char *target_wc_abspath, *lock_abspath;
-
-  SVN_ERR(get_target_and_lock_abspath(&target_wc_abspath, &lock_abspath,
-                                      target_wcpath, ctx, pool));
-
-  if (!dry_run)
-    SVN_WC__CALL_WITH_WRITE_LOCK(
-      merge_reintegrate_locked(source, peg_revision,
-                               target_wcpath, target_wc_abspath,
-                               dry_run, quiet, merge_options, ctx, pool),
-      ctx->wc_ctx, lock_abspath, FALSE /* lock_anchor */, pool);
-  else
-    SVN_ERR(merge_reintegrate_locked(source, peg_revision,
-                                     target_wcpath, target_wc_abspath,
-                                     dry_run, quiet, merge_options, ctx, pool));
-
-  return SVN_NO_ERROR;
-}
-
 /* This implements the `svn_opt_subcommand_t' interface. */
 svn_error_t *
 svn_cl__merge(apr_getopt_t *os,