# Generate differences between paths.
[Client working copy management]

## Functions
svn_error_t * | svn_client_diff5 (const apr_array_header_t *diff_options, const char *path1, const svn_opt_revision_t *revision1, const char *path2, 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_deleted, svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type, svn_boolean_t use_git_diff_format, const char *header_encoding, apr_file_t *outfile, apr_file_t *errfile, const apr_array_header_t *changelists, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Produce diff output which describes the delta between path1/revision1 and path2/revision2.
svn_error_t * | svn_client_diff4 (const apr_array_header_t *diff_options, const char *path1, const svn_opt_revision_t *revision1, const char *path2, 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_deleted, svn_boolean_t ignore_content_type, const char *header_encoding, apr_file_t *outfile, apr_file_t *errfile, const apr_array_header_t *changelists, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff5(), but with show_copies_as_adds set to `FALSE` and use_git_diff_format set to `FALSE`.
svn_error_t * | svn_client_diff3 (const apr_array_header_t *diff_options, const char *path1, const svn_opt_revision_t *revision1, const char *path2, const svn_opt_revision_t *revision2, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, const char *header_encoding, apr_file_t *outfile, apr_file_t *errfile, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff4(), but with changelists passed as `NULL`, and depth set according to recurse: if recurse is TRUE, set depth to svn_depth_infinity, if recurse is FALSE, set depth to svn_depth_empty.
svn_error_t * | svn_client_diff2 (const apr_array_header_t *diff_options, const char *path1, const svn_opt_revision_t *revision1, const char *path2, const svn_opt_revision_t *revision2, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, apr_file_t *outfile, apr_file_t *errfile, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff3(), but with header_encoding set to `APR_LOCALE_CHARSET`.
svn_error_t * | svn_client_diff (const apr_array_header_t *diff_options, const char *path1, const svn_opt_revision_t *revision1, const char *path2, const svn_opt_revision_t *revision2, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, apr_file_t *outfile, apr_file_t *errfile, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff2(), but with ignore_content_type always set to FALSE.
svn_error_t * | svn_client_diff_peg5 (const apr_array_header_t *diff_options, const char *path, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start_revision, const svn_opt_revision_t *end_revision, const char *relative_to_dir, svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type, svn_boolean_t use_git_diff_format, const char *header_encoding, apr_file_t *outfile, apr_file_t *errfile, const apr_array_header_t *changelists, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Produce diff output which describes the delta between the filesystem object path in peg revision peg_revision, as it changed between start_revision and end_revision.
svn_error_t * | svn_client_diff_peg4 (const apr_array_header_t *diff_options, const char *path, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start_revision, const svn_opt_revision_t *end_revision, const char *relative_to_dir, svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, const char *header_encoding, apr_file_t *outfile, apr_file_t *errfile, const apr_array_header_t *changelists, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff_peg5(), but with show_copies_as_adds set to `FALSE` and use_git_diff_format set to `FALSE`.
svn_error_t * | svn_client_diff_peg3 (const apr_array_header_t *diff_options, const char *path, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start_revision, const svn_opt_revision_t *end_revision, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, const char *header_encoding, apr_file_t *outfile, apr_file_t *errfile, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff_peg4(), but with changelists passed as `NULL`, and depth set according to recurse: if recurse is TRUE, set depth to svn_depth_infinity, if recurse is FALSE, set depth to svn_depth_files.
svn_error_t * | svn_client_diff_peg2 (const apr_array_header_t *diff_options, const char *path, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start_revision, const svn_opt_revision_t *end_revision, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, apr_file_t *outfile, apr_file_t *errfile, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff_peg3(), but with header_encoding set to `APR_LOCALE_CHARSET`.
svn_error_t * | svn_client_diff_peg (const apr_array_header_t *diff_options, const char *path, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start_revision, const svn_opt_revision_t *end_revision, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, apr_file_t *outfile, apr_file_t *errfile, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff_peg2(), but with ignore_content_type always set to FALSE.
svn_error_t * | svn_client_diff_summarize2 (const char *path1, const svn_opt_revision_t *revision1, const char *path2, const svn_opt_revision_t *revision2, svn_depth_t depth, svn_boolean_t ignore_ancestry, const apr_array_header_t *changelists, svn_client_diff_summarize_func_t summarize_func, void *summarize_baton, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Produce a diff summary which lists the changed items between path1/revision1 and path2/revision2 without creating text deltas.
svn_error_t * | svn_client_diff_summarize (const char *path1, const svn_opt_revision_t *revision1, const char *path2, const svn_opt_revision_t *revision2, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_client_diff_summarize_func_t summarize_func, void *summarize_baton, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff_summarize2(), but with changelists passed as `NULL`, and depth set according to recurse: if recurse is TRUE, set depth to svn_depth_infinity, if recurse is FALSE, set depth to svn_depth_files.
svn_error_t * | svn_client_diff_summarize_peg2 (const char *path, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start_revision, const svn_opt_revision_t *end_revision, svn_depth_t depth, svn_boolean_t ignore_ancestry, const apr_array_header_t *changelists, svn_client_diff_summarize_func_t summarize_func, void *summarize_baton, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Produce a diff summary which lists the changed items between the filesystem object path in peg revision peg_revision, as it changed between start_revision and end_revision.
svn_error_t * | svn_client_diff_summarize_peg (const char *path, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start_revision, const svn_opt_revision_t *end_revision, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_client_diff_summarize_func_t summarize_func, void *summarize_baton, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_diff_summarize_peg2(), but with changelists passed as `NULL`, and depth set according to recurse: if recurse is TRUE, set depth to svn_depth_infinity, if recurse is FALSE, set depth to svn_depth_files.

## Function Documentation

svn_error_t* svn_client_diff | ( | const apr_array_header_t * | diff_options,
|  | const char * | path1,
|  | const svn_opt_revision_t * | revision1,
|  | const char * | path2,
|  | const svn_opt_revision_t * | revision2,
|  | svn_boolean_t | recurse,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_boolean_t | no_diff_deleted,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff2(), but with ignore_content_type always set to FALSE.

Deprecated:
  Provided for backward compatibility with the 1.1 API.

svn_error_t* svn_client_diff2 | ( | const apr_array_header_t * | diff_options,
|  | const char * | path1,
|  | const svn_opt_revision_t * | revision1,
|  | const char * | path2,
|  | const svn_opt_revision_t * | revision2,
|  | svn_boolean_t | recurse,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_boolean_t | no_diff_deleted,
|  | svn_boolean_t | ignore_content_type,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff3(), but with header_encoding set to `APR_LOCALE_CHARSET`.

Deprecated:
  Provided for backward compatibility with the 1.2 API.

Since:
  New in 1.2.

svn_error_t* svn_client_diff3 | ( | const apr_array_header_t * | diff_options,
|  | const char * | path1,
|  | const svn_opt_revision_t * | revision1,
|  | const char * | path2,
|  | const svn_opt_revision_t * | revision2,
|  | svn_boolean_t | recurse,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_boolean_t | no_diff_deleted,
|  | svn_boolean_t | ignore_content_type,
|  | const char * | header_encoding,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff4(), but with changelists passed as `NULL`, and depth set according to recurse: if recurse is TRUE, set depth to svn_depth_infinity, if recurse is FALSE, set depth to svn_depth_empty.

Deprecated:
  Provided for backward compatibility with the 1.4 API.

Since:
  New in 1.3.

svn_error_t* svn_client_diff4 | ( | const apr_array_header_t * | diff_options,
|  | const char * | path1,
|  | const svn_opt_revision_t * | revision1,
|  | const char * | path2,
|  | 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_deleted,
|  | svn_boolean_t | ignore_content_type,
|  | const char * | header_encoding,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | const apr_array_header_t * | changelists,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff5(), but with show_copies_as_adds set to `FALSE` and use_git_diff_format set to `FALSE`.

Deprecated:
  Provided for backward compatibility with the 1.6 API.

Since:
  New in 1.5.

svn_error_t* svn_client_diff5 | ( | const apr_array_header_t * | diff_options,
|  | const char * | path1,
|  | const svn_opt_revision_t * | revision1,
|  | const char * | path2,
|  | 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_deleted,
|  | svn_boolean_t | show_copies_as_adds,
|  | svn_boolean_t | ignore_content_type,
|  | svn_boolean_t | use_git_diff_format,
|  | const char * | header_encoding,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | const apr_array_header_t * | changelists,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Produce diff output which describes the delta between path1/revision1 and path2/revision2.

Print the output of the diff to outfile, and any errors to errfile. path1 and path2 can be either working-copy paths or URLs.

If relative_to_dir is not `NULL`, the original_path and modified_path will have the relative_to_dir stripped from the front of the respective paths. If relative_to_dir is `NULL`, paths will not be modified. If relative_to_dir is not `NULL` but relative_to_dir is not a parent path of the target, an error is returned. Finally, if relative_to_dir is a URL, an error will be returned.

If either revision1 or revision2 has an `unspecified' or unrecognized `kind', return SVN_ERR_CLIENT_BAD_REVISION.

path1 and path2 must both represent the same node kind -- that is, if path1 is a directory, path2 must also be, and if path1 is a file, path2 must also be.

If depth is svn_depth_infinity, diff fully recursively. Else if it is svn_depth_immediates, diff the named paths and their file children (if any), and diff properties of subdirectories, but do not descend further into the subdirectories. Else if svn_depth_files, behave as if for svn_depth_immediates except don't diff properties of subdirectories. If svn_depth_empty, diff exactly the named paths but nothing underneath them.

Use ignore_ancestry to control whether or not items being diffed will be checked for relatedness first. Unrelated items are typically transmitted to the editor as a deletion of one thing and the addition of another, but if this flag is TRUE, unrelated items will be diffed as if they were related.

If no_diff_deleted is TRUE, then no diff output will be generated on deleted files.

If show_copies_as_adds is TRUE, then copied files will not be diffed against their copyfrom source, and will appear in the diff output in their entirety, as if they were newly added.

If use_git_diff_format is TRUE, then the git's extended diff format will be used. ### Do we need to say more about the format? A reference perhaps?

Generated headers are encoded using header_encoding.

Diff output will not be generated for binary files, unless ignore_content_type is TRUE, in which case diffs will be shown regardless of the content types.

diff_options (an array of `const char *`) is used to pass additional command line options to the diff processes invoked to compare files. diff_options is allowed to be `NULL`, in which case a value for this option might still be obtained from the Subversion configuration file via client context ctx.

The authentication baton cached in ctx is used to communicate with the repository.

changelists is an array of `const char *` changelist names, used as a restrictive filter on items whose differences are reported; that is, don't generate diffs about any item unless it's a member of one of those changelists. If changelists is empty (or altogether `NULL`), no changelist filtering occurs.

Note:
  Changelist filtering only applies to diffs in which at least one side of the diff represents working copy data.
  header_encoding doesn't affect headers generated by external diff programs.
  relative_to_dir doesn't affect the path index generated by external diff programs.

Since:
  New in 1.7.

svn_error_t* svn_client_diff_peg | ( | const apr_array_header_t * | diff_options,
|  | const char * | path,
|  | const svn_opt_revision_t * | peg_revision,
|  | const svn_opt_revision_t * | start_revision,
|  | const svn_opt_revision_t * | end_revision,
|  | svn_boolean_t | recurse,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_boolean_t | no_diff_deleted,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff_peg2(), but with ignore_content_type always set to FALSE.

Since:
  New in 1.1.

Deprecated:
  Provided for backward compatibility with the 1.1 API.

svn_error_t* svn_client_diff_peg2 | ( | const apr_array_header_t * | diff_options,
|  | const char * | path,
|  | const svn_opt_revision_t * | peg_revision,
|  | const svn_opt_revision_t * | start_revision,
|  | const svn_opt_revision_t * | end_revision,
|  | svn_boolean_t | recurse,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_boolean_t | no_diff_deleted,
|  | svn_boolean_t | ignore_content_type,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff_peg3(), but with header_encoding set to `APR_LOCALE_CHARSET`.

Deprecated:
  Provided for backward compatibility with the 1.2 API.

Since:
  New in 1.2.

svn_error_t* svn_client_diff_peg3 | ( | const apr_array_header_t * | diff_options,
|  | const char * | path,
|  | const svn_opt_revision_t * | peg_revision,
|  | const svn_opt_revision_t * | start_revision,
|  | const svn_opt_revision_t * | end_revision,
|  | svn_boolean_t | recurse,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_boolean_t | no_diff_deleted,
|  | svn_boolean_t | ignore_content_type,
|  | const char * | header_encoding,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff_peg4(), but with changelists passed as `NULL`, and depth set according to recurse: if recurse is TRUE, set depth to svn_depth_infinity, if recurse is FALSE, set depth to svn_depth_files.

Deprecated:
  Provided for backward compatibility with the 1.4 API.

Since:
  New in 1.3.

svn_error_t* svn_client_diff_peg4 | ( | const apr_array_header_t * | diff_options,
|  | const char * | path,
|  | const svn_opt_revision_t * | peg_revision,
|  | const svn_opt_revision_t * | start_revision,
|  | const svn_opt_revision_t * | end_revision,
|  | const char * | relative_to_dir,
|  | svn_depth_t | depth,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_boolean_t | no_diff_deleted,
|  | svn_boolean_t | ignore_content_type,
|  | const char * | header_encoding,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | const apr_array_header_t * | changelists,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff_peg5(), but with show_copies_as_adds set to `FALSE` and use_git_diff_format set to `FALSE`.

Since:
  New in 1.5.

Deprecated:
  Provided for backward compatibility with the 1.6 API.

svn_error_t* svn_client_diff_peg5 | ( | const apr_array_header_t * | diff_options,
|  | const char * | path,
|  | const svn_opt_revision_t * | peg_revision,
|  | const svn_opt_revision_t * | start_revision,
|  | const svn_opt_revision_t * | end_revision,
|  | const char * | relative_to_dir,
|  | svn_depth_t | depth,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_boolean_t | no_diff_deleted,
|  | svn_boolean_t | show_copies_as_adds,
|  | svn_boolean_t | ignore_content_type,
|  | svn_boolean_t | use_git_diff_format,
|  | const char * | header_encoding,
|  | apr_file_t * | outfile,
|  | apr_file_t * | errfile,
|  | const apr_array_header_t * | changelists,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Produce diff output which describes the delta between the filesystem object path in peg revision peg_revision, as it changed between start_revision and end_revision.

path can be either a working-copy path or URL.

If peg_revision is svn_opt_revision_unspecified, behave identically to svn_client_diff5(), using path for both of that function's path1 and path2 arguments.

All other options are handled identically to svn_client_diff5().

Since:
  New in 1.7.

svn_error_t* svn_client_diff_summarize | ( | const char * | path1,
|  | const svn_opt_revision_t * | revision1,
|  | const char * | path2,
|  | const svn_opt_revision_t * | revision2,
|  | svn_boolean_t | recurse,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_client_diff_summarize_func_t | summarize_func,
|  | void * | summarize_baton,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff_summarize2(), but with changelists passed as `NULL`, and depth set according to recurse: if recurse is TRUE, set depth to svn_depth_infinity, if recurse is FALSE, set depth to svn_depth_files.

Deprecated:
  Provided for backward compatibility with the 1.4 API.

Since:
  New in 1.4.

svn_error_t* svn_client_diff_summarize2 | ( | const char * | path1,
|  | const svn_opt_revision_t * | revision1,
|  | const char * | path2,
|  | const svn_opt_revision_t * | revision2,
|  | svn_depth_t | depth,
|  | svn_boolean_t | ignore_ancestry,
|  | const apr_array_header_t * | changelists,
|  | svn_client_diff_summarize_func_t | summarize_func,
|  | void * | summarize_baton,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Produce a diff summary which lists the changed items between path1/revision1 and path2/revision2 without creating text deltas.

path1 and path2 can be either working-copy paths or URLs.

The function may report false positives if ignore_ancestry is false, since a file might have been modified between two revisions, but still have the same contents.

Calls summarize_func with summarize_baton for each difference with a svn_client_diff_summarize_t structure describing the difference.

See svn_client_diff5() for a description of the other parameters.

Since:
  New in 1.5.

svn_error_t* svn_client_diff_summarize_peg | ( | const char * | path,
|  | const svn_opt_revision_t * | peg_revision,
|  | const svn_opt_revision_t * | start_revision,
|  | const svn_opt_revision_t * | end_revision,
|  | svn_boolean_t | recurse,
|  | svn_boolean_t | ignore_ancestry,
|  | svn_client_diff_summarize_func_t | summarize_func,
|  | void * | summarize_baton,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Similar to svn_client_diff_summarize_peg2(), but with changelists passed as `NULL`, and depth set according to recurse: if recurse is TRUE, set depth to svn_depth_infinity, if recurse is FALSE, set depth to svn_depth_files.

Deprecated:
  Provided for backward compatibility with the 1.4 API.

Since:
  New in 1.4.

svn_error_t* svn_client_diff_summarize_peg2 | ( | const char * | path,
|  | const svn_opt_revision_t * | peg_revision,
|  | const svn_opt_revision_t * | start_revision,
|  | const svn_opt_revision_t * | end_revision,
|  | svn_depth_t | depth,
|  | svn_boolean_t | ignore_ancestry,
|  | const apr_array_header_t * | changelists,
|  | svn_client_diff_summarize_func_t | summarize_func,
|  | void * | summarize_baton,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool |
| ) |  |  |

Produce a diff summary which lists the changed items between the filesystem object path in peg revision peg_revision, as it changed between start_revision and end_revision.

path can be either a working-copy path or URL.

If peg_revision is svn_opt_revision_unspecified, behave identically to svn_client_diff_summarize2(), using path for both of that function's path1 and path2 arguments.

The function may report false positives if ignore_ancestry is false, as described in the documentation for svn_client_diff_summarize2().

Call summarize_func with summarize_baton for each difference with a svn_client_diff_summarize_t structure describing the difference.

See svn_client_diff_peg5() for a description of the other parameters.

Since:
  New in 1.5.

All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines