View information about previous revisions of an object.
Client working copy management

## Functions

svn_error_t *

svn_client_log5 (const apr_array_header_t *targets, const svn_opt_revision_t *peg_revision, const apr_array_header_t *revision_ranges, int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, svn_boolean_t include_merged_revisions, const apr_array_header_t *revprops, svn_log_entry_receiver_t receiver, void *receiver_baton, svn_client_ctx_t *ctx, apr_pool_t *pool)

| Invoke receiver with receiver_baton on each log message from each (svn_opt_revision_range_t *) range in revision_ranges in turn, inclusive (but never invoke receiver on a given log message more than once). More...

svn_error_t *

svn_client_log4 (const apr_array_header_t *targets, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start, const svn_opt_revision_t *end, int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, svn_boolean_t include_merged_revisions, const apr_array_header_t *revprops, svn_log_entry_receiver_t receiver, void *receiver_baton, svn_client_ctx_t *ctx, apr_pool_t *pool)

| Similar to svn_client_log5(), but takes explicit start and end parameters instead of an array of revision ranges. More...
svn_error_t * | svn_client_log3 (const apr_array_header_t *targets, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start, const svn_opt_revision_t *end, int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, svn_log_message_receiver_t receiver, void *receiver_baton, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_log4(), but using svn_log_message_receiver_t instead of svn_log_entry_receiver_t. More...
svn_error_t * | svn_client_log2 (const apr_array_header_t *targets, const svn_opt_revision_t *start, const svn_opt_revision_t *end, int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, svn_log_message_receiver_t receiver, void *receiver_baton, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_log3(), but with the `kind` field of peg_revision set to svn_opt_revision_unspecified. More...
svn_error_t * | svn_client_log (const apr_array_header_t *targets, const svn_opt_revision_t *start, const svn_opt_revision_t *end, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, svn_log_message_receiver_t receiver, void *receiver_baton, svn_client_ctx_t *ctx, apr_pool_t *pool)
| Similar to svn_client_log2(), but with limit set to 0, and the following special case: More...

## Detailed Description

## Function Documentation

## svn_client_log()

svn_error_t* svn_client_log | ( | const apr_array_header_t * | targets,
|  | const svn_opt_revision_t * | start,
|  | const svn_opt_revision_t * | end,
|  | svn_boolean_t | discover_changed_paths,
|  | svn_boolean_t | strict_node_history,
|  | svn_log_message_receiver_t | receiver,
|  | void * | receiver_baton,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool
| ) |  |

Similar to svn_client_log2(), but with limit set to 0, and the following special case:

Special case for repositories at revision 0:

If start->kind is svn_opt_revision_head, and end->kind is svn_opt_revision_number && end->number is `1`, then handle an empty (no revisions) repository specially: instead of erroring because requested revision 1 when the highest revision is 0, just invoke receiver on revision 0, passing `NULL` for changed paths and empty strings for the author and date. This is because that particular combination of start and end usually indicates the common case of log invocation – the user wants to see all log messages from youngest to oldest, where the oldest commit is revision 1. That works fine, except when there are no commits in the repository, hence this special case.

Deprecated:
  Provided for backward compatibility with the 1.1 API.

## svn_client_log2()

svn_error_t* svn_client_log2 | ( | const apr_array_header_t * | targets,
|  | const svn_opt_revision_t * | start,
|  | const svn_opt_revision_t * | end,
|  | int | limit,
|  | svn_boolean_t | discover_changed_paths,
|  | svn_boolean_t | strict_node_history,
|  | svn_log_message_receiver_t | receiver,
|  | void * | receiver_baton,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool
| ) |  |

Similar to svn_client_log3(), but with the `kind` field of peg_revision set to svn_opt_revision_unspecified.

Important:
  A special case for the revision range HEAD:1, which was present in svn_client_log(), has been removed from svn_client_log2(). Instead, it is expected that callers will specify the range HEAD:0, to avoid a SVN_ERR_FS_NO_SUCH_REVISION error when invoked against an empty repository (i.e. one not containing a revision 1).

Deprecated:
  Provided for compatibility with the 1.3 API.

Since
  New in 1.2.

## svn_client_log3()

svn_error_t* svn_client_log3 | ( | const apr_array_header_t * | targets,
|  | const svn_opt_revision_t * | peg_revision,
|  | const svn_opt_revision_t * | start,
|  | const svn_opt_revision_t * | end,
|  | int | limit,
|  | svn_boolean_t | discover_changed_paths,
|  | svn_boolean_t | strict_node_history,
|  | svn_log_message_receiver_t | receiver,
|  | void * | receiver_baton,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool
| ) |  |

Similar to svn_client_log4(), but using svn_log_message_receiver_t instead of svn_log_entry_receiver_t.

Also, include_merged_revisions is set to `FALSE` and revprops is svn:author, svn:date, and svn:log.

Deprecated:
  Provided for compatibility with the 1.4 API.

Since
  New in 1.4.

## svn_client_log4()

svn_error_t* svn_client_log4 | ( | const apr_array_header_t * | targets,
|  | const svn_opt_revision_t * | peg_revision,
|  | const svn_opt_revision_t * | start,
|  | const svn_opt_revision_t * | end,
|  | int | limit,
|  | svn_boolean_t | discover_changed_paths,
|  | svn_boolean_t | strict_node_history,
|  | svn_boolean_t | include_merged_revisions,
|  | const apr_array_header_t * | revprops,
|  | svn_log_entry_receiver_t | receiver,
|  | void * | receiver_baton,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool
| ) |  |

Similar to svn_client_log5(), but takes explicit start and end parameters instead of an array of revision ranges.

Deprecated:
  Provided for compatibility with the 1.5 API.

Since
  New in 1.5.

## svn_client_log5()

svn_error_t* svn_client_log5 | ( | const apr_array_header_t * | targets,
|  | const svn_opt_revision_t * | peg_revision,
|  | const apr_array_header_t * | revision_ranges,
|  | int | limit,
|  | svn_boolean_t | discover_changed_paths,
|  | svn_boolean_t | strict_node_history,
|  | svn_boolean_t | include_merged_revisions,
|  | const apr_array_header_t * | revprops,
|  | svn_log_entry_receiver_t | receiver,
|  | void * | receiver_baton,
|  | svn_client_ctx_t * | ctx,
|  | apr_pool_t * | pool
| ) |  |

Invoke receiver with receiver_baton on each log message from each (svn_opt_revision_range_t *) range in revision_ranges in turn, inclusive (but never invoke receiver on a given log message more than once).

targets contains either a URL followed by zero or more relative paths, or 1 working copy path, as `const char *`, for which log messages are desired. receiver is invoked only on messages whose revisions involved a change to some path in targets. peg_revision indicates in which revision targets are valid. If peg_revision is svn_opt_revision_unspecified, it defaults to svn_opt_revision_head for URLs or svn_opt_revision_working for WC paths.

If limit is greater than zero only invoke receiver on the first limit logs.

If discover_changed_paths is set, then the `changed_paths` and `changed_paths2` fields in the `log_entry` argument to receiver will be populated on each invocation.

Note
  The `text_modified` and `props_modified` fields of the changed paths structure may have the value svn_tristate_unknown if the repository does not report that information.

If strict_node_history is set, copy history (if any exists) will not be traversed while harvesting revision logs for each target.

If include_merged_revisions is set, log information for revisions which have been merged to targets will also be returned.

If revprops is NULL, retrieve all revision properties; else, retrieve only the revision properties named by the (const char *) array elements (i.e. retrieve none if the array is empty).

Use pool for any temporary allocation.

If ctx->notify_func2 is non-NULL, then call ctx->notify_func2/baton2 with a 'skip' signal on any unversioned targets.

Since
  New in 1.6.