You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2017/02/04 18:14:01 UTC

svn commit: r1781692 - /subversion/trunk/subversion/libsvn_client/conflicts.c

Author: stsp
Date: Sat Feb  4 18:14:01 2017
New Revision: 1781692

URL: http://svn.apache.org/viewvc?rev=1781692&view=rev
Log:
In the conflict resolver, move duplicated code into a common helper function.

* subversion/libsvn_client/conflicts.c
  (describe_incoming_move_merge_conflict_option): New helper function.
  (configure_option_incoming_move_file_merge,
   configure_option_incoming_dir_merge,
   svn_client_conflict_option_set_moved_to_abspath): Use new helper instead
    of inlining the same code.

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

Modified: subversion/trunk/subversion/libsvn_client/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/conflicts.c?rev=1781692&r1=1781691&r2=1781692&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_client/conflicts.c Sat Feb  4 18:14:01 2017
@@ -9020,6 +9020,58 @@ follow_move_chains(apr_hash_t *wc_move_t
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+describe_incoming_move_merge_conflict_option(
+  const char **description,
+  svn_client_conflict_t *conflict,
+  svn_client_ctx_t *ctx,
+  struct conflict_tree_incoming_delete_details *details,
+  apr_pool_t *result_pool,
+  apr_pool_t *scratch_pool)
+{
+  apr_array_header_t *move_target_wc_abspaths;
+  svn_wc_operation_t operation;
+  const char *victim_abspath;
+  const char *moved_to_abspath;
+  const char *wcroot_abspath;
+
+  move_target_wc_abspaths =
+    svn_hash_gets(details->wc_move_targets,
+                  details->move_target_repos_relpath);
+  moved_to_abspath = APR_ARRAY_IDX(move_target_wc_abspaths,
+                                   details->wc_move_target_idx,
+                                   const char *);
+
+  victim_abspath = svn_client_conflict_get_local_abspath(conflict);
+  SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx,
+                             victim_abspath, scratch_pool,
+                             scratch_pool));
+
+  operation = svn_client_conflict_get_operation(conflict);
+  if (operation == svn_wc_operation_merge)
+    *description =
+      apr_psprintf(
+        result_pool, _("move '%s' to '%s' and merge"),
+        svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
+                                                        victim_abspath),
+                               scratch_pool),
+        svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
+                                                        moved_to_abspath),
+                               scratch_pool));
+  else
+    *description =
+      apr_psprintf(
+        result_pool, _("move and merge local changes from '%s' into '%s'"),
+        svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
+                                                        victim_abspath),
+                               scratch_pool),
+        svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
+                                                        moved_to_abspath),
+                               scratch_pool));
+
+  return SVN_NO_ERROR;
+}
+
 /* Configure 'incoming move file merge' resolution option for
  * a tree conflict. */
 static svn_error_t *
