Author: breser
Date: Tue Aug 19 13:09:32 2014
New Revision: 1618857
URL: http://svn.apache.org/r1618857
Log:
Add svn_diff_file_output_merge3() with cancel support and update callers.
* subversion/include/svn_diff.h
(svn_diff_file_output_merge3): New function.
(svn_diff_file_output_merge2): Deprecate.
* subversion/libsvn_diff/diff_file.c
(svn_diff_file_output_merge2): Replace with ...
(svn_diff_file_output_merge3): that adds cancel support.
* subversion/libsvn_diff/deprecated.c
(svn_diff_file_output_merge2): New implementation that just uses
svn_diff_file_output_merge3().
* subversion/libsvn_wc/conflicts.h
(svn_wc__mark_resolved_text_conflict): Add cancel support.
* subversion/libsvn_wc/conflicts.c
(merge_showing_conflicts, eval_text_conflict_func_result,
resolve_text_conflict, svn_wc__mark_resolved_text_conflict):
Add cancel support.
(svn_wc__conflict_invoke_resolver): Pass cancel arguments to
resolve_text_conflict() and svn_wc__mark_resolved_text_conflict()
(resolve_text_conflict_on_node): Pass cancel arguments to
merge_showing_conflicts.
* subversion/libsvn_wc/merge.c
(do_text_merge): Add cancel support.
(merge_text_file): Update caller.
* subversion/libsvn_wc/adm_crawler.c
(restore_file): Update call to svn_wc__mark_resolved_text_conflict().
Did not add cancel support here.
* subversion/svn/conflict-callbacks.c
(show_conflicts, merge_prop_conflict, show_prop_conflict,
edit_prop_conflict): Add cancel support.
(handle_text_conflict): Update call to show_conflicts().
(handle_prop_conflict): Update call to show_prop_conflict().
* subversion/tests/libsvn_diff/diff-diff3-test.c
(three_way_merge): Switch to svn_diff_file_output_merge3().
* tools/diff/diff3.c
(do_diff3): Switch to svn_diff_file_output_merge3().
* tools/diff/diff4.c
(do_diff4): Switch to svn_diff_file_output_merge3().
Modified:
subversion/trunk/subversion/include/svn_diff.h
subversion/trunk/subversion/libsvn_diff/deprecated.c
subversion/trunk/subversion/libsvn_diff/diff_file.c
subversion/trunk/subversion/libsvn_wc/adm_crawler.c
subversion/trunk/subversion/libsvn_wc/conflicts.c
subversion/trunk/subversion/libsvn_wc/conflicts.h
subversion/trunk/subversion/libsvn_wc/merge.c
subversion/trunk/subversion/svn/conflict-callbacks.c
subversion/trunk/subversion/tests/libsvn_diff/diff-diff3-test.c
subversion/trunk/tools/diff/diff3.c
subversion/trunk/tools/diff/diff4.c
Modified: subversion/trunk/subversion/include/svn_diff.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_diff.h?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_diff.h (original)
+++ subversion/trunk/subversion/include/svn_diff.h Tue Aug 19 13:09:32 2014
@@ -706,8 +706,30 @@ svn_diff_file_output_unified(svn_stream_
* @a conflict_separator is @c NULL, a default marker will be displayed.
* @a conflict_style dictates how conflicts are displayed.
*
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_diff_file_output_merge3(svn_stream_t *output_stream,
+ svn_diff_t *diff,
+ const char *original_path,
+ const char *modified_path,
+ const char *latest_path,
+ const char *conflict_original,
+ const char *conflict_modified,
+ const char *conflict_latest,
+ const char *conflict_separator,
+ svn_diff_conflict_display_style_t conflict_style,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
+
+/** Similar to svn_diff_file_output_merge3, but without cancel support.
+ *
* @since New in 1.6.
+ *
+ * @deprecated Provided for backward compatibility with the 1.8 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_diff_file_output_merge2(svn_stream_t *output_stream,
svn_diff_t *diff,
Modified: subversion/trunk/subversion/libsvn_diff/deprecated.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_diff/deprecated.c?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/deprecated.c (original)
+++ subversion/trunk/subversion/libsvn_diff/deprecated.c Tue Aug 19 13:09:32
2014
@@ -271,6 +271,31 @@ svn_diff_file_output_merge(svn_stream_t
pool);
}
+svn_error_t *
+svn_diff_file_output_merge2(svn_stream_t *output_stream,
+ svn_diff_t *diff,
+ const char *original_path,
+ const char *modified_path,
+ const char *latest_path,
+ const char *conflict_original,
+ const char *conflict_modified,
+ const char *conflict_latest,
+ const char *conflict_separator,
+ svn_diff_conflict_display_style_t conflict_style,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_diff_file_output_merge3(output_stream,
+ diff, original_path,
+ modified_path,
+ latest_path,
+ conflict_original,
+ conflict_modified,
+ conflict_latest,
+ conflict_separator,
+ conflict_style,
+ NULL, NULL, /* cancel */
+ pool));
+}
/*** From diff.c ***/
svn_error_t *
Modified: subversion/trunk/subversion/libsvn_diff/diff_file.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_diff/diff_file.c?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/diff_file.c (original)
+++ subversion/trunk/subversion/libsvn_diff/diff_file.c Tue Aug 19 13:09:32 2014
@@ -2344,7 +2344,7 @@ output_conflict(void *baton,
}
svn_error_t *
-svn_diff_file_output_merge2(svn_stream_t *output_stream,
+svn_diff_file_output_merge3(svn_stream_t *output_stream,
svn_diff_t *diff,
const char *original_path,
const char *modified_path,
@@ -2354,6 +2354,8 @@ svn_diff_file_output_merge2(svn_stream_t
const char *conflict_latest,
const char *conflict_separator,
svn_diff_conflict_display_style_t style,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *pool)
{
svn_diff3__file_output_baton_t baton;
@@ -2425,8 +2427,9 @@ svn_diff_file_output_merge2(svn_stream_t
eol = APR_EOL_STR;
baton.marker_eol = eol;
- SVN_ERR(svn_diff_output(diff, &baton,
- &svn_diff3__file_output_vtable));
+ SVN_ERR(svn_diff_output2(diff, &baton,
+ &svn_diff3__file_output_vtable,
+ cancel_func, cancel_baton));
for (idx = 0; idx < 3; idx++)
{
Modified: subversion/trunk/subversion/libsvn_wc/adm_crawler.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/adm_crawler.c?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/adm_crawler.c (original)
+++ subversion/trunk/subversion/libsvn_wc/adm_crawler.c Tue Aug 19 13:09:32 2014
@@ -91,7 +91,8 @@ restore_file(svn_wc__db_t *db,
/* Remove any text conflict */
if (mark_resolved_text_conflict)
- SVN_ERR(svn_wc__mark_resolved_text_conflict(db, local_abspath,
scratch_pool));
+ SVN_ERR(svn_wc__mark_resolved_text_conflict(db, local_abspath, NULL, NULL,
+ scratch_pool));
return SVN_NO_ERROR;
}
Modified: subversion/trunk/subversion/libsvn_wc/conflicts.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/conflicts.c?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_wc/conflicts.c Tue Aug 19 13:09:32 2014
@@ -1537,6 +1537,8 @@ merge_showing_conflicts(const char **cho
const char *detranslated_target,
const char *right_abspath,
svn_io_file_del_t delete_when,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -1565,12 +1567,12 @@ merge_showing_conflicts(const char **cho
left_abspath,
detranslated_target, right_abspath,
diff3_options, scratch_pool));
- SVN_ERR(svn_diff_file_output_merge2(chosen_stream, diff,
+ SVN_ERR(svn_diff_file_output_merge3(chosen_stream, diff,
left_abspath,
detranslated_target,
right_abspath,
NULL, NULL, NULL, NULL, /* markers */
- style,
+ style, cancel_func, cancel_baton,
scratch_pool));
SVN_ERR(svn_stream_close(chosen_stream));
@@ -1608,6 +1610,8 @@ eval_text_conflict_func_result(svn_skel_
const char *right_abspath,
const char *merged_abspath,
const char *detranslated_target,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -1654,6 +1658,7 @@ eval_text_conflict_func_result(svn_skel_
right_abspath,
/* ### why not same as other caller?
*/
svn_io_file_del_none,
+ cancel_func, cancel_baton,
scratch_pool, scratch_pool));
remove_source = TRUE;
*is_resolved = TRUE;
@@ -1784,6 +1789,8 @@ resolve_text_conflict(svn_skel_t **work_
const apr_array_header_t *merge_options,
svn_wc_conflict_resolver_func2_t conflict_func,
void *conflict_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -1829,6 +1836,7 @@ resolve_text_conflict(svn_skel_t **work_
? result->merged_file
: cdesc->merged_abspath,
cdesc->my_abspath,
+ cancel_func, cancel_baton,
result_pool, scratch_pool));
*work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
}
@@ -2059,6 +2067,7 @@ svn_wc__conflict_invoke_resolver(svn_wc_
db, local_abspath, desc,
merge_options,
resolver_func, resolver_baton,
+ cancel_func, cancel_baton,
scratch_pool, scratch_pool));
if (was_resolved)
@@ -2072,6 +2081,8 @@ svn_wc__conflict_invoke_resolver(svn_wc_
scratch_pool));
}
SVN_ERR(svn_wc__mark_resolved_text_conflict(db, local_abspath,
+ cancel_func,
+ cancel_baton,
scratch_pool));
}
}
@@ -2471,6 +2482,7 @@ resolve_text_conflict_on_node(svn_boolea
conflict_new,
/* ### why not same as other
caller? */
svn_io_file_del_on_pool_cleanup,
+ cancel_func, cancel_baton,
scratch_pool, scratch_pool));
}
else
@@ -2895,6 +2907,8 @@ resolve_tree_conflict_on_node(svn_boolea
svn_error_t *
svn_wc__mark_resolved_text_conflict(svn_wc__db_t *db,
const char *local_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *scratch_pool)
{
svn_boolean_t ignored_result;
@@ -2903,7 +2917,7 @@ svn_wc__mark_resolved_text_conflict(svn_
&ignored_result,
db, local_abspath,
svn_wc_conflict_choose_merged, NULL,
- NULL, NULL,
+ cancel_func, cancel_baton,
scratch_pool));
}
Modified: subversion/trunk/subversion/libsvn_wc/conflicts.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/conflicts.h?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/conflicts.h (original)
+++ subversion/trunk/subversion/libsvn_wc/conflicts.h Tue Aug 19 13:09:32 2014
@@ -432,6 +432,8 @@ svn_wc__conflict_invoke_resolver(svn_wc_
svn_error_t *
svn_wc__mark_resolved_text_conflict(svn_wc__db_t *db,
const char *local_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *scratch_pool);
/* Mark as resolved any prop conflicts on the node at DB/LOCAL_ABSPATH. */
Modified: subversion/trunk/subversion/libsvn_wc/merge.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/merge.c?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/merge.c (original)
+++ subversion/trunk/subversion/libsvn_wc/merge.c Tue Aug 19 13:09:32 2014
@@ -392,6 +392,8 @@ do_text_merge(svn_boolean_t *contains_co
const char *target_label,
const char *left_label,
const char *right_label,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *pool)
{
svn_diff_t *diff;
@@ -416,13 +418,14 @@ do_text_merge(svn_boolean_t *contains_co
ostream = svn_stream_from_aprfile2(result_f, TRUE, pool);
- SVN_ERR(svn_diff_file_output_merge2(ostream, diff,
+ SVN_ERR(svn_diff_file_output_merge3(ostream, diff,
left, detranslated_target, right,
left_marker,
target_marker,
right_marker,
"=======", /* separator */
svn_diff_conflict_display_modified_original_latest,
+ cancel_func, cancel_baton,
pool));
SVN_ERR(svn_stream_close(ostream));
@@ -871,6 +874,7 @@ merge_text_file(svn_skel_t **work_items,
target_label,
left_label,
right_label,
+ cancel_func, cancel_baton,
pool));
SVN_ERR(svn_io_file_close(result_f, pool));
Modified: subversion/trunk/subversion/svn/conflict-callbacks.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/conflict-callbacks.c?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/conflict-callbacks.c (original)
+++ subversion/trunk/subversion/svn/conflict-callbacks.c Tue Aug 19 13:09:32
2014
@@ -204,6 +204,8 @@ show_diff(const svn_wc_conflict_descript
* and 'my' files of DESC. */
static svn_error_t *
show_conflicts(const svn_wc_conflict_description3_t *desc,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *pool)
{
svn_diff_t *diff;
@@ -220,7 +222,7 @@ show_conflicts(const svn_wc_conflict_des
options, pool));
/* ### Consider putting the markers/labels from
### svn_wc__merge_internal in the conflict description. */
- return svn_diff_file_output_merge2(output, diff,
+ return svn_diff_file_output_merge3(output, diff,
desc->base_abspath,
desc->my_abspath,
desc->their_abspath,
@@ -229,6 +231,8 @@ show_conflicts(const svn_wc_conflict_des
_(">>>>>>> THEIRS (select with 'tc')"),
"=======",
svn_diff_conflict_display_only_conflicts,
+ cancel_func,
+ cancel_baton,
pool);
}
@@ -244,6 +248,8 @@ static svn_error_t *
merge_prop_conflict(svn_stream_t *output,
const svn_wc_conflict_description3_t *desc,
const char *merged_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *pool)
{
const char *base_abspath = desc->base_abspath;
@@ -275,7 +281,7 @@ merge_prop_conflict(svn_stream_t *output
merged_abspath ? merged_abspath : my_abspath,
their_abspath,
options, pool));
- SVN_ERR(svn_diff_file_output_merge2(output, diff,
+ SVN_ERR(svn_diff_file_output_merge3(output, diff,
base_abspath,
merged_abspath ? merged_abspath
: my_abspath,
@@ -285,6 +291,8 @@ merge_prop_conflict(svn_stream_t *output
_(">>>>>>> THEIRS"),
"=======",
svn_diff_conflict_display_modified_original_latest,
+ cancel_func,
+ cancel_baton,
pool));
return SVN_NO_ERROR;
@@ -300,12 +308,15 @@ merge_prop_conflict(svn_stream_t *output
static svn_error_t *
show_prop_conflict(const svn_wc_conflict_description3_t *desc,
const char *merged_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *pool)
{
svn_stream_t *output;
SVN_ERR(svn_stream_for_stdout(&output, pool));
- SVN_ERR(merge_prop_conflict(output, desc, merged_abspath, pool));
+ SVN_ERR(merge_prop_conflict(output, desc, merged_abspath,
+ cancel_func, cancel_baton, pool));
return SVN_NO_ERROR;
}
@@ -374,7 +385,10 @@ edit_prop_conflict(const char **merged_f
result_pool, scratch_pool));
merged_prop = svn_stream_from_aprfile2(file, TRUE /* disown */,
scratch_pool);
- SVN_ERR(merge_prop_conflict(merged_prop, desc, NULL, scratch_pool));
+ SVN_ERR(merge_prop_conflict(merged_prop, desc, NULL,
+ b->pb->cancel_func,
+ b->pb->cancel_baton,
+ scratch_pool));
SVN_ERR(svn_stream_close(merged_prop));
SVN_ERR(svn_io_file_flush(file, scratch_pool));
SVN_ERR(open_editor(&performed_edit, file_path, b, scratch_pool));
@@ -778,7 +792,10 @@ handle_text_conflict(svn_wc_conflict_res
"files not available.\n\n")));
continue;
}
- SVN_ERR(show_conflicts(desc, iterpool));
+ SVN_ERR(show_conflicts(desc,
+ b->pb->cancel_func,
+ b->pb->cancel_baton,
+ iterpool));
knows_something = TRUE;
}
else if (strcmp(opt->code, "df") == 0)
@@ -1020,7 +1037,9 @@ handle_prop_conflict(svn_wc_conflict_res
}
else if (strcmp(opt->code, "dc") == 0)
{
- SVN_ERR(show_prop_conflict(desc, merged_file_path, scratch_pool));
+ SVN_ERR(show_prop_conflict(desc, merged_file_path,
+ b->pb->cancel_func, b->pb->cancel_baton,
+ scratch_pool));
}
else if (strcmp(opt->code, "e") == 0)
{
Modified: subversion/trunk/subversion/tests/libsvn_diff/diff-diff3-test.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_diff/diff-diff3-test.c?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_diff/diff-diff3-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_diff/diff-diff3-test.c Tue Aug 19
13:09:32 2014
@@ -173,13 +173,15 @@ three_way_merge(const char *base_filenam
actual = svn_stringbuf_create_empty(pool);
ostream = svn_stream_from_stringbuf(actual, pool);
- SVN_ERR(svn_diff_mem_string_output_merge2
+ SVN_ERR(svn_diff_mem_string_output_merge3
(ostream, diff, original, modified, latest,
apr_psprintf(pool, "||||||| %s", base_filename1),
apr_psprintf(pool, "<<<<<<< %s", base_filename2),
apr_psprintf(pool, ">>>>>>> %s", base_filename3),
NULL, /* separator */
- style, pool));
+ style,
+ NULL, NULL, /* cancel */
+ pool));
SVN_ERR(svn_stream_close(ostream));
if (strcmp(actual->data, expected) != 0)
@@ -199,14 +201,16 @@ three_way_merge(const char *base_filenam
APR_OS_DEFAULT, pool));
ostream = svn_stream_from_aprfile2(output, FALSE, pool);
- SVN_ERR(svn_diff_file_output_merge2(
+ SVN_ERR(svn_diff_file_output_merge3(
ostream, diff,
filename1, filename2, filename3,
apr_psprintf(pool, "||||||| %s", base_filename1),
apr_psprintf(pool, "<<<<<<< %s", base_filename2),
apr_psprintf(pool, ">>>>>>> %s", base_filename3),
NULL, /* separator */
- style, pool));
+ style,
+ NULL, NULL, /* cancel */
+ pool));
SVN_ERR(svn_stream_close(ostream));
SVN_ERR(svn_stringbuf_from_file2(&actual, merge_name, pool));
if (strcmp(actual->data, expected))
Modified: subversion/trunk/tools/diff/diff3.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/tools/diff/diff3.c?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/tools/diff/diff3.c (original)
+++ subversion/trunk/tools/diff/diff3.c Tue Aug 19 13:09:32 2014
@@ -51,13 +51,14 @@ do_diff3(svn_stream_t *ostream,
*has_changes = svn_diff_contains_diffs(diff);
- SVN_ERR(svn_diff_file_output_merge2(ostream, diff,
+ SVN_ERR(svn_diff_file_output_merge3(ostream, diff,
original, modified, latest,
conflict_original,
conflict_modified,
conflict_latest,
"=======",
conflict_style,
+ NULL, NULL, /* cancel */
pool));
return NULL;
Modified: subversion/trunk/tools/diff/diff4.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/tools/diff/diff4.c?rev=1618857&r1=1618856&r2=1618857&view=diff
==============================================================================
--- subversion/trunk/tools/diff/diff4.c (original)
+++ subversion/trunk/tools/diff/diff4.c Tue Aug 19 13:09:32 2014
@@ -42,10 +42,11 @@ do_diff4(svn_stream_t *ostream,
SVN_ERR(svn_diff_file_diff4_2(&diff, original, modified, latest, ancestor,
svn_diff_file_options_create(pool), pool));
- SVN_ERR(svn_diff_file_output_merge2(ostream, diff,
+ SVN_ERR(svn_diff_file_output_merge3(ostream, diff,
original, modified, latest,
NULL, NULL, NULL, NULL,
svn_diff_conflict_display_modified_latest,
+ NULL, NULL, /* cancel */
pool));
return NULL;