diff options
Diffstat (limited to 'subversion/svn/diff-cmd.c')
-rw-r--r-- | subversion/svn/diff-cmd.c | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/subversion/svn/diff-cmd.c b/subversion/svn/diff-cmd.c index 9e389ec856a69..b5f3702033f05 100644 --- a/subversion/svn/diff-cmd.c +++ b/subversion/svn/diff-cmd.c @@ -181,6 +181,24 @@ summarize_regular(const svn_client_diff_summarize_t *summary, return svn_cmdline_fflush(stdout); } +svn_error_t * +svn_cl__get_diff_summary_writer(svn_client_diff_summarize_func_t *func_p, + void **baton_p, + svn_boolean_t xml, + svn_boolean_t ignore_properties, + const char *anchor, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) +{ + struct summarize_baton_t *b = apr_pcalloc(result_pool, sizeof(*b)); + + b->anchor = anchor; + b->ignore_properties = ignore_properties; + *func_p = xml ? summarize_xml : summarize_regular; + *baton_p = b; + return SVN_NO_ERROR; +} + /* An svn_opt_subcommand_t to handle the 'diff' command. This implements the `svn_opt_subcommand_t' interface. */ svn_error_t * @@ -203,9 +221,6 @@ svn_cl__diff(apr_getopt_t *os, svn_boolean_t ignore_properties = opt_state->diff.patch_compatible || opt_state->diff.ignore_properties; int i; - struct summarize_baton_t summarize_baton; - const svn_client_diff_summarize_func_t summarize_func = - (opt_state->xml ? summarize_xml : summarize_regular); if (opt_state->extensions) options = svn_cstring_split(opt_state->extensions, " \t\n\r", TRUE, pool); @@ -448,9 +463,13 @@ svn_cl__diff(apr_getopt_t *os, if (opt_state->diff.summarize) { - summarize_baton.anchor = target1; - summarize_baton.ignore_properties = ignore_properties; + svn_client_diff_summarize_func_t summarize_func; + void *summarize_baton; + SVN_ERR(svn_cl__get_diff_summary_writer( + &summarize_func, &summarize_baton, + opt_state->xml, ignore_properties, target1, + iterpool, iterpool)); SVN_ERR(svn_client_diff_summarize2( target1, &opt_state->start_revision, @@ -459,11 +478,11 @@ svn_cl__diff(apr_getopt_t *os, opt_state->depth, ! opt_state->diff.notice_ancestry, opt_state->changelists, - summarize_func, &summarize_baton, + summarize_func, summarize_baton, ctx, iterpool)); } else - SVN_ERR(svn_client_diff6( + SVN_ERR(svn_client_diff7( options, target1, &(opt_state->start_revision), @@ -479,6 +498,7 @@ svn_cl__diff(apr_getopt_t *os, ignore_properties, opt_state->diff.properties_only, opt_state->diff.use_git_diff_format, + TRUE /*pretty_print_mergeinfo*/, svn_cmdline_output_encoding(pool), outstream, errstream, @@ -501,8 +521,13 @@ svn_cl__diff(apr_getopt_t *os, if (opt_state->diff.summarize) { - summarize_baton.anchor = truepath; - summarize_baton.ignore_properties = ignore_properties; + svn_client_diff_summarize_func_t summarize_func; + void *summarize_baton; + + SVN_ERR(svn_cl__get_diff_summary_writer( + &summarize_func, &summarize_baton, + opt_state->xml, ignore_properties, truepath, + iterpool, iterpool)); SVN_ERR(svn_client_diff_summarize_peg2( truepath, &peg_revision, @@ -511,11 +536,11 @@ svn_cl__diff(apr_getopt_t *os, opt_state->depth, ! opt_state->diff.notice_ancestry, opt_state->changelists, - summarize_func, &summarize_baton, + summarize_func, summarize_baton, ctx, iterpool)); } else - SVN_ERR(svn_client_diff_peg6( + SVN_ERR(svn_client_diff_peg7( options, truepath, &peg_revision, @@ -531,6 +556,7 @@ svn_cl__diff(apr_getopt_t *os, ignore_properties, opt_state->diff.properties_only, opt_state->diff.use_git_diff_format, + TRUE /*pretty_print_mergeinfo*/, svn_cmdline_output_encoding(pool), outstream, errstream, |