📄 dav_svn.h
字号:
to "!svn".
NOTE: the special URI is RELATIVE to the "root" of the
repository. The root is generally available only to
dav_svn_get_resource(). This is okay, however, because we can cache
the root_dir when the resource structure is built.
*/
/* Return the special URI to be used for this resource. */
const char *dav_svn_get_special_uri(request_rec *r);
/* Return a descriptive name for the repository */
const char *dav_svn_get_repo_name(request_rec *r);
/* Return the URI of an XSL transform stylesheet */
const char *dav_svn_get_xslt_uri(request_rec *r);
/* Convert an svn_error_t into a dav_error, pushing another error based on
MESSAGE if MESSAGE is not NULL. Use the provided HTTP status for the
DAV errors. Allocate new DAV errors from POOL.
NOTE: this function destroys (cleanly, of course) SERR after it has
copied/converted its data to the new DAV error.
NOTE: MESSAGE needs to hang around for the lifetime of the error since
the current implementation doesn't copy it! Lots of callers pass static
string constant. */
dav_error * dav_svn_convert_err(svn_error_t *serr, int status,
const char *message, apr_pool_t *pool);
/* Test PATH for canonicalness (defined as "what won't make the
svn_path_* functions immediately explode), returning an
HTTP_BAD_REQUEST error tag if the test fails. */
dav_error * dav_svn__test_canonical(const char *path, apr_pool_t *pool);
/* activity functions for looking up, storing, and deleting
ACTIVITY->TXN mappings */
const char *dav_svn_get_txn(const dav_svn_repos *repos,
const char *activity_id);
dav_error *dav_svn_delete_activity(const dav_svn_repos *repos,
const char *activity_id);
dav_error *dav_svn_store_activity(const dav_svn_repos *repos,
const char *activity_id,
const char *txn_name);
dav_error *dav_svn_create_activity(const dav_svn_repos *repos,
const char **ptxn_name,
apr_pool_t *pool);
/*
Construct a working resource for a given resource.
The internal information (repository, URL parts, etc) for the new
resource comes from BASE, the activity to use is specified by
ACTIVITY_ID, and the name of the transaction is specified by
TXN_NAME. These will be assembled into a new dav_resource and
returned.
If TWEAK_IN_PLACE is non-zero, then directly tweak BASE into a
working resource and return NULL.
*/
dav_resource *dav_svn_create_working_resource(dav_resource *base,
const char *activity_id,
const char *txn_name,
int tweak_in_place);
/*
Convert a working RESOURCE back into a regular one, in-place.
In particular: change the resource type to regular, removing the
'working' flag, change the fs root from a txn-root to a rev-root,
and set the URL back into either a public URL or bc URL.
*/
dav_error *dav_svn_working_to_regular_resource(dav_resource *resource);
/*
Given a version-resource URI, construct a new version-resource in
POOL and return it in *VERSION_RES.
*/
dav_error *dav_svn_create_version_resource(dav_resource **version_res,
const char *uri,
apr_pool_t *pool);
/*
Hook function of types 'checkout' and 'checkin', as defined in
mod_dav.h's versioning provider hooks table (see dav_hooks_vsn).
*/
dav_error *dav_svn_checkout(dav_resource *resource,
int auto_checkout,
int is_unreserved, int is_fork_ok,
int create_activity,
apr_array_header_t *activities,
dav_resource **working_resource);
dav_error *dav_svn_checkin(dav_resource *resource,
int keep_checked_out,
dav_resource **version_resource);
enum dav_svn_build_what {
DAV_SVN_BUILD_URI_ACT_COLLECTION, /* the collection of activities */
DAV_SVN_BUILD_URI_BASELINE, /* a Baseline */
DAV_SVN_BUILD_URI_BC, /* a Baseline Collection */
DAV_SVN_BUILD_URI_PUBLIC, /* the "public" VCR */
DAV_SVN_BUILD_URI_VERSION, /* a Version Resource */
DAV_SVN_BUILD_URI_VCC /* a Version Controlled Configuration */
};
/*
Construct various kinds of URIs.
REPOS is always required, as all URIs will be built to refer to elements
within that repository. WHAT specifies the type of URI to build. The
ADD_HREF flag determines whether the URI is to be wrapped inside of
<D:href>uri</D:href> elements (for inclusion in a response).
Different pieces of information are required for the various URI types:
ACT_COLLECTION: no additional params required
BASELINE: REVISION should be specified
BC: REVISION should be specified
PUBLIC: PATH should be specified with a leading slash
VERSION: REVISION and PATH should be specified
VCC: no additional params required
*/
const char *dav_svn_build_uri(const dav_svn_repos *repos,
enum dav_svn_build_what what,
svn_revnum_t revision,
const char *path,
int add_href,
apr_pool_t *pool);
/* Compare (PATH in ROOT) to (PATH in ROOT/PATH's created_rev).
If these nodes are identical, then return the created_rev.
If the nodes aren't identical, or if PATH simply doesn't exist in
the created_rev, then return the revision represented by ROOT.
(This is a helper to functions that want to build version-urls and
use the CR if possible.)
*/
svn_revnum_t dav_svn_get_safe_cr(svn_fs_root_t *root,
const char *path,
apr_pool_t *pool);
/*
** Simple parsing of a URI. This is used for URIs which appear within a
** request body. It enables us to verify and break out the necessary pieces
** to figure out what is being referred to.
**
** ### this is horribly duplicative with the parsing functions in repos.c
** ### for now, this implements only a minor subset of the full range of
** ### URIs which we may need to parse. it also ignores any scheme, host,
** ### and port in the URI and simply assumes it refers to the same server.
*/
typedef struct {
svn_revnum_t rev;
const char *repos_path;
const char *activity_id;
} dav_svn_uri_info;
svn_error_t *dav_svn_simple_parse_uri(dav_svn_uri_info *info,
const dav_resource *relative,
const char *uri,
apr_pool_t *pool);
/* Given an apache request R and a ROOT_PATH to the svn location
block, set *KIND to the node-kind of the URI's associated
(revision, path) pair, if possible.
Public uris, baseline collections, version resources, and working
(non-baseline) resources all have associated (revision, path)
pairs, and thus one of {svn_node_file, svn_node_dir, svn_node_none}
will be returned.
If URI is something more abstract, then set *KIND to
svn_node_unknown. This is true for baselines, working baselines,
version controled configurations, activities, histories, and other
private resources.
*/
dav_error * dav_svn_resource_kind (request_rec *r,
const char *uri,
const char *root_path,
svn_node_kind_t *kind);
/* Generate the HTTP response body for a successful MERGE. */
/* ### more docco */
dav_error * dav_svn__merge_response(ap_filter_t *output,
const dav_svn_repos *repos,
svn_revnum_t new_rev,
apr_xml_elem *prop_elem,
svn_boolean_t disable_merge_response,
apr_pool_t *pool);
dav_error * dav_svn__update_report(const dav_resource *resource,
const apr_xml_doc *doc,
ap_filter_t *output);
/* ### todo: document this, as soon as understand what the heck it
does :-). -kff */
dav_error * dav_svn__log_report(const dav_resource *resource,
const apr_xml_doc *doc,
ap_filter_t *output);
/* Respond to a client request for a REPORT of type file-revs-report for the
RESOURCE. Get request body from DOC and send result to OUTPUT. */
dav_error * dav_svn__file_revs_report(const dav_resource *resource,
const apr_xml_doc *doc,
ap_filter_t *output);
int dav_svn_find_ns(apr_array_header_t *namespaces, const char *uri);
enum dav_svn_time_format {
dav_svn_time_format_iso8601,
dav_svn_time_format_rfc1123
};
/* Given a mod_dav_svn @a resource, set @a *timeval and @a *datestring
to the last-modified-time of the resource. The datestring will be
formatted according to @a format. Use @a pool for both
scratchwork, and to allocate @a *datestring.
If @a timeval or @a datestring is NULL, don't touch it.
Return zero on success, non-zero if an error occurs. */
int dav_svn_get_last_modified_time (const char **datestring,
apr_time_t *timeval,
const dav_resource *resource,
enum dav_svn_time_format format,
apr_pool_t *pool);
dav_error * dav_svn__get_locations_report(const dav_resource *resource,
const apr_xml_doc *doc,
ap_filter_t *output);
/* Return a writable generic stream that will encode its output to base64
and send it to the Apache filter OUTPUT using BB. Allocate the stream in
POOL. */
svn_stream_t * dav_svn_make_base64_output_stream(apr_bucket_brigade *bb,
ap_filter_t *output,
apr_pool_t *pool);
/* A baton needed by dav_svn_authz_read(). */
typedef struct
{
/* The original request, needed to generate a subrequest. */
request_rec *r;
/* We need this to construct a URI based on a repository abs path. */
const dav_svn_repos *repos;
} dav_svn_authz_read_baton;
/* This function implements 'svn_repos_authz_func_t', specifically
for read authorization.
Convert incoming ROOT and PATH into a version-resource URI and
perform a GET subrequest on it. This will invoke any authz modules
loaded into apache. Set *ALLOWED to TRUE if the subrequest
succeeds, FALSE otherwise.
BATON must be a pointer to a dav_svn_authz_read_baton (see above).
Use POOL for for any temporary allocation.
*/
svn_error_t *dav_svn_authz_read(svn_boolean_t *allowed,
svn_fs_root_t *root,
const char *path,
void *baton,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* DAV_SVN_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -