Author: stsp Date: Thu Feb 2 11:35:09 2012 New Revision: 1239553 URL: http://svn.apache.org/viewvc?rev=1239553&view=rev Log: Add --no-diff-properties and --patch options to 'svn diff'. The --patch option implies --no-diff-properties and --show-copies-as-adds.
These options are useful when creating patches for consumers that do not understand or do not care about Subversion properties. Patch by: Alexey Neyman <sti...@att.net> * subversion/svn/cl.h * subversion/svn/main.c New options, --no-diff-properties and --patch for svn diff. * subversion/include/svn_client.h (svn_client_diff6,svn_client_diff_peg6): New argument, ignore_prop_diff. (svn_client_diff5,svn_client_diff_peg5): Update comments. * subversion/libsvn_client/deprecated.c (svn_client_diff5,svn_client_diff_peg5): Pass FALSE as ignore_prop_diff. * subversion/libsvn_client/diff.c (diff_cmd_baton): New field, ignore_prop_diff. (diff_props_changed): Do nothing if diff_cmd_baton->ignore_prop_diff is set. (svn_client_diff6,svn_client_diff_peg6): Pass ignore_prop_diff downstream via diff_cmd_baton. * subversion/svn/diff-cmd.c (svn_cl__diff): Handle --patch and --no-diff-properties. * subversion/svn/log-cmd.c (log_entry_receiver): Request property changes from svn_client_diff6. Modified: subversion/trunk/subversion/include/svn_client.h subversion/trunk/subversion/libsvn_client/deprecated.c subversion/trunk/subversion/libsvn_client/diff.c subversion/trunk/subversion/svn/cl.h subversion/trunk/subversion/svn/diff-cmd.c subversion/trunk/subversion/svn/log-cmd.c subversion/trunk/subversion/svn/main.c Modified: subversion/trunk/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1239553&r1=1239552&r2=1239553&view=diff ============================================================================== --- subversion/trunk/subversion/include/svn_client.h (original) +++ subversion/trunk/subversion/include/svn_client.h Thu Feb 2 11:35:09 2012 @@ -2877,6 +2877,7 @@ svn_client_diff6(const apr_array_header_ svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type, + svn_boolean_t ignore_prop_diff, svn_boolean_t use_git_diff_format, const char *header_encoding, svn_stream_t *outstream, @@ -2886,7 +2887,8 @@ svn_client_diff6(const apr_array_header_ apr_pool_t *pool); /** Similar to svn_client_diff6(), but with @a outfile and @a errfile, - * instead of @a outstream and @a errstream. + * instead of @a outstream and @a errstream, and always showing property + * changes. * * @deprecated Provided for backward compatibility with the 1.7 API. * @since New in 1.7. @@ -3035,6 +3037,7 @@ svn_client_diff_peg6(const apr_array_hea svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type, + svn_boolean_t ignore_prop_diff, svn_boolean_t use_git_diff_format, const char *header_encoding, svn_stream_t *outstream, @@ -3044,7 +3047,8 @@ svn_client_diff_peg6(const apr_array_hea apr_pool_t *pool); /** Similar to svn_client_diff_peg6(), but with @a outfile and @a errfile, - * instead of @a outstream and @a errstream. + * instead of @a outstream and @a errstream, and always showing property + * changes. * * @deprecated Provided for backward compatibility with the 1.7 API. * @since New in 1.7. Modified: subversion/trunk/subversion/libsvn_client/deprecated.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/deprecated.c?rev=1239553&r1=1239552&r2=1239553&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_client/deprecated.c (original) +++ subversion/trunk/subversion/libsvn_client/deprecated.c Thu Feb 2 11:35:09 2012 @@ -864,7 +864,7 @@ svn_client_diff5(const apr_array_header_ return svn_client_diff6(diff_options, path1, revision1, path2, revision2, relative_to_dir, depth, ignore_ancestry, no_diff_deleted, - show_copies_as_adds, ignore_content_type, + show_copies_as_adds, ignore_content_type, FALSE, use_git_diff_format, header_encoding, outstream, errstream, changelists, ctx, pool); } @@ -992,6 +992,7 @@ svn_client_diff_peg5(const apr_array_hea no_diff_deleted, show_copies_as_adds, ignore_content_type, + FALSE, use_git_diff_format, header_encoding, outstream, Modified: subversion/trunk/subversion/libsvn_client/diff.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/diff.c?rev=1239553&r1=1239552&r2=1239553&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_client/diff.c (original) +++ subversion/trunk/subversion/libsvn_client/diff.c Thu Feb 2 11:35:09 2012 @@ -777,6 +777,9 @@ struct diff_cmd_baton { relative to for output generation (see issue #2723). */ const char *relative_to_dir; + /* Whether property differences are ignored. */ + svn_boolean_t ignore_prop_diff; + /* Whether we're producing a git-style diff. */ svn_boolean_t use_git_diff_format; @@ -817,6 +820,10 @@ diff_props_changed(svn_wc_notify_state_t apr_array_header_t *props; svn_boolean_t show_diff_header; + /* If property differences are ignored, there's nothing to do. */ + if (diff_cmd_baton->ignore_prop_diff) + return SVN_NO_ERROR; + SVN_ERR(svn_categorize_props(propchanges, NULL, NULL, &props, scratch_pool)); @@ -2413,6 +2420,7 @@ svn_client_diff6(const apr_array_header_ svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type, + svn_boolean_t ignore_prop_diff, svn_boolean_t use_git_diff_format, const char *header_encoding, svn_stream_t *outstream, @@ -2442,6 +2450,7 @@ svn_client_diff6(const apr_array_header_ diff_cmd_baton.force_empty = FALSE; diff_cmd_baton.force_binary = ignore_content_type; + diff_cmd_baton.ignore_prop_diff = ignore_prop_diff; diff_cmd_baton.relative_to_dir = relative_to_dir; diff_cmd_baton.use_git_diff_format = use_git_diff_format; diff_cmd_baton.no_diff_deleted = no_diff_deleted; @@ -2470,6 +2479,7 @@ svn_client_diff_peg6(const apr_array_hea svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type, + svn_boolean_t ignore_prop_diff, svn_boolean_t use_git_diff_format, const char *header_encoding, svn_stream_t *outstream, @@ -2495,6 +2505,7 @@ svn_client_diff_peg6(const apr_array_hea diff_cmd_baton.force_empty = FALSE; diff_cmd_baton.force_binary = ignore_content_type; + diff_cmd_baton.ignore_prop_diff = ignore_prop_diff; diff_cmd_baton.relative_to_dir = relative_to_dir; diff_cmd_baton.use_git_diff_format = use_git_diff_format; diff_cmd_baton.no_diff_deleted = no_diff_deleted; Modified: subversion/trunk/subversion/svn/cl.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/cl.h?rev=1239553&r1=1239552&r2=1239553&view=diff ============================================================================== --- subversion/trunk/subversion/svn/cl.h (original) +++ subversion/trunk/subversion/svn/cl.h Thu Feb 2 11:35:09 2012 @@ -184,6 +184,7 @@ typedef struct svn_cl__opt_state_t svn_boolean_t no_ignore; /* disregard default ignores & svn:ignore's */ svn_boolean_t no_auth_cache; /* do not cache authentication information */ svn_boolean_t no_diff_deleted; /* do not show diffs for deleted files */ + svn_boolean_t no_diff_props; /* do not show diffs for properties */ svn_boolean_t show_copies_as_adds; /* do not diff copies with their source */ svn_boolean_t notice_ancestry; /* notice ancestry for diff-y operations */ svn_boolean_t ignore_ancestry; /* ignore ancestry for merge-y operations */ @@ -229,6 +230,7 @@ typedef struct svn_cl__opt_state_t svn_boolean_t show_diff; /* produce diff output (maps to --diff) */ svn_boolean_t internal_diff; /* override diff_cmd in config file */ svn_boolean_t use_git_diff_format; /* Use git's extended diff format */ + svn_boolean_t use_patch_diff_format; /* Output compatible with GNU patch */ svn_boolean_t allow_mixed_rev; /* Allow operation on mixed-revision WC */ svn_boolean_t include_externals; /* Recurses (in)to file & dir externals */ } svn_cl__opt_state_t; Modified: subversion/trunk/subversion/svn/diff-cmd.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/diff-cmd.c?rev=1239553&r1=1239552&r2=1239553&view=diff ============================================================================== --- subversion/trunk/subversion/svn/diff-cmd.c (original) +++ subversion/trunk/subversion/svn/diff-cmd.c Thu Feb 2 11:35:09 2012 @@ -171,6 +171,10 @@ svn_cl__diff(apr_getopt_t *os, const char *old_target, *new_target; apr_pool_t *iterpool; svn_boolean_t pegged_diff = FALSE; + svn_boolean_t show_copies_as_adds = + opt_state->use_patch_diff_format ? TRUE : opt_state->show_copies_as_adds; + svn_boolean_t ignore_prop_diff = + opt_state->use_patch_diff_format ? TRUE : opt_state->no_diff_props; int i; const svn_client_diff_summarize_func_t summarize_func = (opt_state->xml ? summarize_xml : summarize_regular); @@ -361,8 +365,9 @@ svn_cl__diff(apr_getopt_t *os, opt_state->depth, ! opt_state->notice_ancestry, opt_state->no_diff_deleted, - opt_state->show_copies_as_adds, + show_copies_as_adds, opt_state->force, + ignore_prop_diff, opt_state->use_git_diff_format, svn_cmdline_output_encoding(pool), outstream, @@ -406,8 +411,9 @@ svn_cl__diff(apr_getopt_t *os, opt_state->depth, ! opt_state->notice_ancestry, opt_state->no_diff_deleted, - opt_state->show_copies_as_adds, + show_copies_as_adds, opt_state->force, + ignore_prop_diff, opt_state->use_git_diff_format, svn_cmdline_output_encoding(pool), outstream, Modified: subversion/trunk/subversion/svn/log-cmd.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/log-cmd.c?rev=1239553&r1=1239552&r2=1239553&view=diff ============================================================================== --- subversion/trunk/subversion/svn/log-cmd.c (original) +++ subversion/trunk/subversion/svn/log-cmd.c Thu Feb 2 11:35:09 2012 @@ -312,6 +312,7 @@ log_entry_receiver(void *baton, TRUE, /* no diff deleted */ FALSE, /* show copies as adds */ FALSE, /* ignore content type */ + FALSE, /* ignore prop diff */ FALSE, /* use git diff format */ svn_cmdline_output_encoding(pool), outstream, Modified: subversion/trunk/subversion/svn/main.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/main.c?rev=1239553&r1=1239552&r2=1239553&view=diff ============================================================================== --- subversion/trunk/subversion/svn/main.c (original) +++ subversion/trunk/subversion/svn/main.c Thu Feb 2 11:35:09 2012 @@ -89,6 +89,7 @@ typedef enum svn_cl__longopt_t { opt_no_auth_cache, opt_no_autoprops, opt_no_diff_deleted, + opt_no_diff_props, opt_no_ignore, opt_no_unlock, opt_non_interactive, @@ -123,6 +124,7 @@ typedef enum svn_cl__longopt_t { opt_diff, opt_internal_diff, opt_use_git_diff_format, + opt_use_patch_diff_format, opt_allow_mixed_revisions, opt_include_externals, } svn_cl__longopt_t; @@ -239,6 +241,8 @@ const apr_getopt_option_t svn_cl__option N_("try operation but make no changes")}, {"no-diff-deleted", opt_no_diff_deleted, 0, N_("do not print differences for deleted files")}, + {"no-diff-properties", opt_no_diff_props, 0, + N_("do not print differences for properties")}, {"notice-ancestry", opt_notice_ancestry, 0, N_("notice ancestry when calculating differences")}, {"ignore-ancestry", opt_ignore_ancestry, 0, @@ -343,6 +347,12 @@ const apr_getopt_option_t svn_cl__option N_("override diff-cmd specified in config file")}, {"git", opt_use_git_diff_format, 0, N_("use git's extended diff format")}, + {"patch", opt_use_patch_diff_format, 0, + N_("generate diff suitable for GNU patch;\n" + " " + "implies show-copies-as-adds and ignores property\n" + " " + "differences")}, {"allow-mixed-revisions", opt_allow_mixed_revisions, 0, N_("Allow merge into mixed-revision working copy.\n" " " @@ -538,9 +548,9 @@ const svn_opt_subcommand_desc2_t svn_cl_ "\n" " Use just 'svn diff' to display local modifications in a working copy.\n"), {'r', 'c', opt_old_cmd, opt_new_cmd, 'N', opt_depth, opt_diff_cmd, - opt_internal_diff, 'x', opt_no_diff_deleted, opt_show_copies_as_adds, - opt_notice_ancestry, opt_summarize, opt_changelist, opt_force, opt_xml, - opt_use_git_diff_format} }, + opt_internal_diff, 'x', opt_no_diff_deleted, opt_no_diff_props, + opt_show_copies_as_adds, opt_notice_ancestry, opt_summarize, opt_changelist, + opt_force, opt_xml, opt_use_git_diff_format, opt_use_patch_diff_format} }, { "export", svn_cl__export, {0}, N_ ("Create an unversioned copy of a tree.\n" "usage: 1. export [-r REV] URL[@PEGREV] [PATH]\n" @@ -1908,6 +1918,9 @@ main(int argc, const char *argv[]) case opt_no_diff_deleted: opt_state.no_diff_deleted = TRUE; break; + case opt_no_diff_props: + opt_state.no_diff_props = TRUE; + break; case opt_show_copies_as_adds: opt_state.show_copies_as_adds = TRUE; break; @@ -2088,6 +2101,9 @@ main(int argc, const char *argv[]) case opt_internal_diff: opt_state.internal_diff = TRUE; break; + case opt_use_patch_diff_format: + opt_state.use_patch_diff_format = TRUE; + break; case opt_use_git_diff_format: opt_state.use_git_diff_format = TRUE; break;