Partial review, including only the public API changes, and only the diff hunks (without their context not in the patch):
Gabriela Gibson wrote on Thu, Apr 11, 2013 at 22:39:24 +0100: > Index: subversion/include/svn_client.h > =================================================================== > --- subversion/include/svn_client.h (revision 1466727) > +++ subversion/include/svn_client.h (working copy) > @@ -2978,6 +2978,9 @@ svn_client_blame(const char *path_or_url, > * The above two options are mutually exclusive. It is an error to set > * both to TRUE. > * > + * If @a invoke_diff_cmd is non-null, invoke extermal diff command > + * with the string it contains. > + * Typo "extermal". > * Generated headers are encoded using @a header_encoding. > * > * Diff output will not be generated for binary files, unless @a > @@ -3007,9 +3010,39 @@ svn_client_blame(const char *path_or_url, > * > * @note @a relative_to_dir doesn't affect the path index generated by > * external diff programs. > + * > + * @since New in 1.8. > + */ > +svn_error_t * > +svn_client_diff7(const apr_array_header_t *options, > + const char *path_or_url1, > + const svn_opt_revision_t *revision1, > + const char *path_or_url2, > + const svn_opt_revision_t *revision2, > + const char *relative_to_dir, > + svn_depth_t depth, > + svn_boolean_t ignore_ancestry, > + svn_boolean_t no_diff_added, > + svn_boolean_t no_diff_deleted, > + svn_boolean_t show_copies_as_adds, > + svn_boolean_t ignore_content_type, > + svn_boolean_t ignore_properties, > + svn_boolean_t properties_only, > + svn_boolean_t use_git_diff_format, > + const char *header_encoding, > + svn_stream_t *outstream, > + svn_stream_t *errstream, > + const apr_array_header_t *changelists, > + svn_client_ctx_t *ctx, > + apr_pool_t *pool, > + const char *invoke_diff_cmd); > + > +/** Similar to svn_client_diff7(), but with @a invoke_diff_cmd. "... set to NULL", presumably. > * > + * @deprecated Provided for backward compatibility with the 1.8 API. > * @since New in 1.8. > */ > +SVN_DEPRECATED > svn_error_t * > svn_client_diff6(const apr_array_header_t *diff_options, Since this API is new in 1.8, you should just extend it without deprecating it. (We only deprecate released APIs. svn_client_diff5 is released and set in stone (save for certain const-ness and pointed-to structs changes, maybe); svn_client_diff6 has not been released and can be modified arbitrarily. (but those changes should be added to the "SVN 1.8 APIs review" wiki page)) > const char *path_or_url1, > Index: subversion/include/svn_config.h > =================================================================== > --- subversion/include/svn_config.h (revision 1466727) > +++ subversion/include/svn_config.h (working copy) > @@ -112,6 +112,7 @@ typedef struct svn_config_t svn_config_t; > #define SVN_CONFIG_OPTION_DIFF_EXTENSIONS "diff-extensions" > #define SVN_CONFIG_OPTION_DIFF3_CMD "diff3-cmd" > #define SVN_CONFIG_OPTION_DIFF3_HAS_PROGRAM_ARG "diff3-has-program-arg" > +#define SVN_CONFIG_OPTION_INVOKE_DIFF_CMD "invoke-diff-cmd" Don't you need a /* @since */ here? > #define SVN_CONFIG_OPTION_MERGE_TOOL_CMD "merge-tool-cmd" > #define SVN_CONFIG_SECTION_MISCELLANY "miscellany" > #define SVN_CONFIG_OPTION_GLOBAL_IGNORES "global-ignores" > Index: subversion/include/svn_io.h > =================================================================== > --- subversion/include/svn_io.h (revision 1466727) > +++ subversion/include/svn_io.h (working copy) > @@ -2260,8 +2260,40 @@ svn_io_file_readline(apr_file_t *file, > apr_pool_t *result_pool, > apr_pool_t *scratch_pool); > > +/* Parse a user defined command to contain dynamically > + * created labels and filenames. > + * > + ** @since New in 1.8. (?) Yes. Also, please document the return value (NULL-terminated argv array?). > + */ > /** @} */ Oops! This is a doxygen block end marker. (Look for the matching '@{'.) You should have the docstring and declaration on the same side of the block-end-marker, and shouldn't replicate the block-end-marker in the svn_io_run_external_diff() declaration. > +const char ** > +svn_io_create_custom_diff_cmd(const char *label1, > + const char *label2, > + const char *label3, > + const char *tmpfile1, > + const char *tmpfile2, > + const char *base, > + const char *cmd, > + apr_pool_t *pool); Convention in new code is scratch_pool/result_pool. Shouldn't you be following that convention? (Maybe it's for consistency with surrounding declarations? Haven't checked, sorry.) > > +/* Run the external diff command defined by the invoke-diff-cmd > + * option. > + * Again, need to document the parameters (or point to another function having a similar signature where they are documented). > + ** @since New in 1.8. > + */ > +/** @} */ (see above) > +svn_error_t * > +svn_io_run_external_diff(const char *dir, > Index: subversion/libsvn_subr/io.c > =================================================================== > --- subversion/libsvn_subr/io.c (revision 1466727) > +++ subversion/libsvn_subr/io.c (working copy) > @@ -2832,7 +2832,6 @@ svn_io_run_cmd(const char *path, > return svn_io_wait_for_cmd(&cmd_proc, cmd, exitcode, exitwhy, pool); > } > > - > svn_error_t * > svn_io_run_diff2(const char *dir, > const char *const *user_args, Superfluous whitespace change > Index: subversion/svn/cl.h > =================================================================== > --- subversion/svn/cl.h (revision 1466727) > +++ subversion/svn/cl.h (working copy) > @@ -181,6 +181,8 @@ typedef struct svn_cl__opt_state_t > struct > { > const char *diff_cmd; /* the external diff command to use */ > + const char *invoke_diff_cmd; /* the format string to specify args > */ > + /* for the external diff cmd > */ > svn_boolean_t internal_diff; /* override diff_cmd in config file */ > svn_boolean_t no_diff_added; /* do not show diffs for deleted files > */ > svn_boolean_t no_diff_deleted; /* do not show diffs for deleted files > */ > @@ -213,6 +215,7 @@ typedef struct svn_cl__opt_state_t > const char *changelist; /* operate on this changelist > THIS IS TEMPORARY (LAST OF CHANGELISTS) > */ > svn_boolean_t keep_changelists;/* don't remove changelists after commit */ > + const char *invoke_diff_cmd; /* external customizable diff command > */ Having a struct-member and (nested struct)-member having the same name is a bad idea (confusion is likely). Why not rename (or remove) one of them? > svn_boolean_t keep_local; /* delete path only from repository */ > svn_boolean_t all_revprops; /* retrieve all revprops */ > svn_boolean_t no_revprops; /* retrieve no revprops */