blob: 08d82bd810043041e153a6150ab634bfa93dffa4 [file] [log] [blame]
/* fs_x.h : interface to the FSX layer
*
* ====================================================================
* 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_X_FS_X_H
#define SVN_LIBSVN_FS_X_FS_X_H
#include "fs.h"
/* Read the 'format' file of fsx filesystem FS and store its info in FS.
* Use SCRATCH_POOL for temporary allocations. */
svn_error_t *
svn_fs_x__read_format_file(svn_fs_t *fs,
apr_pool_t *scratch_pool);
/* Open the fsx filesystem pointed to by PATH and associate it with
filesystem object FS. Use SCRATCH_POOL for temporary allocations.
### Some parts of *FS must have been initialized beforehand; some parts
(including FS->path) are initialized by this function. */
svn_error_t *
svn_fs_x__open(svn_fs_t *fs,
const char *path,
apr_pool_t *scratch_pool);
/* Initialize parts of the FS data that are being shared across multiple
filesystem objects. Use COMMON_POOL for process-wide and SCRATCH_POOL
for temporary allocations. Use COMMON_POOL_LOCK to ensure that the
initialization is serialized. */
svn_error_t *
svn_fs_x__initialize_shared_data(svn_fs_t *fs,
svn_mutex__t *common_pool_lock,
apr_pool_t *scratch_pool,
apr_pool_t *common_pool);
/* Upgrade the fsx filesystem FS. Indicate progress via the optional
* NOTIFY_FUNC callback using NOTIFY_BATON. The optional CANCEL_FUNC
* will periodically be called with CANCEL_BATON to allow for preemption.
* Use SCRATCH_POOL for temporary allocations. */
svn_error_t *
svn_fs_x__upgrade(svn_fs_t *fs,
svn_fs_upgrade_notify_t notify_func,
void *notify_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *scratch_pool);
/* Set *YOUNGEST to the youngest revision in filesystem FS. Do any
temporary allocation in SCRATCH_POOL. */
svn_error_t *
svn_fs_x__youngest_rev(svn_revnum_t *youngest,
svn_fs_t *fs,
apr_pool_t *scratch_pool);
/* Return SVN_ERR_FS_NO_SUCH_REVISION if the given revision REV is newer
than the current youngest revision in FS or is simply not a valid
revision number, else return success. Use SCRATCH_POOL for temporary
allocations. */
svn_error_t *
svn_fs_x__ensure_revision_exists(svn_revnum_t rev,
svn_fs_t *fs,
apr_pool_t *scratch_pool);
/* Set *LENGTH to the be fulltext length of the node revision
specified by NODEREV. */
svn_error_t *
svn_fs_x__file_length(svn_filesize_t *length,
svn_fs_x__noderev_t *noderev);
/* Return TRUE if the representations in A and B have equal contents, else
return FALSE. */
svn_boolean_t
svn_fs_x__file_text_rep_equal(svn_fs_x__representation_t *a,
svn_fs_x__representation_t *b);
/* Set *EQUAL to TRUE if the property representations in A and B within FS
have equal contents, else set it to FALSE. If STRICT is not set, allow
for false negatives.
Use SCRATCH_POOL for temporary allocations. */
svn_error_t *
svn_fs_x__prop_rep_equal(svn_boolean_t *equal,
svn_fs_t *fs,
svn_fs_x__noderev_t *a,
svn_fs_x__noderev_t *b,
svn_boolean_t strict,
apr_pool_t *scratch_pool);
/* Return a copy of the representation REP allocated from RESULT_POOL. */
svn_fs_x__representation_t *
svn_fs_x__rep_copy(svn_fs_x__representation_t *rep,
apr_pool_t *result_pool);
/* Return the recorded checksum of type KIND for the text representation
of NODREV into CHECKSUM, allocating from RESULT_POOL. If no stored
checksum is available, put all NULL into CHECKSUM. */
svn_error_t *
svn_fs_x__file_checksum(svn_checksum_t **checksum,
svn_fs_x__noderev_t *noderev,
svn_checksum_kind_t kind,
apr_pool_t *result_pool);
/* Under the repository db PATH, create a FSFS repository with FORMAT,
* the given SHARD_SIZE. If not supported by the respective format,
* the latter two parameters will be ignored. FS will be updated.
*
* The only file not being written is the 'format' file. This allows
* callers such as hotcopy to modify the contents before turning the
* tree into an accessible repository.
*
* Use SCRATCH_POOL for temporary allocations.
*/
svn_error_t *
svn_fs_x__create_file_tree(svn_fs_t *fs,
const char *path,
int format,
int shard_size,
apr_pool_t *scratch_pool);
/* Create a fs_x fileysystem referenced by FS at path PATH. Get any
temporary allocations from SCRATCH_POOL.
### Some parts of *FS must have been initialized beforehand; some parts
(including FS->path) are initialized by this function. */
svn_error_t *
svn_fs_x__create(svn_fs_t *fs,
const char *path,
apr_pool_t *scratch_pool);
/* Set the uuid of repository FS to UUID and the instance ID to INSTANCE_ID.
If any of them is NULL, use a newly generated UUID / ID instead.
If OVERWRITE is not set, the uuid file must not exist yet implying this
is a fresh repository.
Perform temporary allocations in SCRATCH_POOL. */
svn_error_t *
svn_fs_x__set_uuid(svn_fs_t *fs,
const char *uuid,
const char *instance_id,
svn_boolean_t overwrite,
apr_pool_t *scratch_pool);
/* Read the format number and maximum number of files per directory
from PATH and return them in *PFORMAT and *MAX_FILES_PER_DIR
respectively.
*MAX_FILES_PER_DIR is obtained from the 'layout' format option, and
will be set to zero if a linear scheme should be used.
Use SCRATCH_POOL for temporary allocation. */
svn_error_t *
svn_fs_x__write_format(svn_fs_t *fs,
svn_boolean_t overwrite,
apr_pool_t *scratch_pool);
/* Find the value of the property named PROPNAME in transaction REV.
Return the contents in *VALUE_P, allocated from RESULT_POOL.
If REFRESH is not set, continue using the potentially outdated
revprop generation value in FS->FSAP_DATA.
Use SCRATCH_POOL for temporary allocations. */
svn_error_t *
svn_fs_x__revision_prop(svn_string_t **value_p,
svn_fs_t *fs,
svn_revnum_t rev,
const char *propname,
svn_boolean_t refresh,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
/* Change, add, or delete a property on a revision REV in filesystem
FS. NAME gives the name of the property, and value, if non-NULL,
gives the new contents of the property. If value is NULL, then the
property will be deleted. If OLD_VALUE_P is not NULL, do nothing unless
the preexisting value is *OLD_VALUE_P.
Do any temporary allocation in SCRATCH_POOL. */
svn_error_t *
svn_fs_x__change_rev_prop(svn_fs_t *fs,
svn_revnum_t rev,
const char *name,
const svn_string_t *const *old_value_p,
const svn_string_t *value,
apr_pool_t *scratch_pool);
/* If directory PATH does not exist, create it and give it the same
permissions as FS_PATH. Do any temporary allocation in SCRATCH_POOL. */
svn_error_t *
svn_fs_x__ensure_dir_exists(const char *path,
const char *fs_path,
apr_pool_t *scratch_pool);
/* Initialize all session-local caches in FS according to the global
cache settings. Use SCRATCH_POOL for temporary allocations.
Please note that it is permissible for this function to set some
or all of these caches to NULL, regardless of any setting. */
svn_error_t *
svn_fs_x__initialize_caches(svn_fs_t *fs,
apr_pool_t *scratch_pool);
#endif