📄 svn_repos.h
字号:
* will indicate that the editor should be driven in such a way as to
* transform the reported hierarchy to revision @a revnum, preserving the
* reported hierarchy.
*
* @a text_deltas instructs the driver of the @a editor to enable
* the generation of text deltas.
*
* @a recurse instructs the driver of the @a editor to send a recursive
* delta (or not.)
*
* @a ignore_ancestry instructs the driver to ignore node ancestry
* when determining how to transmit differences.
*
* The @a authz_read_func and @a authz_read_baton are passed along to
* @c svn_repos_dir_delta(); see that function for how they are used.
*
* All allocation for the context and collected state will occur in
* @a pool.
*/
svn_error_t *
svn_repos_begin_report (void **report_baton,
svn_revnum_t revnum,
const char *username,
svn_repos_t *repos,
const char *fs_base,
const char *target,
const char *tgt_path,
svn_boolean_t text_deltas,
svn_boolean_t recurse,
svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *editor,
void *edit_baton,
svn_repos_authz_func_t authz_read_func,
void *authz_read_baton,
apr_pool_t *pool);
/** Given a @a report_baton constructed by @c svn_repos_begin_report(), this
* routine will build @a revision:@a path into the current transaction.
* This routine is called multiple times to create a transaction that
* is a "mirror" of a working copy.
*
* The first call of this in a given report usually passes an empty
* @a path; that allows the reporter to set up the correct root revision
* (useful when creating a txn, for example).
*
* If @a start_empty is set and @a path is a directory, then remove
* all children and props of the freshly-linked directory. This is
* for 'low confidence' client reporting.
*
* All temporary allocations are done in @a pool.
*/
svn_error_t *svn_repos_set_path (void *report_baton,
const char *path,
svn_revnum_t revision,
svn_boolean_t start_empty,
apr_pool_t *pool);
/** Given a @a report_baton constructed by @c svn_repos_begin_report(),
* this routine will build @a revision:@a link_path into the current
* transaction at @a path. Note that while @a path is relative to the
* anchor/target used in the creation of the @a report_baton, @a link_path
* is an absolute filesystem path!
*
* If @a start_empty is set and @a path is a directory, then remove
* all children and props of the freshly-linked directory. This is
* for 'low confidence' client reporting.
*
* All temporary allocations are done in @a pool.
*/
svn_error_t *svn_repos_link_path (void *report_baton,
const char *path,
const char *link_path,
svn_revnum_t revision,
svn_boolean_t start_empty,
apr_pool_t *pool);
/** Given a @a report_baton constructed by @c svn_repos_begin_report(),
* this routine will remove @a path from the current fs transaction.
*
* (This allows the reporter's driver to describe missing pieces of a
* working copy, so that 'svn up' can recreate them.)
*
* All temporary allocations are done in @a pool.
*/
svn_error_t *svn_repos_delete_path (void *report_baton,
const char *path,
apr_pool_t *pool);
/** Make the filesystem compare the transaction to a revision and have
* it drive an update editor (using @c svn_repos_delta_dirs()), then
* abort the transaction. If an error occurs during the driving of
* the editor, we do NOT abort the edit; that responsibility belongs
* to the caller, if it happens at all. The fs transaction will be
* aborted even if the editor drive fails, so the caller does not need
* to clean up.
*/
svn_error_t *svn_repos_finish_report (void *report_baton,
apr_pool_t *pool);
/** The report-driver is bailing, so abort the fs transaction. This
* function can be called anytime before @c svn_repos_finish_report() is
* called. No other reporting functions should be called after calling
* this function.
*/
svn_error_t *svn_repos_abort_report (void *report_baton,
apr_pool_t *pool);
/* ---------------------------------------------------------------*/
/* The magical dir_delta update routines. */
/** Use the provided @a editor and @a edit_baton to describe the changes
* necessary for making a given node (and its descendants, if it is a
* directory) under @a src_root look exactly like @a tgt_path under
* @a tgt_root. @a src_entry is the node to update. If @a src_entry
* is empty, then compute the difference between the entire tree
* anchored at @a src_parent_dir under @a src_root and @a tgt_path
* under @a target_root. Else, describe the changes needed to update
* only that entry in @a src_parent_dir. Typically, callers of this
* function will use a @a tgt_path that is the concatenation of @a
* src_parent_dir and @a src_entry.
*
* @a src_root and @a tgt_root can both be either revision or transaction
* roots. If @a tgt_root is a revision, @a editor's @c set_target_revision()
* will be called with the @a tgt_root's revision number, else it will
* not be called at all.
*
* If @a authz_read_func is non-null, invoke it before any call to
*
* @a editor->open_root
* @a editor->add_directory
* @a editor->open_directory
* @a editor->add_file
* @a editor->open_file
*
* passing @a tgt_root, the same path that would be passed to the
* editor function in question, and @a authz_read_baton. If the
* @a *allowed parameter comes back TRUE, then proceed with the planned
* editor call; else if FALSE, then invoke @a editor->absent_file or
* @a editor->absent_directory as appropriate, except if the planned
* editor call was open_root, throw SVN_ERR_AUTHZ_ROOT_UNREADABLE.
*
* If @a text_deltas is @c FALSE, send a single @c NULL txdelta window to
* the window handler returned by @a editor->apply_textdelta().
*
* If @a entry_props is @c TRUE, accompany each opened/added entry with
* propchange editor calls that relay special "entry props" (this
* is typically used only for working copy updates).
*
* @a ignore_ancestry instructs the function to ignore node ancestry
* when determining how to transmit differences.
*
* Before completing successfully, this function calls @a editor's
* @c close_edit(), so the caller should expect its @a edit_baton to be
* invalid after its use with this function.
*
* Do any allocation necessary for the delta computation in @a pool.
* This function's maximum memory consumption is at most roughly
* proportional to the greatest depth of the tree under @a tgt_root, not
* the total size of the delta.
*/
svn_error_t *
svn_repos_dir_delta (svn_fs_root_t *src_root,
const char *src_parent_dir,
const char *src_entry,
svn_fs_root_t *tgt_root,
const char *tgt_path,
const svn_delta_editor_t *editor,
void *edit_baton,
svn_repos_authz_func_t authz_read_func,
void *authz_read_baton,
svn_boolean_t text_deltas,
svn_boolean_t recurse,
svn_boolean_t entry_props,
svn_boolean_t ignore_ancestry,
apr_pool_t *pool);
/** Use the provided @a editor and @a edit_baton to describe the
* skeletal changes made in a particular filesystem @a root
* (revision or transaction).
*
* The @a editor passed to this function should be aware of the fact
* that calls to its change_dir_prop(), change_file_prop(), and
* apply_textdelta() functions will not contain meaningful data, and
* merely serve as indications that properties or textual contents
* were changed.
*
* NOTE: this editor driver passes SVN_INVALID_REVNUM for all
* revision parameters in the editor interface except the copyfrom
* parameter of the add_file() and add_directory() editor functions.
*
* ### TODO: This ought to take an svn_repos_authz_func_t too.
* The only reason it doesn't yet is the difficulty of implementing
* that correctly, plus lack of strong present need -- it's currently
* only used in creating a DAV MERGE response, in 'svnadmin dump', and
* in svnlook.
*/
svn_error_t *
svn_repos_replay (svn_fs_root_t *root,
const svn_delta_editor_t *editor,
void *edit_baton,
apr_pool_t *pool);
/* ---------------------------------------------------------------*/
/* Making commits. */
/** Return an @a editor and @a edit_baton to commit changes to @a session->fs,
* beginning at location 'rev:@a base_path', where "rev" is the argument
* given to @c open_root(). Store @a user as the author of the commit and
* @a log_msg as the commit message.
*
* @a repos is a previously opened repository. @a repos_url is the decoded
* URL to the base of the repository, and is used to check copyfrom paths.
*
* Calling @a (*editor)->close_edit completes the commit. Before
* @c close_edit returns, but after the commit has succeeded, it will
* invoke @a callback with the new revision number, the commit date (as a
* <tt>const char *</tt>), commit author (as a <tt>const char *</tt>), and
* @a callback_baton as arguments. If @a callback returns an error, that
* error will be returned from @c close_edit, otherwise if there was a
* post-commit hook failure, then that error will be returned and will
* have code SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED.
*/
svn_error_t *svn_repos_get_commit_editor (const svn_delta_editor_t **editor,
void **edit_baton,
svn_repos_t *repos,
const char *repos_url,
const char *base_path,
const char *user,
const char *log_msg,
svn_commit_callback_t callback,
void *callback_baton,
apr_pool_t *pool);
/* ---------------------------------------------------------------*/
/* Finding particular revisions. */
/** Set @a *revision to the revision number in @a repos's filesystem that was
* youngest at time @a tm.
*/
svn_error_t *
svn_repos_dated_revision (svn_revnum_t *revision,
svn_repos_t *repos,
apr_time_t tm,
apr_pool_t *pool);
/** Given a @a root/@a path within some filesystem, return three pieces of
* information allocated in @a pool:
*
* - set @a *committed_rev to the revision in which the object was
* last modified. (In fs parlance, this is the revision in which
* the particular node-rev-id was 'created'.)
*
* - set @a *committed_date to the date of said revision, or @c NULL
* if not available.
*
* - set @a *last_author to the author of said revision, or @c NULL
* if not available.
*/
svn_error_t *
svn_repos_get_committed_info (svn_revnum_t *committed_rev,
const char **committed_date,
const char **last_author,
svn_fs_root_t *root,
const char *path,
apr_pool_t *pool);
/** Callback type for use with svn_repos_history(). @a path and @a
* revision represent interesting history locations in the lifetime
* of the path passed to svn_repos_history(). @a baton is the same
* baton given to svn_repos_history(). @a pool is provided for the
* convenience of the implementor, who should not expect it to live
* longer than a single callback call.
*/
typedef svn_error_t *(*svn_repos_history_func_t) (void *baton,
const char *path,
svn_revnum_t revision,
apr_pool_t *pool);
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -