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/10 18:15:19 UTC
svn commit: r1212827 - /subversion/trunk/subversion/libsvn_client/merge.c
Author: julianfoad
Date: Sat Dec 10 17:15:19 2011
New Revision: 1212827
URL: http://svn.apache.org/viewvc?rev=1212827&view=rev
Log:
Factor out common code in the merge code.
* subversion/libsvn_client/merge.c
(ensure_wc_is_suitable_merge_target): Check target existence here ...
(merge_locked, merge_reintegrate_locked, merge_peg_locked): ... instead of
in the callers.
Modified:
subversion/trunk/subversion/libsvn_client/merge.c
Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1212827&r1=1212826&r2=1212827&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Sat Dec 10 17:15:19 2011
@@ -9211,7 +9211,7 @@ merge_cousins_and_supplement_mergeinfo(c
return SVN_NO_ERROR;
}
-/* Perform checks to determine whether of the working copy at TARGET_ABSPATH
+/* Perform checks to determine whether the working copy at TARGET_ABSPATH
* can safely be used as a merge target. Checks are performed according to
* the ALLOW_MIXED_REV, ALLOW_LOCAL_MODS, and ALLOW_SWITCHED_SUBTREES
* parameters. If any checks fail, raise SVN_ERR_CLIENT_NOT_READY_TO_MERGE.
@@ -9228,9 +9228,21 @@ ensure_wc_is_suitable_merge_target(const
svn_boolean_t allow_switched_subtrees,
apr_pool_t *scratch_pool)
{
- /* Avoid the following checks if we don't need them. */
- if (allow_mixed_rev && allow_local_mods && allow_switched_subtrees)
- return SVN_NO_ERROR;
+ svn_node_kind_t target_kind;
+
+ /* Check the target exists. */
+ SVN_ERR(svn_io_check_path(target_abspath, &target_kind, scratch_pool));
+ if (target_kind == svn_node_none)
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("Path '%s' does not exist"),
+ svn_dirent_local_style(target_abspath,
+ scratch_pool));
+ SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, target_abspath, FALSE,
+ scratch_pool));
+ if (target_kind != svn_node_dir && target_kind != svn_node_file)
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Merge target '%s' does not exist in the "
+ "working copy"), target_abspath);
/* Perform the mixed-revision check first because it's the cheapest one. */
if (! allow_mixed_rev)
@@ -9348,29 +9360,12 @@ merge_locked(const char *source1,
svn_revnum_t yc_rev = SVN_INVALID_REVNUM;
apr_pool_t *sesspool;
svn_boolean_t same_repos;
- svn_node_kind_t target_kind;
-
- /* Make sure the target is really there. */
- SVN_ERR(svn_io_check_path(target_abspath, &target_kind, scratch_pool));
- if (target_kind == svn_node_none)
- return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("Path '%s' does not exist"),
- svn_dirent_local_style(target_abspath,
- scratch_pool));
/* ### FIXME: This function really ought to do a history check on
the left and right sides of the merge source, and -- if one is an
ancestor of the other -- just call svn_client_merge_peg3() with
the appropriate args. */
- /* Check the target exists. */
- SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, target_abspath, FALSE,
- scratch_pool));
- if (target_kind != svn_node_dir && target_kind != svn_node_file)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Merge target '%s' does not exist in the "
- "working copy"), target_abspath);
-
/* Do not allow merges into mixed-revision working copies. */
SVN_ERR(ensure_wc_is_suitable_merge_target(target_abspath, ctx,
allow_mixed_rev, TRUE, TRUE,
@@ -10477,15 +10472,6 @@ merge_reintegrate_locked(const char *sou
apr_hash_t *subtrees_with_mergeinfo;
const char *target_url;
svn_revnum_t target_base_rev;
- svn_node_kind_t kind;
-
- /* Make sure the target is really there. */
- SVN_ERR(svn_io_check_path(target_abspath, &kind, scratch_pool));
- if (kind == svn_node_none)
- return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("Path '%s' does not exist"),
- svn_dirent_local_style(target_abspath,
- scratch_pool));
/* Make sure we're dealing with a real URL. */
SVN_ERR(svn_client_url_from_path2(&source.url2, source_path_or_url, ctx,
@@ -10723,24 +10709,9 @@ merge_peg_locked(const char *source_path
svn_boolean_t use_sleep = FALSE;
svn_error_t *err;
svn_boolean_t same_repos;
- svn_node_kind_t target_kind;
SVN_ERR_ASSERT(svn_dirent_is_absolute(target_abspath));
- /* Make sure the target is really there. */
- SVN_ERR(svn_io_check_path(target_abspath, &target_kind, scratch_pool));
- if (target_kind == svn_node_none)
- return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("Path '%s' does not exist"),
- svn_dirent_local_style(target_abspath,
- scratch_pool));
- SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, target_abspath, FALSE,
- scratch_pool));
- if (target_kind != svn_node_dir && target_kind != svn_node_file)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Merge target '%s' does not exist in the "
- "working copy"), target_abspath);
-
SVN_ERR(ensure_wc_is_suitable_merge_target(target_abspath, ctx,
allow_mixed_rev, TRUE, TRUE,
scratch_pool));