summaryrefslogtreecommitdiffstats
path: root/subversion/libsvn_fs_base/fs.h
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_fs_base/fs.h')
-rw-r--r--subversion/libsvn_fs_base/fs.h357
1 files changed, 357 insertions, 0 deletions
diff --git a/subversion/libsvn_fs_base/fs.h b/subversion/libsvn_fs_base/fs.h
new file mode 100644
index 0000000..017c898
--- /dev/null
+++ b/subversion/libsvn_fs_base/fs.h
@@ -0,0 +1,357 @@
+/* fs.h : interface to Subversion 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_BASE_H
+#define SVN_LIBSVN_FS_BASE_H
+
+#define SVN_WANT_BDB
+#include "svn_private_config.h"
+
+#include <apr_pools.h>
+#include <apr_hash.h>
+#include "svn_fs.h"
+
+#include "bdb/env.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/*** Filesystem schema versions ***/
+
+/* The format number of this filesystem. This is independent of the
+ repository format number, and independent of any other FS back
+ ends. See the SVN_FS_BASE__MIN_*_FORMAT defines to get a sense of
+ what changes and features were added in which versions of this
+ back-end's format. */
+#define SVN_FS_BASE__FORMAT_NUMBER 4
+
+/* Minimum format number that supports representation sharing. This
+ also brings in the support for storing SHA1 checksums. */
+#define SVN_FS_BASE__MIN_REP_SHARING_FORMAT 4
+
+/* Minimum format number that supports the 'miscellaneous' table */
+#define SVN_FS_BASE__MIN_MISCELLANY_FORMAT 4
+
+/* Minimum format number that supports forward deltas */
+#define SVN_FS_BASE__MIN_FORWARD_DELTAS_FORMAT 4
+
+/* Minimum format number that supports node-origins tracking */
+#define SVN_FS_BASE__MIN_NODE_ORIGINS_FORMAT 3
+
+/* Minimum format number that supports mergeinfo */
+#define SVN_FS_BASE__MIN_MERGEINFO_FORMAT 3
+
+/* Minimum format number that supports svndiff version 1. */
+#define SVN_FS_BASE__MIN_SVNDIFF1_FORMAT 2
+
+/* Return SVN_ERR_UNSUPPORTED_FEATURE if the version of filesystem FS does
+ not indicate support for FEATURE (which REQUIRES a newer version). */
+svn_error_t *
+svn_fs_base__test_required_feature_format(svn_fs_t *fs,
+ const char *feature,
+ int requires);
+
+
+
+/*** Miscellany keys. ***/
+
+/* Revision at which the repo started using forward deltas. */
+#define SVN_FS_BASE__MISC_FORWARD_DELTA_UPGRADE "forward-delta-rev"
+
+
+
+/*** The filesystem structure. ***/
+
+typedef struct base_fs_data_t
+{
+ /* A Berkeley DB environment for all the filesystem's databases.
+ This establishes the scope of the filesystem's transactions. */
+ bdb_env_baton_t *bdb;
+
+ /* The filesystem's various tables. See `structure' for details. */
+ DB *changes;
+ DB *copies;
+ DB *nodes;
+ DB *representations;
+ DB *revisions;
+ DB *strings;
+ DB *transactions;
+ DB *uuids;
+ DB *locks;
+ DB *lock_tokens;
+ DB *node_origins;
+ DB *miscellaneous;
+ DB *checksum_reps;
+
+ /* A boolean for tracking when we have a live Berkeley DB
+ transaction trail alive. */
+ svn_boolean_t in_txn_trail;
+
+ /* The format number of this FS. */
+ int format;
+
+} base_fs_data_t;
+
+
+/*** Filesystem Revision ***/
+typedef struct revision_t
+{
+ /* id of the transaction that was committed to create this
+ revision. */
+ const char *txn_id;
+
+} revision_t;
+
+
+/*** Transaction Kind ***/
+typedef enum transaction_kind_t
+{
+ transaction_kind_normal = 1, /* normal, uncommitted */
+ transaction_kind_committed, /* committed */
+ transaction_kind_dead /* uncommitted and dead */
+
+} transaction_kind_t;
+
+
+/*** Filesystem Transaction ***/
+typedef struct transaction_t
+{
+ /* kind of transaction. */
+ transaction_kind_t kind;
+
+ /* revision which this transaction was committed to create, or an
+ invalid revision number if this transaction was never committed. */
+ svn_revnum_t revision;
+
+ /* property list (const char * name, svn_string_t * value).
+ may be NULL if there are no properties. */
+ apr_hash_t *proplist;
+
+ /* node revision id of the root node. */
+ const svn_fs_id_t *root_id;
+
+ /* node revision id of the node which is the root of the revision
+ upon which this txn is base. (unfinished only) */
+ const svn_fs_id_t *base_id;
+
+ /* copies list (const char * copy_ids), or NULL if there have been
+ no copies in this transaction. */
+ apr_array_header_t *copies;
+
+} transaction_t;
+
+
+/*** Node-Revision ***/
+typedef struct node_revision_t
+{
+ /* node kind */
+ svn_node_kind_t kind;
+
+ /* predecessor node revision id, or NULL if there is no predecessor
+ for this node revision */
+ const svn_fs_id_t *predecessor_id;
+
+ /* number of predecessors this node revision has (recursively), or
+ -1 if not known (for backward compatibility). */
+ int predecessor_count;
+
+ /* representation key for this node's properties. may be NULL if
+ there are no properties. */
+ const char *prop_key;
+
+ /* representation key for this node's text data (files) or entries
+ list (dirs). may be NULL if there are no contents. */
+ const char *data_key;
+
+ /* data representation instance identifier. Sounds fancy, but is
+ really just a way to distinguish between "I use the same rep key
+ as another node because we share ancestry and haven't had our
+ text touched at all" and "I use the same rep key as another node
+ only because one or both of us decided to pick up a shared
+ representation after-the-fact." May be NULL (if this node
+ revision isn't using a shared rep, or isn't the original
+ "assignee" of a shared rep). */
+ const char *data_key_uniquifier;
+
+ /* representation key for this node's text-data-in-progess (files
+ only). NULL if no edits are currently in-progress. This field
+ is always NULL for kinds other than "file". */
+ const char *edit_key;
+
+ /* path at which this node first came into existence. */
+ const char *created_path;
+
+ /* does this node revision have the mergeinfo tracking property set
+ on it? (only valid for FS schema 3 and newer) */
+ svn_boolean_t has_mergeinfo;
+
+ /* number of children of this node which have the mergeinfo tracking
+ property set (0 for files; valid only for FS schema 3 and newer). */
+ apr_int64_t mergeinfo_count;
+
+} node_revision_t;
+
+
+/*** Representation Kind ***/
+typedef enum rep_kind_t
+{
+ rep_kind_fulltext = 1, /* fulltext */
+ rep_kind_delta /* delta */
+
+} rep_kind_t;
+
+
+/*** "Delta" Offset/Window Chunk ***/
+typedef struct rep_delta_chunk_t
+{
+ /* diff format version number ### at this point, "svndiff" is the
+ only format used. */
+ apr_byte_t version;
+
+ /* starting offset of the data represented by this chunk */
+ svn_filesize_t offset;
+
+ /* string-key to which this representation points. */
+ const char *string_key;
+
+ /* size of the fulltext data represented by this delta window. */
+ apr_size_t size;
+
+ /* representation-key to use when needed source data for
+ undeltification. */
+ const char *rep_key;
+
+ /* apr_off_t rep_offset; ### not implemented */
+
+} rep_delta_chunk_t;
+
+
+/*** Representation ***/
+typedef struct representation_t
+{
+ /* representation kind */
+ rep_kind_t kind;
+
+ /* transaction ID under which representation was created (used as a
+ mutability flag when compared with a current editing
+ transaction). */
+ const char *txn_id;
+
+ /* Checksums for the contents produced by this representation.
+ These checksum is for the contents the rep shows to consumers,
+ regardless of how the rep stores the data under the hood. It is
+ independent of the storage (fulltext, delta, whatever).
+
+ If this is NULL, then for compatibility behave as though
+ this checksum matches the expected checksum. */
+ svn_checksum_t *md5_checksum;
+ svn_checksum_t *sha1_checksum;
+
+ /* kind-specific stuff */
+ union
+ {
+ /* fulltext stuff */
+ struct
+ {
+ /* string-key which holds the fulltext data */
+ const char *string_key;
+
+ } fulltext;
+
+ /* delta stuff */
+ struct
+ {
+ /* an array of rep_delta_chunk_t * chunks of delta
+ information */
+ apr_array_header_t *chunks;
+
+ } delta;
+ } contents;
+} representation_t;
+
+
+/*** Copy Kind ***/
+typedef enum copy_kind_t
+{
+ copy_kind_real = 1, /* real copy */
+ copy_kind_soft /* soft copy */
+
+} copy_kind_t;
+
+
+/*** Copy ***/
+typedef struct copy_t
+{
+ /* What kind of copy occurred. */
+ copy_kind_t kind;
+
+ /* Path of copy source. */
+ const char *src_path;
+
+ /* Transaction id of copy source. */
+ const char *src_txn_id;
+
+ /* Node-revision of copy destination. */
+ const svn_fs_id_t *dst_noderev_id;
+
+} copy_t;
+
+
+/*** Change ***/
+typedef struct change_t
+{
+ /* Path of the change. */
+ const char *path;
+
+ /* Node revision ID of the change. */
+ const svn_fs_id_t *noderev_id;
+
+ /* The kind of change. */
+ svn_fs_path_change_kind_t kind;
+
+ /* Text or property mods? */
+ svn_boolean_t text_mod;
+ svn_boolean_t prop_mod;
+
+} change_t;
+
+
+/*** Lock node ***/
+typedef struct lock_node_t
+{
+ /* entries list, maps (const char *) name --> (const char *) lock-node-id */
+ apr_hash_t *entries;
+
+ /* optional lock-token, might be NULL. */
+ const char *lock_token;
+
+} lock_node_t;
+
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_LIBSVN_FS_BASE_H */
OpenPOWER on IntegriCloud