# 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).
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.
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.
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.
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:

## Function Documentation

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_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.

Deprecated:
  Provided for compatibility with the 1.3 API.

Since:
  New in 1.2.

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_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_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 non-zero only invoke receiver on the first limit logs.

If discover_changed_paths is set, then the `changed_paths' argument to receiver will be passed on each invocation.

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 revprops; else, retrieve only the revprops named in the array (i.e. retrieve none if the array is empty).

Use pool for any temporary allocation.

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).

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.

All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines