Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/include/svn_repos.h view on Meta::CPAN
/**
* @copyright
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
* @endcopyright
*
* @file svn_repos.h
* @brief Tools built on top of the filesystem.
*/
#ifndef SVN_REPOS_H
#define SVN_REPOS_H
#include <apr_pools.h>
#include <apr_hash.h>
#include <apr_tables.h>
#include <apr_time.h>
#include "svn_types.h"
#include "svn_string.h"
#include "svn_delta.h"
#include "svn_fs.h"
#include "svn_io.h"
#include "svn_mergeinfo.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* ---------------------------------------------------------------*/
/**
* Get libsvn_repos version information.
*
* @since New in 1.1.
*/
const svn_version_t *
svn_repos_version(void);
/* Some useful enums. They need to be declared here for the notification
system to pick them up. */
/** The different "actions" attached to nodes in the dumpfile. */
enum svn_node_action
{
svn_node_action_change,
svn_node_action_add,
svn_node_action_delete,
svn_node_action_replace
};
/** The different policies for processing the UUID in the dumpfile. */
enum svn_repos_load_uuid
{
/** only update uuid if the repos has no revisions. */
svn_repos_load_uuid_default,
/** never update uuid. */
svn_repos_load_uuid_ignore,
/** always update uuid. */
svn_repos_load_uuid_force
};
/** Callback type for checking authorization on paths produced by (at
* least) svn_repos_dir_delta2().
*
* Set @a *allowed to TRUE to indicate that some operation is
* authorized for @a path in @a root, or set it to FALSE to indicate
* unauthorized (presumably according to state stored in @a baton).
*
* Do not assume @a pool has any lifetime beyond this call.
*
* The exact operation being authorized depends on the callback
* implementation. For read authorization, for example, the caller
* would implement an instance that does read checking, and pass it as
* a parameter named [perhaps] 'authz_read_func'. The receiver of
* that parameter might also take another parameter named
* 'authz_write_func', which although sharing this type, would be a
* different implementation.
*
* @note If someday we want more sophisticated authorization states
* than just yes/no, @a allowed can become an enum type.
*/
typedef svn_error_t *(*svn_repos_authz_func_t)(svn_boolean_t *allowed,
svn_fs_root_t *root,
const char *path,
void *baton,
apr_pool_t *pool);
/** An enum defining the kinds of access authz looks up.
*
* @since New in 1.3.
*/
typedef enum svn_repos_authz_access_t
{
/** No access. */
svn_authz_none = 0,
/** Path can be read. */
svn_authz_read = 1,
/** Path can be altered. */
src/subversion/subversion/include/svn_repos.h view on Meta::CPAN
/** For #svn_repos_notify_load_node_done, the revision committed. */
svn_revnum_t new_revision;
/** For #svn_repos_notify_load_node_done, the source revision, if
different from @a new_revision, otherwise #SVN_INVALID_REVNUM.
For #svn_repos_notify_load_txn_start, the source revision. */
svn_revnum_t old_revision;
/** For #svn_repos_notify_load_node_start, the action being taken on the
node. */
enum svn_node_action node_action;
/** For #svn_repos_notify_load_node_start, the path of the node. */
const char *path;
/* NOTE: Add new fields at the end to preserve binary compatibility.
Also, if you add fields here, you have to update
svn_repos_notify_create(). */
} svn_repos_notify_t;
/** Callback for providing notification from the repository.
* Returns @c void. Justification: success of an operation is not dependent
* upon successful notification of that operation.
*
* @since New in 1.7. */
typedef void (*svn_repos_notify_func_t)(void *baton,
const svn_repos_notify_t *notify,
apr_pool_t *scratch_pool);
/**
* Allocate an #svn_repos_notify_t structure in @a result_pool, initialize
* and return it.
*
* @since New in 1.7.
*/
svn_repos_notify_t *
svn_repos_notify_create(svn_repos_notify_action_t action,
apr_pool_t *result_pool);
/** The repository object. */
typedef struct svn_repos_t svn_repos_t;
/* Opening and creating repositories. */
/** Find the root path of the repository that contains @a path.
*
* If a repository was found, the path to the root of the repository
* is returned, else @c NULL. The pointer to the returned path may be
* equal to @a path.
*/
const char *
svn_repos_find_root_path(const char *path,
apr_pool_t *pool);
/** Set @a *repos_p to a repository object for the repository at @a path.
*
* Allocate @a *repos_p in @a pool.
*
* Acquires a shared lock on the repository, and attaches a cleanup
* function to @a pool to remove the lock. If no lock can be acquired,
* returns error, with undefined effect on @a *repos_p. If an exclusive
* lock is present, this blocks until it's gone. @a fs_config will be
* passed to the filesystem initialization function and may be @c NULL.
*
* @since New in 1.7.
*/
svn_error_t *
svn_repos_open2(svn_repos_t **repos_p,
const char *path,
apr_hash_t *fs_config,
apr_pool_t *pool);
/** Similar to svn_repos_open2() with @a fs_config set to NULL.
*
* @deprecated Provided for backward compatibility with 1.6 API.
*/
SVN_DEPRECATED
svn_error_t *
svn_repos_open(svn_repos_t **repos_p,
const char *path,
apr_pool_t *pool);
/** Create a new Subversion repository at @a path, building the necessary
* directory structure, creating the filesystem, and so on.
* Return the repository object in @a *repos_p, allocated in @a pool.
*
* @a config is a client configuration hash of #svn_config_t * items
* keyed on config category names, and may be NULL.
*
* @a fs_config is passed to the filesystem, and may be NULL.
*
* @a unused_1 and @a unused_2 are not used and should be NULL.
*/
svn_error_t *
svn_repos_create(svn_repos_t **repos_p,
const char *path,
const char *unused_1,
const char *unused_2,
apr_hash_t *config,
apr_hash_t *fs_config,
apr_pool_t *pool);
/**
* Upgrade the Subversion repository (and its underlying versioned
* filesystem) located in the directory @a path to the latest version
* supported by this library. If the requested upgrade is not
* supported due to the current state of the repository or it
* underlying filesystem, return #SVN_ERR_REPOS_UNSUPPORTED_UPGRADE
* or #SVN_ERR_FS_UNSUPPORTED_UPGRADE (respectively) and make no
* changes to the repository or filesystem.
*
* Acquires an exclusive lock on the repository, upgrades the
* repository, and releases the lock. If an exclusive lock can't be
* acquired, returns error.
*
* If @a nonblocking is TRUE, an error of type EWOULDBLOCK is
* returned if the lock is not immediately available.
*
* If @a start_callback is not NULL, it will be called with @a
src/subversion/subversion/include/svn_repos.h view on Meta::CPAN
* allocated in @a pool.
*
* If @a groups_stream is set, use the global groups parsed from it.
*
* @since New in 1.8.
*/
svn_error_t *
svn_repos_authz_parse(svn_authz_t **authz_p,
svn_stream_t *stream,
svn_stream_t *groups_stream,
apr_pool_t *pool);
/**
* Check whether @a user can access @a path in the repository @a
* repos_name with the @a required_access. @a authz lists the ACLs to
* check against. Set @a *access_granted to indicate if the requested
* access is granted.
*
* If @a path is NULL, then check whether @a user has the @a
* required_access anywhere in the repository. Set @a *access_granted
* to TRUE if at least one path is accessible with the @a
* required_access.
*
* For compatibility with 1.6, and earlier, @a repos_name can be NULL
* in which case it is equivalent to a @a repos_name of "".
*
* @note Presently, @a repos_name must byte-for-byte match the repos_name
* specified in the authz file; it is treated as an opaque string, and not
* as a dirent.
*
* @since New in 1.3.
*/
svn_error_t *
svn_repos_authz_check_access(svn_authz_t *authz,
const char *repos_name,
const char *path,
const char *user,
svn_repos_authz_access_t required_access,
svn_boolean_t *access_granted,
apr_pool_t *pool);
/** Revision Access Levels
*
* Like most version control systems, access to versioned objects in
* Subversion is determined on primarily path-based system. Users either
* do or don't have the ability to read a given path.
*
* However, unlike many version control systems where versioned objects
* maintain their own distinct version information (revision numbers,
* authors, log messages, change timestamps, etc.), Subversion binds
* multiple paths changed as part of a single commit operation into a
* set, calls the whole thing a revision, and hangs commit metadata
* (author, date, log message, etc.) off of that revision. So, commit
* metadata is shared across all the paths changed as part of a given
* commit operation.
*
* It is common (or, at least, we hope it is) for log messages to give
* detailed information about changes made in the commit to which the log
* message is attached. Such information might include a mention of all
* the files changed, what was changed in them, and so on. But this
* causes a problem when presenting information to readers who aren't
* authorized to read every path in the repository. Simply knowing that
* a given path exists may be a security leak, even if the user can't see
* the contents of the data located at that path.
*
* So Subversion does what it reasonably can to prevent the leak of this
* information, and does so via a staged revision access policy. A
* reader can be said to have one of three levels of access to a given
* revision's metadata, based solely on the reader's access rights to the
* paths changed or copied in that revision:
*
* 'full access' -- Granted when the reader has access to all paths
* changed or copied in the revision, or when no paths were
* changed in the revision at all, this access level permits
* full visibility of all revision property names and values,
* and the full changed-paths information.
*
* 'no access' -- Granted when the reader does not have access to any
* paths changed or copied in the revision, this access level
* denies the reader access to all revision properties and all
* changed-paths information.
*
* 'partial access' -- Granted when the reader has access to at least
* one, but not all, of the paths changed or copied in the revision,
* this access level permits visibility of the svn:date and
* svn:author revision properties and only the paths of the
* changed-paths information to which the reader has access.
*
*/
/** An enum defining levels of revision access.
*
* @since New in 1.5.
*/
typedef enum svn_repos_revision_access_level_t
{
/** no access allowed to the revision properties and all changed-paths
* information. */
svn_repos_revision_access_none,
/** access granted to some (svn:date and svn:author) revision properties and
* changed-paths information on paths the read has access to. */
svn_repos_revision_access_partial,
/** access granted to all revision properites and changed-paths
* information. */
svn_repos_revision_access_full
}
svn_repos_revision_access_level_t;
/**
* Set @a access to the access level granted for @a revision in @a
* repos, as determined by consulting the @a authz_read_func callback
* function and its associated @a authz_read_baton.
*
* @a authz_read_func may be @c NULL, in which case @a access will be
* set to #svn_repos_revision_access_full.
*
* @since New in 1.5.
( run in 0.831 second using v1.01-cache-2.11-cpan-e1769b4cff6 )