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 2016/01/29 18:05:53 UTC
svn commit: r1727617 - /subversion/trunk/subversion/svn/conflict-callbacks.c
Author: stsp
Date: Fri Jan 29 17:05:53 2016
New Revision: 1727617
URL: http://svn.apache.org/viewvc?rev=1727617&view=rev
Log:
Split handling of --accept option and interactive prompting into 2 functions.
No functional change.
* subversion/svn/conflict-callbacks.c
(resolve_conflict_by_accept_option): New, based on the code from
resolve_conflict_interactively() but returns an a conflict option ID
via an output parameter. This allows the caller to tell whether the
--accept option is resolved the conflict.
(resolve_conflict_interactively): Stop handling the --accept option in here
and remove related parameters.
(svn_cl__resolve_conflict): Update caller.
Modified:
subversion/trunk/subversion/svn/conflict-callbacks.c
Modified: subversion/trunk/subversion/svn/conflict-callbacks.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/conflict-callbacks.c?rev=1727617&r1=1727616&r2=1727617&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/conflict-callbacks.c (original)
+++ subversion/trunk/subversion/svn/conflict-callbacks.c Fri Jan 29 17:05:53 2016
@@ -1461,20 +1461,18 @@ handle_tree_conflict(svn_boolean_t *reso
}
static svn_error_t *
-resolve_conflict_interactively(svn_boolean_t *resolved,
- svn_cl__accept_t *accept_which,
- svn_boolean_t *quit,
- svn_boolean_t *external_failed,
- svn_boolean_t *printed_summary,
- svn_client_conflict_t *conflict,
- const char *editor_cmd,
- apr_hash_t *config,
- const char *path_prefix,
- svn_cmdline_prompt_baton_t *pb,
- svn_cl__conflict_stats_t *conflict_stats,
- svn_client_ctx_t *ctx,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+resolve_conflict_by_accept_option(svn_client_conflict_option_id_t *option_id,
+ svn_cl__accept_t accept_which,
+ svn_boolean_t *external_failed,
+ svn_client_conflict_t *conflict,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ const char *path_prefix,
+ svn_cmdline_prompt_baton_t *pb,
+ svn_cl__conflict_stats_t *conflict_stats,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_error_t *err;
const char *base_abspath = NULL;
@@ -1484,8 +1482,6 @@ resolve_conflict_interactively(svn_boole
svn_boolean_t text_conflicted;
apr_array_header_t *props_conflicted;
svn_boolean_t tree_conflicted;
- const svn_string_t *merged_propval;
- svn_client_conflict_option_id_t option_id;
SVN_ERR(svn_client_conflict_get_conflicted(&text_conflicted,
&props_conflicted,
@@ -1501,41 +1497,41 @@ resolve_conflict_interactively(svn_boole
conflict, scratch_pool,
scratch_pool));
- option_id = svn_client_conflict_option_undefined;
+ *option_id = svn_client_conflict_option_unspecified;
/* Handle the --accept option. */
- switch (*accept_which)
+ switch (accept_which)
{
case svn_cl__accept_invalid:
case svn_cl__accept_unspecified:
/* No (or no valid) --accept option, fall through to prompting. */
break;
case svn_cl__accept_postpone:
- option_id = svn_client_conflict_option_postpone;
+ *option_id = svn_client_conflict_option_postpone;
break;
case svn_cl__accept_base:
- option_id = svn_client_conflict_option_base_text;
+ *option_id = svn_client_conflict_option_base_text;
break;
case svn_cl__accept_working:
- option_id = svn_client_conflict_option_merged_text;
+ *option_id = svn_client_conflict_option_merged_text;
break;
case svn_cl__accept_mine_conflict:
- option_id = svn_client_conflict_option_working_text_where_conflicted;
+ *option_id = svn_client_conflict_option_working_text_where_conflicted;
break;
case svn_cl__accept_theirs_conflict:
- option_id = svn_client_conflict_option_incoming_text_where_conflicted;
+ *option_id = svn_client_conflict_option_incoming_text_where_conflicted;
break;
case svn_cl__accept_mine_full:
- option_id = svn_client_conflict_option_working_text;
+ *option_id = svn_client_conflict_option_working_text;
break;
case svn_cl__accept_theirs_full:
- option_id = svn_client_conflict_option_incoming_text;
+ *option_id = svn_client_conflict_option_incoming_text;
break;
case svn_cl__accept_edit:
if (merged_abspath)
{
if (*external_failed)
{
- option_id = svn_client_conflict_option_postpone;
+ *option_id = svn_client_conflict_option_postpone;
break;
}
@@ -1556,7 +1552,7 @@ resolve_conflict_interactively(svn_boole
}
else if (err)
return svn_error_trace(err);
- option_id = svn_client_conflict_option_merged_text;
+ *option_id = svn_client_conflict_option_merged_text;
break;
}
/* else, fall through to prompting. */
@@ -1569,7 +1565,7 @@ resolve_conflict_interactively(svn_boole
if (*external_failed)
{
- option_id = svn_client_conflict_option_postpone;
+ *option_id = svn_client_conflict_option_postpone;
break;
}
@@ -1598,34 +1594,55 @@ resolve_conflict_interactively(svn_boole
return svn_error_trace(err);
if (remains_in_conflict)
- option_id = svn_client_conflict_option_postpone;
+ *option_id = svn_client_conflict_option_postpone;
else
- option_id = svn_client_conflict_option_merged_text;
+ *option_id = svn_client_conflict_option_merged_text;
break;
}
/* else, fall through to prompting. */
break;
}
- if (option_id != svn_client_conflict_option_undefined &&
- option_id != svn_client_conflict_option_postpone)
+ if (*option_id != svn_client_conflict_option_unspecified &&
+ *option_id != svn_client_conflict_option_postpone)
{
- /* Resolve the conflict as per --accept option. */
- SVN_ERR(mark_conflict_resolved(conflict, option_id,
+ SVN_ERR(mark_conflict_resolved(conflict, *option_id,
text_conflicted,
props_conflicted->nelts > 0 ? "" : NULL,
tree_conflicted,
path_prefix, conflict_stats,
ctx, scratch_pool));
- *resolved = TRUE;
- return SVN_NO_ERROR;
}
- if (option_id == svn_client_conflict_option_postpone)
- {
- *resolved = FALSE;
- return SVN_NO_ERROR;
- }
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+resolve_conflict_interactively(svn_boolean_t *resolved,
+ svn_boolean_t *quit,
+ svn_boolean_t *external_failed,
+ svn_boolean_t *printed_summary,
+ svn_client_conflict_t *conflict,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ const char *path_prefix,
+ svn_cmdline_prompt_baton_t *pb,
+ svn_cl__conflict_stats_t *conflict_stats,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t text_conflicted;
+ apr_array_header_t *props_conflicted;
+ svn_boolean_t tree_conflicted;
+ const svn_string_t *merged_propval;
+
+ SVN_ERR(svn_client_conflict_get_conflicted(&text_conflicted,
+ &props_conflicted,
+ &tree_conflicted,
+ conflict,
+ scratch_pool,
+ scratch_pool));
/* Print a summary of conflicts before starting interactive resolution */
if (! *printed_summary)
@@ -1634,9 +1651,6 @@ resolve_conflict_interactively(svn_boole
*printed_summary = TRUE;
}
- /* We're in interactive mode and either the user gave no --accept
- option or the option did not apply; let's prompt. */
-
*resolved = FALSE;
if (text_conflicted
&& (svn_client_conflict_get_incoming_change(conflict) ==
@@ -1786,14 +1800,30 @@ svn_cl__resolve_conflict(svn_boolean_t *
scratch_pool,
scratch_pool));
- /* Resolve the conflict interactively if no resolution option was passed. */
+ /* Resolve the conflict by --accept option or interactively if no
+ * resolution option was passed. */
if (option_id == svn_client_conflict_option_unspecified)
{
- SVN_ERR(resolve_conflict_interactively(resolved, accept_which, quit,
- external_failed, printed_summary,
- conflict, editor_cmd, config,
- path_prefix, pb, conflict_stats,
- ctx, scratch_pool, scratch_pool));
+ SVN_ERR(resolve_conflict_by_accept_option(&option_id, *accept_which,
+ external_failed, conflict,
+ editor_cmd, config,
+ path_prefix, pb,
+ conflict_stats, ctx,
+ scratch_pool, scratch_pool));
+
+ if (option_id == svn_client_conflict_option_unspecified)
+ {
+ /* We're in interactive mode and either the user gave no --accept
+ option or the option did not apply; let's prompt. */
+ SVN_ERR(resolve_conflict_interactively(resolved, quit,
+ external_failed,
+ printed_summary, conflict,
+ editor_cmd, config,
+ path_prefix, pb,
+ conflict_stats, ctx,
+ scratch_pool, scratch_pool));
+ }
+
return SVN_NO_ERROR;
}