@@ -9060,18 +9112,11 @@ configure_option_incoming_move_file_merg
       incoming_new_kind == svn_node_none &&
       incoming_change == svn_wc_conflict_action_delete)
     {
-      const char *description;
-      const char *wcroot_abspath;
       const char *victim_abspath;
-      const char *moved_to_abspath;
       apr_array_header_t *move_target_repos_relpaths;
-      apr_array_header_t *move_target_wc_abspaths;
+      const char *description;
 
       victim_abspath = svn_client_conflict_get_local_abspath(conflict);
-      SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx,
-                                 victim_abspath, scratch_pool,
-                                 scratch_pool));
-
       if (details->wc_move_targets == NULL)
         {
           int i;
@@ -9114,34 +9159,11 @@ configure_option_incoming_move_file_merg
       if (apr_hash_count(details->wc_move_targets) == 0)
         return SVN_NO_ERROR;
 
-      move_target_wc_abspaths =
-        svn_hash_gets(details->wc_move_targets,
-                      details->move_target_repos_relpath);
-      moved_to_abspath = APR_ARRAY_IDX(move_target_wc_abspaths,
-                                       details->wc_move_target_idx,
-                                       const char *);
-
-      if (operation == svn_wc_operation_merge)
-        description =
-          apr_psprintf(
-            scratch_pool, _("move '%s' to '%s' and merge"),
-            svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                            victim_abspath),
-                                   scratch_pool),
-            svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                            moved_to_abspath),
-                                   scratch_pool));
-      else
-        description =
-          apr_psprintf(
-            scratch_pool, _("move and merge local changes from '%s' into '%s'"),
-            svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                            victim_abspath),
-                                   scratch_pool),
-            svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                            moved_to_abspath),
-                                   scratch_pool));
-
+      SVN_ERR(describe_incoming_move_merge_conflict_option(&description,
+                                                           conflict, ctx,
+                                                           details,
+                                                           scratch_pool,
+                                                           scratch_pool));
       add_resolution_option(
         options, conflict,
         svn_client_conflict_option_incoming_move_file_text_merge,
@@ -9195,9 +9217,7 @@ configure_option_incoming_dir_merge(svn_
       const char *description;
       const char *wcroot_abspath;
       const char *victim_abspath;
-      const char *moved_to_abspath;
       apr_array_header_t *move_target_repos_relpaths;
-      apr_array_header_t *move_target_wc_abspaths;
 
       victim_abspath = svn_client_conflict_get_local_abspath(conflict);
       SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx,
@@ -9246,34 +9266,11 @@ configure_option_incoming_dir_merge(svn_
       if (apr_hash_count(details->wc_move_targets) == 0)
         return SVN_NO_ERROR;
 
-      move_target_wc_abspaths =
-        svn_hash_gets(details->wc_move_targets,
-                      details->move_target_repos_relpath);
-      moved_to_abspath = APR_ARRAY_IDX(move_target_wc_abspaths,
-                                       details->wc_move_target_idx,
-                                       const char *);
-
-      if (operation == svn_wc_operation_merge)
-        description =
-          apr_psprintf(
-            scratch_pool, _("move '%s' to '%s' and merge"),
-            svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                            victim_abspath),
-                                   scratch_pool),
-            svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                            moved_to_abspath),
-                                   scratch_pool));
-      else
-        description =
-          apr_psprintf(
-            scratch_pool, _("move and merge local changes from '%s' into '%s'"),
-            svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                            victim_abspath),
-                                   scratch_pool),
-            svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                            moved_to_abspath),
-                                   scratch_pool));
-
+      SVN_ERR(describe_incoming_move_merge_conflict_option(&description,
+                                                           conflict, ctx,
+                                                           details,
+                                                           scratch_pool,
+                                                           scratch_pool));
       add_resolution_option(options, conflict,
                             svn_client_conflict_option_incoming_move_dir_merge,
                             _("Move and merge"), description,
@@ -9556,8 +9553,6 @@ svn_client_conflict_option_set_moved_to_
   svn_client_conflict_t *conflict = option->conflict;
   struct conflict_tree_incoming_delete_details *details;
   const char *victim_abspath;
-  const char *moved_to_abspath;
-  const char *wcroot_abspath;
   apr_array_header_t *move_target_wc_abspaths;
 
   SVN_ERR_ASSERT(svn_client_conflict_option_get_id(option) ==
@@ -9587,24 +9582,15 @@ svn_client_conflict_option_set_moved_to_
                             svn_dirent_local_style(victim_abspath,
                                                    scratch_pool));
 
-  /* Record the user's preference and update the option description. */
+  /* Record the user's preference. */
   details->wc_move_target_idx = preferred_move_target_idx;
 
-  SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx,
-                             victim_abspath, scratch_pool,
-                             scratch_pool));
-  moved_to_abspath = APR_ARRAY_IDX(move_target_wc_abspaths,
-                                   preferred_move_target_idx,
-                                   const char *);
-  option->description =
-    apr_psprintf(
-      option->pool, _("move '%s' to '%s' and merge'"),
-      svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                      victim_abspath),
-                             scratch_pool),
-      svn_dirent_local_style(svn_dirent_skip_ancestor(wcroot_abspath,
-                                                      moved_to_abspath),
-                             scratch_pool));
+  /* Update option description. */
+  SVN_ERR(describe_incoming_move_merge_conflict_option(&option->description,
+                                                       conflict, ctx,
+                                                       details,
+                                                       conflict->pool,
+                                                       scratch_pool));
   return SVN_NO_ERROR;
 }