1/* rep-cache.h : interface to rep cache db functions 2 * 3 * ==================================================================== 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 * ==================================================================== 21 */ 22 23#ifndef SVN_LIBSVN_FS_FS_REP_CACHE_H 24#define SVN_LIBSVN_FS_FS_REP_CACHE_H 25 26#include "svn_error.h" 27 28#include "fs.h" 29 30#ifdef __cplusplus 31extern "C" { 32#endif /* __cplusplus */ 33 34 35#define REP_CACHE_DB_NAME "rep-cache.db" 36 37/* Open and create, if needed, the rep cache database associated with FS. 38 Use POOL for temporary allocations. */ 39svn_error_t * 40svn_fs_fs__open_rep_cache(svn_fs_t *fs, 41 apr_pool_t *pool); 42 43/* Close the rep cache database associated with FS. */ 44svn_error_t * 45svn_fs_fs__close_rep_cache(svn_fs_t *fs); 46 47/* Set *EXISTS to TRUE iff the rep-cache DB file exists. */ 48svn_error_t * 49svn_fs_fs__exists_rep_cache(svn_boolean_t *exists, 50 svn_fs_t *fs, apr_pool_t *pool); 51 52/* Iterate all representations currently in FS's cache. */ 53svn_error_t * 54svn_fs_fs__walk_rep_reference(svn_fs_t *fs, 55 svn_revnum_t start, 56 svn_revnum_t end, 57 svn_error_t *(*walker)(representation_t *rep, 58 void *walker_baton, 59 svn_fs_t *fs, 60 apr_pool_t *scratch_pool), 61 void *walker_baton, 62 svn_cancel_func_t cancel_func, 63 void *cancel_baton, 64 apr_pool_t *pool); 65 66/* Return the representation REP in FS which has fulltext CHECKSUM. 67 *REP_P is allocated in POOL. If the rep cache database has not been 68 opened, just set *REP_P to NULL. Returns SVN_ERR_FS_CORRUPT if 69 a reference beyond HEAD is detected. */ 70svn_error_t * 71svn_fs_fs__get_rep_reference(representation_t **rep_p, 72 svn_fs_t *fs, 73 svn_checksum_t *checksum, 74 apr_pool_t *pool); 75 76/* Set the representation REP in FS, using REP->CHECKSUM. 77 Use POOL for temporary allocations. Returns SVN_ERR_FS_CORRUPT if 78 an existing reference beyond HEAD is detected. 79 80 If the rep cache database has not been opened, this may be a no op. */ 81svn_error_t * 82svn_fs_fs__set_rep_reference(svn_fs_t *fs, 83 representation_t *rep, 84 apr_pool_t *pool); 85 86/* Delete from the cache all reps corresponding to revisions younger 87 than YOUNGEST. */ 88svn_error_t * 89svn_fs_fs__del_rep_reference(svn_fs_t *fs, 90 svn_revnum_t youngest, 91 apr_pool_t *pool); 92 93/* Start a transaction to take an SQLite reserved lock that prevents 94 other writes, call BODY, end the transaction, and return what BODY returned. 95 */ 96svn_error_t * 97svn_fs_fs__with_rep_cache_lock(svn_fs_t *fs, 98 svn_error_t *(*body)(void *baton, 99 apr_pool_t *pool), 100 void *baton, 101 apr_pool_t *pool); 102 103#ifdef __cplusplus 104} 105#endif /* __cplusplus */ 106 107#endif /* SVN_LIBSVN_FS_FS_REP_CACHE_H */ 108