Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_fs_base/dag.h view on Meta::CPAN
/* dag.h : DAG-like interface filesystem, private to libsvn_fs
*
* ====================================================================
* 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.
* ====================================================================
*/
#ifndef SVN_LIBSVN_FS_DAG_H
#define SVN_LIBSVN_FS_DAG_H
#include "svn_fs.h"
#include "trail.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* The interface in this file provides all the essential filesystem
operations, but exposes the filesystem's DAG structure. This makes
it simpler to implement than the public interface, since a client
of this interface has to understand and cope with shared structure
directly as it appears in the database. However, it's still a
self-consistent set of invariants to maintain, making it
(hopefully) a useful interface boundary.
In other words:
- The dag_node_t interface exposes the internal DAG structure of
the filesystem, while the svn_fs.h interface does any cloning
necessary to make the filesystem look like a tree.
- The dag_node_t interface exposes the existence of copy nodes,
whereas the svn_fs.h handles them transparently.
- dag_node_t's must be explicitly cloned, whereas the svn_fs.h
operations make clones implicitly.
- Callers of the dag_node_t interface use Berkeley DB transactions
to ensure consistency between operations, while callers of the
svn_fs.h interface use Subversion transactions. */
/* Initializing a filesystem. */
/* Given a filesystem FS, which contains all the necessary tables,
create the initial revision 0, and the initial root directory. */
svn_error_t *svn_fs_base__dag_init_fs(svn_fs_t *fs);
/* Generic DAG node stuff. */
typedef struct dag_node_t dag_node_t;
/* Fill *NODE with a dag_node_t representing node revision ID in FS,
allocating in POOL. */
svn_error_t *svn_fs_base__dag_get_node(dag_node_t **node,
svn_fs_t *fs,
const svn_fs_id_t *id,
trail_t *trail,
apr_pool_t *pool);
/* Return a new dag_node_t object referring to the same node as NODE,
allocated in POOL. */
dag_node_t *svn_fs_base__dag_dup(dag_node_t *node,
apr_pool_t *pool);
/* Return the filesystem containing NODE. */
svn_fs_t *svn_fs_base__dag_get_fs(dag_node_t *node);
/* Set *REV to NODE's revision number, as part of TRAIL. If NODE has
never been committed as part of a revision, set *REV to
SVN_INVALID_REVNUM. */
svn_error_t *svn_fs_base__dag_get_revision(svn_revnum_t *rev,
dag_node_t *node,
trail_t *trail,
apr_pool_t *pool);
/* Return the node revision ID of NODE. The value returned is shared
with NODE, and will be deallocated when NODE is. */
const svn_fs_id_t *svn_fs_base__dag_get_id(dag_node_t *node);
/* Return the created path of NODE. The value returned is shared
with NODE, and will be deallocated when NODE is. */
const char *svn_fs_base__dag_get_created_path(dag_node_t *node);
( run in 0.849 second using v1.01-cache-2.11-cpan-39bf76dae61 )