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 2013/02/15 23:39:45 UTC
svn commit: r1446794 - in /subversion/trunk/subversion/svn: cl.h
conflict-callbacks.c merge-cmd.c notify.c patch-cmd.c switch-cmd.c
update-cmd.c
Author: julianfoad
Date: Fri Feb 15 22:39:45 2013
New Revision: 1446794
URL: http://svn.apache.org/r1446794
Log:
Let svn_cl__resolve_postponed_conflicts() tell the caller whether it
resolved all the conflicts. We don't use that yet, but we will soon. And
some other small tweaks the 'svn' conflict notification code.
* subversion/svn/cl.h,
(svn_cl__resolve_postponed_conflicts): Return a flag indicating whether
all conflicts were resolved.
(svn_cl__notifier_reset_conflict_stats): New function.
(svn_cl__print_conflict_stats): Rename to
svn_cl__notifier_print_conflict_stats() and s/pool/scratch_pool/ and
s/notify_baton/baton/ (the last being a follow-up to r1446746.
* subversion/svn/conflict-callbacks.c
(get_postponed_conflicted_paths): Simplify: remove a special-case return.
(svn_cl__resolve_postponed_conflicts): Implement the extra parameter, and
remove the special-case return.
* subversion/svn/notify.c
(svn_cl__notifier_reset_conflict_stats): New function.
(svn_cl__print_conflict_stats): Rename to
svn_cl__notifier_print_conflict_stats() and s/pool/scratch_pool/.
* subversion/svn/merge-cmd.c
(svn_cl__merge): Update calls to svn_cl__print_conflict_stats().
* subversion/svn/patch-cmd.c
(svn_cl__patch): Same.
* subversion/svn/switch-cmd.c
(svn_cl__switch): Same.
* subversion/svn/update-cmd.c
(svn_cl__update): Same.
Modified:
subversion/trunk/subversion/svn/cl.h
subversion/trunk/subversion/svn/conflict-callbacks.c
subversion/trunk/subversion/svn/merge-cmd.c
subversion/trunk/subversion/svn/notify.c
subversion/trunk/subversion/svn/patch-cmd.c
subversion/trunk/subversion/svn/switch-cmd.c
subversion/trunk/subversion/svn/update-cmd.c
Modified: subversion/trunk/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/cl.h?rev=1446794&r1=1446793&r2=1446794&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/cl.h (original)
+++ subversion/trunk/subversion/svn/cl.h Fri Feb 15 22:39:45 2013
@@ -374,14 +374,20 @@ svn_cl__conflict_func_postpone(svn_wc_co
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Perform conflict resolver on any conflicted paths stored in the BATON
+/* Perform conflict resolution on any conflicted paths stored in the BATON
* which was obtained from svn_cl__get_conflict_func_postpone_baton().
*
+ * If CONFLICTS_ALL_RESOLVED is not null, set *CONFLICTS_ALL_RESOLVED to
+ * true if this resolves all the conflicts on the paths that were
+ * recorded (or if none were recorded); or to false if some conflicts
+ * remain.
+ *
* The conflict resolution will be interactive if ACCEPT_WHICH is
* svn_cl__accept_unspecified.
*/
svn_error_t *
-svn_cl__resolve_postponed_conflicts(void *baton,
+svn_cl__resolve_postponed_conflicts(svn_boolean_t *conflicts_all_resolved,
+ void *baton,
svn_cl__accept_t accept_which,
const char *editor_cmd,
svn_client_ctx_t *ctx,
@@ -577,13 +583,20 @@ svn_cl__check_externals_failed_notify_wr
const svn_wc_notify_t *n,
apr_pool_t *pool);
-/* Print conflict stats accumulated in NOTIFY_BATON.
+/* Reset to zero the conflict stats accumulated in BATON, which is the
+ * notifier baton from svn_cl__get_notifier().
+ */
+svn_error_t *
+svn_cl__notifier_reset_conflict_stats(void *baton);
+
+/* Print the conflict stats accumulated in BATON, which is the
+ * notifier baton from svn_cl__get_notifier().
* Return any error encountered during printing.
- * Do all allocations in POOL.*/
+ */
svn_error_t *
-svn_cl__print_conflict_stats(void *notify_baton, apr_pool_t *pool);
+svn_cl__notifier_print_conflict_stats(void *baton, apr_pool_t *scratch_pool);
+
-
/*** Log message callback stuffs. ***/
/* Allocate in POOL a baton for use with svn_cl__get_log_message().
Modified: subversion/trunk/subversion/svn/conflict-callbacks.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/conflict-callbacks.c?rev=1446794&r1=1446793&r2=1446794&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/conflict-callbacks.c (original)
+++ subversion/trunk/subversion/svn/conflict-callbacks.c Fri Feb 15 22:39:45 2013
@@ -1137,9 +1137,6 @@ get_postponed_conflicted_paths(void *bat
apr_array_header_t *result_array;
int i;
- if (apr_hash_count(conflicted_paths) == 0)
- return NULL;
-
sorted_array = svn_sort__hash(conflicted_paths,
svn_sort_compare_items_as_paths,
apr_hash_pool_get(conflicted_paths));
@@ -1158,7 +1155,8 @@ get_postponed_conflicted_paths(void *bat
}
svn_error_t *
-svn_cl__resolve_postponed_conflicts(void *baton,
+svn_cl__resolve_postponed_conflicts(svn_boolean_t *conflicts_all_resolved,
+ void *baton,
svn_cl__accept_t accept_which,
const char *editor_cmd,
svn_client_ctx_t *ctx,
@@ -1169,8 +1167,9 @@ svn_cl__resolve_postponed_conflicts(void
apr_pool_t *iterpool;
targets = get_postponed_conflicted_paths(baton, scratch_pool);
- if (targets == NULL)
- return SVN_NO_ERROR;
+
+ if (conflicts_all_resolved != NULL)
+ *conflicts_all_resolved = TRUE;
iterpool = svn_pool_create(scratch_pool);
for (i = 0; i < targets->nelts; i++)
@@ -1181,6 +1180,7 @@ svn_cl__resolve_postponed_conflicts(void
svn_wc_conflict_resolver_func2_t conflict_func2;
void *conflict_baton2;
svn_cl__interactive_conflict_baton_t *b;
+ svn_boolean_t text_c, prop_c, tree_c;
svn_pool_clear(iterpool);
@@ -1216,6 +1216,16 @@ svn_cl__resolve_postponed_conflicts(void
svn_error_clear(err);
}
+
+ /* Report if we left any of the conflicts unresolved */
+ if (conflicts_all_resolved != NULL)
+ {
+ SVN_ERR(svn_wc_conflicted_p3(&text_c, &prop_c, &tree_c,
+ ctx->wc_ctx, local_abspath,
+ scratch_pool));
+ if (text_c || prop_c || tree_c)
+ *conflicts_all_resolved = FALSE;
+ }
}
svn_pool_destroy(iterpool);
Modified: subversion/trunk/subversion/svn/merge-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/merge-cmd.c?rev=1446794&r1=1446793&r2=1446794&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/merge-cmd.c (original)
+++ subversion/trunk/subversion/svn/merge-cmd.c Fri Feb 15 22:39:45 2013
@@ -586,12 +586,14 @@ svn_cl__merge(apr_getopt_t *os,
svn_error_t *err = SVN_NO_ERROR;
if (! opt_state->quiet)
- err = svn_cl__print_conflict_stats(ctx->notify_baton2, pool);
+ err = svn_cl__notifier_print_conflict_stats(ctx->notify_baton2,
+ pool);
/* Resolve any postponed conflicts. (Only if we've been using the
* default 'postpone' resolver which remembers what was postponed.) */
if (!err && ctx->conflict_func2 == svn_cl__conflict_func_postpone)
- err = svn_cl__resolve_postponed_conflicts(ctx->conflict_baton2,
+ err = svn_cl__resolve_postponed_conflicts(NULL,
+ ctx->conflict_baton2,
opt_state->accept_which,
opt_state->editor_cmd,
ctx, pool);
Modified: subversion/trunk/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/notify.c?rev=1446794&r1=1446793&r2=1446794&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/notify.c (original)
+++ subversion/trunk/subversion/svn/notify.c Fri Feb 15 22:39:45 2013
@@ -65,29 +65,43 @@ struct notify_baton
svn_error_t *
-svn_cl__print_conflict_stats(void *baton, apr_pool_t *pool)
+svn_cl__notifier_reset_conflict_stats(void *baton)
+{
+ struct notify_baton *nb = baton;
+
+ nb->text_conflicts = 0;
+ nb->prop_conflicts = 0;
+ nb->tree_conflicts = 0;
+ nb->skipped_paths = 0;
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_cl__notifier_print_conflict_stats(void *baton, apr_pool_t *scratch_pool)
{
struct notify_baton *nb = baton;
if (nb->text_conflicts > 0 || nb->prop_conflicts > 0
|| nb->tree_conflicts > 0 || nb->skipped_paths > 0)
- SVN_ERR(svn_cmdline_printf(pool, "%s", _("Summary of conflicts:\n")));
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _("Summary of conflicts:\n")));
if (nb->text_conflicts > 0)
- SVN_ERR(svn_cmdline_printf(
- pool, _(" Text conflicts: %d\n"), nb->text_conflicts));
-
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Text conflicts: %d\n"),
+ nb->text_conflicts));
if (nb->prop_conflicts > 0)
- SVN_ERR(svn_cmdline_printf(
- pool, _(" Property conflicts: %d\n"), nb->prop_conflicts));
-
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Property conflicts: %d\n"),
+ nb->prop_conflicts));
if (nb->tree_conflicts > 0)
- SVN_ERR(svn_cmdline_printf(
- pool, _(" Tree conflicts: %d\n"), nb->tree_conflicts));
-
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Tree conflicts: %d\n"),
+ nb->tree_conflicts));
if (nb->skipped_paths > 0)
- SVN_ERR(svn_cmdline_printf(
- pool, _(" Skipped paths: %d\n"), nb->skipped_paths));
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Skipped paths: %d\n"),
+ nb->skipped_paths));
return SVN_NO_ERROR;
}
@@ -988,7 +1002,8 @@ notify(void *baton, const svn_wc_notify_
case svn_wc_notify_conflict_resolver_starting:
/* Once all operations invoke the interactive conflict resolution after
- * they've completed, we can run svn_cl__print_conflict_stats() here. */
+ * they've completed, we can run svn_cl__notifier_print_conflict_stats()
+ * here. */
break;
case svn_wc_notify_conflict_resolver_done:
Modified: subversion/trunk/subversion/svn/patch-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/patch-cmd.c?rev=1446794&r1=1446793&r2=1446794&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/patch-cmd.c (original)
+++ subversion/trunk/subversion/svn/patch-cmd.c Fri Feb 15 22:39:45 2013
@@ -92,7 +92,7 @@ svn_cl__patch(apr_getopt_t *os,
if (! opt_state->quiet)
- SVN_ERR(svn_cl__print_conflict_stats(ctx->notify_baton2, pool));
+ SVN_ERR(svn_cl__notifier_print_conflict_stats(ctx->notify_baton2, pool));
return SVN_NO_ERROR;
}
Modified: subversion/trunk/subversion/svn/switch-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/switch-cmd.c?rev=1446794&r1=1446793&r2=1446794&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/switch-cmd.c (original)
+++ subversion/trunk/subversion/svn/switch-cmd.c Fri Feb 15 22:39:45 2013
@@ -193,12 +193,13 @@ svn_cl__switch(apr_getopt_t *os,
if (! opt_state->quiet)
{
- err = svn_cl__print_conflict_stats(nwb.wrapped_baton, scratch_pool);
+ err = svn_cl__notifier_print_conflict_stats(nwb.wrapped_baton, scratch_pool);
if (err)
return svn_error_compose_create(externals_err, err);
}
- err = svn_cl__resolve_postponed_conflicts(ctx->conflict_baton2,
+ err = svn_cl__resolve_postponed_conflicts(NULL,
+ ctx->conflict_baton2,
opt_state->accept_which,
opt_state->editor_cmd,
ctx, scratch_pool);
Modified: subversion/trunk/subversion/svn/update-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/update-cmd.c?rev=1446794&r1=1446793&r2=1446794&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/update-cmd.c (original)
+++ subversion/trunk/subversion/svn/update-cmd.c Fri Feb 15 22:39:45 2013
@@ -189,12 +189,14 @@ svn_cl__update(apr_getopt_t *os,
/* ### Layering problem: This call assumes that the baton we're
* passing is the one that was originally provided by
* svn_cl__get_notifier(), but that isn't promised. */
- err = svn_cl__print_conflict_stats(nwb.wrapped_baton, scratch_pool);
+ err = svn_cl__notifier_print_conflict_stats(nwb.wrapped_baton,
+ scratch_pool);
if (err)
return svn_error_compose_create(externals_err, err);
}
- err = svn_cl__resolve_postponed_conflicts(ctx->conflict_baton2,
+ err = svn_cl__resolve_postponed_conflicts(NULL,
+ ctx->conflict_baton2,
opt_state->accept_which,
opt_state->editor_cmd,
ctx, scratch_pool);