📄 svn_client.h
字号:
/** Invoke @a receiver with @a receiver_baton on each log message from @a
* start to @a end in turn, inclusive (but never invoke @a receiver on a
* given log message more than once).
*
* @a targets contains all the working copy paths (as <tt>const char
* *</tt>'s) for which log messages are desired. The repository info is
* determined by taking the common prefix of the target entries' URLs.
* @a receiver is invoked only on messages
* whose revisions involved a change to some path in @a targets.
*
* ### todo: the above paragraph is not fully implemented yet.
*
* If @a discover_changed_paths is set, then the `@a changed_paths' argument
* to @a receiver will be passed on each invocation.
*
* If @a strict_node_history is set, copy history (if any exists) will
* not be traversed while harvesting revision logs for each target.
*
* If @a start->kind or @a end->kind is @c svn_opt_revision_unspecified,
* return the error @c SVN_ERR_CLIENT_BAD_REVISION.
*
* Use @a pool for any temporary allocation.
*
* Special case for repositories at revision 0:
*
* If @a start->kind is @c svn_opt_revision_head, and @a end->kind is
* @c svn_opt_revision_number && @a end->number is @c 1, then handle an
* empty (no revisions) repository specially: instead of erroring
* because requested revision 1 when the highest revision is 0, just
* invoke @a receiver on revision 0, passing @c NULL for changed paths and
* empty strings for the author and date. This is because that
* particular combination of @a start and @a 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.
*
* If @a ctx->notify_func is non-null, then call @a ctx->notify_func/baton
* with a 'skip' signal on any unversioned targets.
*
*/
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);
/** Invoke @a receiver with @a receiver_baton on each line-blame item
* associated with revision @a end of @a path_or_url, using @a start
* as the default source of all blame.
*
* If @a start->kind or @a end->kind is @c svn_opt_revision_unspecified,
* return the error @c SVN_ERR_CLIENT_BAD_REVISION. If any of the
* revisions of @a path_or_url have a binary mime-type, return the
* error @c SVN_ERR_CLIENT_IS_BINARY_FILE.
*
* Use @a pool for any temporary allocation.
*/
svn_error_t *
svn_client_blame (const char *path_or_url,
const svn_opt_revision_t *start,
const svn_opt_revision_t *end,
svn_client_blame_receiver_t receiver,
void *receiver_baton,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
/** Produce diff output which describes the delta between
* @a path1/@a revision1 and @a path2/@a revision2. Print the output
* of the diff to @a outfile, and any errors to @a errfile. @a path1
* and @a path2 can be either working-copy paths or URLs.
*
* If either @a revision1 or @a revision2 has an `unspecified' or
* unrecognized `kind', return @c SVN_ERR_CLIENT_BAD_REVISION.
*
* @a path1 and @a path2 must both represent the same node kind -- that
* is, if @a path1 is a directory, @a path2 must also be, and if @a path1
* is a file, @a path2 must also be. (Currently, @a path1 and @a path2
* must be the exact same path)
*
* If @a recurse is true (and the @a paths are directories) this will be a
* recursive operation.
*
* Use @a 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 @c TRUE,
* unrelated items will be diffed as if they were related.
*
* If @a no_diff_deleted is true, then no diff output will be
* generated on deleted files.
*
* @a diff_options (an array of <tt>const char *</tt>) is used to pass
* additional command line options to the diff processes invoked to compare
* files.
*
* the authentication baton cached in @a ctx is used to communicate with
* the repository.
*/
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);
/**
* @since New in 1.1.
*
* Produce diff output which describes the delta between the
* filesystem object @a path in peg revision @a peg_revision, as it
* changed between @a revision1 and @a revision2. Print the output of
* the diff to @a outfile, and any errors to @a errfile. @a path can
* be either a working-copy path or URL.
*
* All other options are handled identically to svn_client_diff.
*/
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);
/** Merge changes from @a source1/@a revision1 to @a source2/@a revision2 into
* the working-copy path @a target_wcpath.
*
* @a source1 and @a source2 are either URLs that refer to entries in the
* repository, or paths to entries in the working copy.
*
* By "merging", we mean: apply file differences using
* @c svn_wc_merge, and schedule additions & deletions when appropriate.
*
* @a source1 and @a source2 must both represent the same node kind -- that
* is, if @a source1 is a directory, @a source2 must also be, and if @a source1
* is a file, @a source2 must also be.
*
* If either @a revision1 or @a revision2 has an `unspecified' or
* unrecognized `kind', return @c SVN_ERR_CLIENT_BAD_REVISION.
*
* If @a recurse is true (and the URLs are directories), apply changes
* recursively; otherwise, only apply changes in the current
* directory.
*
* Use @a 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 @c TRUE,
* unrelated items will be diffed as if they were related.
*
* If @a force is not set and the merge involves deleting locally modified or
* unversioned items the operation will fail. If @a force is set such items
* will be deleted.
*
* If @a ctx->notify_func is non-null, then call @a ctx->notify_func with @a
* ctx->notify_baton once for each merged target, passing the target's local
* path.
*
* If @a dry_run is @a true the merge is carried out, and full notification
* feedback is provided, but the working copy is not modified.
*
* the authentication baton cached in @a ctx is used to communicate with the
* repository.
*/
svn_error_t *
svn_client_merge (const char *source1,
const svn_opt_revision_t *revision1,
const char *source2,
const svn_opt_revision_t *revision2,
const char *target_wcpath,
svn_boolean_t recurse,
svn_boolean_t ignore_ancestry,
svn_boolean_t force,
svn_boolean_t dry_run,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
/**
* @since New in 1.1.
*
* Merge the changes between the filesystem object @a source in peg
* revision @a peg_revision, as it changed between @a revision1 and @a
* revision2.
*
* All other options are handled identically to svn_client_merge.
*/
svn_error_t *
svn_client_merge_peg (const char *source,
const svn_opt_revision_t *revision1,
const svn_opt_revision_t *revision2,
const svn_opt_revision_t *peg_revision,
const char *target_wcpath,
svn_boolean_t recurse,
svn_boolean_t ignore_ancestry,
svn_boolean_t force,
svn_boolean_t dry_run,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
/** Recursively cleanup a working copy directory @a dir, finishing any
* incomplete operations, removing lockfiles, etc.
*
* If @a ctx->cancel_func is non-null, invoke it with @a
* ctx->cancel_baton at various points during the operation. If it
* returns an error (typically SVN_ERR_CANCELLED), return that error
* immediately.
*/
svn_error_t *
svn_client_cleanup (const char *dir,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
/**
* Modify a working copy directory @a dir, changing any
* repository URLs that begin with @a from to begin with @a to instead,
* recursing into subdirectories if @a recurse is true.
*
* @param dir Working copy directory
* @param from Original URL
* @param to New URL
* @param recurse Whether to recurse
* @param pool The pool from which to perform memory allocations
*/
svn_error_t *
svn_client_relocate (const char *dir,
const char *from,
const char *to,
svn_boolean_t recurse,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
/** Restore the pristine version of a working copy @a paths,
* effectively undoing any local mods. For each path in @a paths, if
* it is a directory, and @a recursive is @a true, this will be a
* recursive operation.
*
* If @a ctx->notify_func is non-null, then for each item reverted,
* call @a ctx->notify_func with @a ctx->notify_baton and the path of
* the reverted item.
*/
svn_error_t *
svn_client_revert (const apr_array_header_t *paths,
svn_boolean_t recursive,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
/** Remove the 'conflicted' state on a working copy @a path. This will
* not semantically resolve conflicts; it just allows @a path to be
* committed in the future. The implementation details are opaque.
* If @a recursive is set, recurse below @a path, looking for conflicts
* to resolve.
*
* If @a path is not in a state of conflict to begin with, do nothing.
* If @a path's conflict state is removed and @a ctx->notify_func is non-null,
* call @a ctx->notify_func with @a ctx->notify_baton and @a path.
*/
svn_error_t *
svn_client_resolved (const char *path,
svn_boolean_t recursive,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
/** Copy @a src_path to @a dst_path.
*
* @a src_path must be a file or directory under version control, or the
* URL of a versioned item in the repository. If @a src_path is a
* URL, @a src_revision is used to choose the revision from which to copy
* the @a src_path. @a dst_path must be a file or directory under version
* control, or a repository URL, existent or not.
*
* If @a dst_path is a URL, use the authentication baton
* in @a ctx and @a ctx->log_msg_func/@a ctx->log_msg_baton to immediately
* attempt to commit the copy action in the repository. If the commit
* succeeds, allocate (in @a pool) and populate @a *commit_info.
*
* If @a dst_path is not a URL, then this is just a
* variant of @c svn_client_add, where the @a dst_path items are scheduled
* for addition as copies. No changes will happen to the repository
* until a commit occurs. This scheduling can be removed with
* @c svn_client_revert.
*
* @a ctx->log_msg_func/@a ctx->log_msg_baton are a callback/baton combo that
* this function can use to query for a commit log message when one is
* needed.
*
* If @a ctx->notify_func is non-null, invoke it with @a ctx->notify_baton
* for each item added at the new location, passing the new, relative path of
* the added item.
*/
svn_error_t *
svn_client_copy (svn_client_commit_info_t **commit_info,
const char *src_path,
const svn_opt_revision_t *src_revision,
const char *dst_path,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
/** Move @a src_path to @a dst_path.
*
* @a src_path must be a file or directory under version control, or the
* URL of a versioned item in the repository.
*
* If @a src_path is a repository URL:
*
* - @a dst_path must also be a repository URL (existent or not).
*
* - @a src_revision is used to choose the revision from which to copy
* the @a src_path.
*
* - the authentication baton in @a ctx and @a ctx->log_msg_func/@a
* ctx->log_msg_baton are used to commit the move.
*
* - The move operation will be immediately committed. If the
* commit succeeds, allocate (in @a pool) and populate @a *commit_info.
*
* If @a src_path is a working copy path
*
* - @a dst_path must also be a working copy path (existent or not).
*
* - @a src_revision, and @a ctx->log_msg_func/@a ctx->log_msg_baton are
* ignored.
*
* - This is a scheduling operation. No changes will happen to the
* repository until a commit occurs. This scheduling can be removed
* with @c svn_client_revert. If @a src_path is a file it is removed
* from the working copy immediately. If @a src_path is a directory it
* will remain n the working copy but all the files, and unversioned
* items, it contains will be removed.
*
* - If @a src_path contains locally modified and/or unversioned items
* and @a force is not set, the copy will fail. If @a force is set such
* items will be removed.
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -