1251881Speter/* revs-txns.h : internal interface to revision and transactions operations 2251881Speter * 3251881Speter * ==================================================================== 4251881Speter * Licensed to the Apache Software Foundation (ASF) under one 5251881Speter * or more contributor license agreements. See the NOTICE file 6251881Speter * distributed with this work for additional information 7251881Speter * regarding copyright ownership. The ASF licenses this file 8251881Speter * to you under the Apache License, Version 2.0 (the 9251881Speter * "License"); you may not use this file except in compliance 10251881Speter * with the License. You may obtain a copy of the License at 11251881Speter * 12251881Speter * http://www.apache.org/licenses/LICENSE-2.0 13251881Speter * 14251881Speter * Unless required by applicable law or agreed to in writing, 15251881Speter * software distributed under the License is distributed on an 16251881Speter * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17251881Speter * KIND, either express or implied. See the License for the 18251881Speter * specific language governing permissions and limitations 19251881Speter * under the License. 20251881Speter * ==================================================================== 21251881Speter */ 22251881Speter 23251881Speter#ifndef SVN_LIBSVN_FS_REVS_TXNS_H 24251881Speter#define SVN_LIBSVN_FS_REVS_TXNS_H 25251881Speter 26251881Speter#define SVN_WANT_BDB 27251881Speter#include "svn_private_config.h" 28251881Speter 29251881Speter#include "svn_fs.h" 30251881Speter 31251881Speter#include "fs.h" 32251881Speter#include "trail.h" 33251881Speter 34251881Speter#ifdef __cplusplus 35251881Speterextern "C" { 36251881Speter#endif /* __cplusplus */ 37251881Speter 38251881Speter 39251881Speter 40251881Speter/*** Revisions ***/ 41251881Speter 42251881Speter/* Set *ROOT_ID_P to the ID of the root directory of revision REV in FS, 43251881Speter as part of TRAIL. Allocate the ID in POOL. */ 44251881Spetersvn_error_t *svn_fs_base__rev_get_root(const svn_fs_id_t **root_id_p, 45251881Speter svn_fs_t *fs, 46251881Speter svn_revnum_t rev, 47251881Speter trail_t *trail, 48251881Speter apr_pool_t *pool); 49251881Speter 50251881Speter 51251881Speter/* Set *TXN_ID_P to the ID of the transaction that was committed to 52251881Speter create REV in FS, as part of TRAIL. Allocate the ID in POOL. */ 53251881Spetersvn_error_t *svn_fs_base__rev_get_txn_id(const char **txn_id_p, 54251881Speter svn_fs_t *fs, 55251881Speter svn_revnum_t rev, 56251881Speter trail_t *trail, 57251881Speter apr_pool_t *pool); 58251881Speter 59251881Speter 60251881Speter/* Set property NAME to VALUE on REV in FS, as part of TRAIL. */ 61251881Spetersvn_error_t *svn_fs_base__set_rev_prop(svn_fs_t *fs, 62251881Speter svn_revnum_t rev, 63251881Speter const char *name, 64251881Speter const svn_string_t *const *old_value_p, 65251881Speter const svn_string_t *value, 66251881Speter trail_t *trail, 67251881Speter apr_pool_t *pool); 68251881Speter 69251881Speter 70251881Speter 71251881Speter/*** Transactions ***/ 72251881Speter 73251881Speter/* Convert the unfinished transaction in FS named TXN_NAME to a 74251881Speter committed transaction that refers to REVISION as part of TRAIL. 75251881Speter 76251881Speter Returns SVN_ERR_FS_TRANSACTION_NOT_MUTABLE if TXN_NAME refers to a 77251881Speter transaction that has already been committed. */ 78251881Spetersvn_error_t *svn_fs_base__txn_make_committed(svn_fs_t *fs, 79251881Speter const char *txn_name, 80251881Speter svn_revnum_t revision, 81251881Speter trail_t *trail, 82251881Speter apr_pool_t *pool); 83251881Speter 84251881Speter 85251881Speter/* Set *REVISION to the revision which was created when FS transaction 86251881Speter TXN_NAME was committed, or to SVN_INVALID_REVNUM if the transaction 87251881Speter has not been committed. Do all of this as part of TRAIL. */ 88251881Spetersvn_error_t *svn_fs_base__txn_get_revision(svn_revnum_t *revision, 89251881Speter svn_fs_t *fs, 90251881Speter const char *txn_name, 91251881Speter trail_t *trail, 92251881Speter apr_pool_t *pool); 93251881Speter 94251881Speter 95251881Speter/* Retrieve information about the Subversion transaction TXN_NAME from 96251881Speter the `transactions' table of FS, as part of TRAIL. 97251881Speter Set *ROOT_ID_P to the ID of the transaction's root directory. 98251881Speter Set *BASE_ROOT_ID_P to the ID of the root directory of the 99251881Speter transaction's base revision. 100251881Speter 101251881Speter If there is no such transaction, SVN_ERR_FS_NO_SUCH_TRANSACTION is 102251881Speter the error returned. 103251881Speter 104251881Speter Returns SVN_ERR_FS_TRANSACTION_NOT_MUTABLE if TXN_NAME refers to a 105251881Speter transaction that has already been committed. 106251881Speter 107251881Speter Allocate *ROOT_ID_P and *BASE_ROOT_ID_P in POOL. */ 108251881Spetersvn_error_t *svn_fs_base__get_txn_ids(const svn_fs_id_t **root_id_p, 109251881Speter const svn_fs_id_t **base_root_id_p, 110251881Speter svn_fs_t *fs, 111251881Speter const char *txn_name, 112251881Speter trail_t *trail, 113251881Speter apr_pool_t *pool); 114251881Speter 115251881Speter 116251881Speter/* Set the root directory of the Subversion transaction TXN_NAME in FS 117251881Speter to ROOT_ID, as part of TRAIL. Do any necessary temporary 118251881Speter allocation in POOL. 119251881Speter 120251881Speter Returns SVN_ERR_FS_TRANSACTION_NOT_MUTABLE if TXN_NAME refers to a 121251881Speter transaction that has already been committed. */ 122251881Spetersvn_error_t *svn_fs_base__set_txn_root(svn_fs_t *fs, 123251881Speter const char *txn_name, 124251881Speter const svn_fs_id_t *root_id, 125251881Speter trail_t *trail, 126251881Speter apr_pool_t *pool); 127251881Speter 128251881Speter 129251881Speter/* Add COPY_ID to the list of copies made under the Subversion 130251881Speter transaction TXN_NAME in FS as part of TRAIL. 131251881Speter 132251881Speter Returns SVN_ERR_FS_TRANSACTION_NOT_MUTABLE if TXN_NAME refers to a 133251881Speter transaction that has already been committed. */ 134251881Spetersvn_error_t *svn_fs_base__add_txn_copy(svn_fs_t *fs, 135251881Speter const char *txn_name, 136251881Speter const char *copy_id, 137251881Speter trail_t *trail, 138251881Speter apr_pool_t *pool); 139251881Speter 140251881Speter 141251881Speter/* Set the base root directory of TXN_NAME in FS to NEW_ID, as part of 142251881Speter TRAIL. Do any necessary temporary allocation in POOL. 143251881Speter 144251881Speter Returns SVN_ERR_FS_TRANSACTION_NOT_MUTABLE if TXN_NAME refers to a 145251881Speter transaction that has already been committed. */ 146251881Spetersvn_error_t *svn_fs_base__set_txn_base(svn_fs_t *fs, 147251881Speter const char *txn_name, 148251881Speter const svn_fs_id_t *new_id, 149251881Speter trail_t *trail, 150251881Speter apr_pool_t *pool); 151251881Speter 152251881Speter 153251881Speter/* Set a property NAME to VALUE on transaction TXN_NAME in FS as part 154251881Speter of TRAIL. Use POOL for any necessary allocations. 155251881Speter 156251881Speter Returns SVN_ERR_FS_TRANSACTION_NOT_MUTABLE if TXN_NAME refers to a 157251881Speter transaction that has already been committed. */ 158251881Spetersvn_error_t *svn_fs_base__set_txn_prop(svn_fs_t *fs, 159251881Speter const char *txn_name, 160251881Speter const char *name, 161251881Speter const svn_string_t *value, 162251881Speter trail_t *trail, 163251881Speter apr_pool_t *pool); 164251881Speter 165251881Speter 166251881Speter/* These functions implement some of the calls in the FS loader 167251881Speter library's fs and txn vtables. */ 168251881Speter 169251881Spetersvn_error_t *svn_fs_base__youngest_rev(svn_revnum_t *youngest_p, svn_fs_t *fs, 170251881Speter apr_pool_t *pool); 171251881Speter 172251881Spetersvn_error_t *svn_fs_base__revision_prop(svn_string_t **value_p, svn_fs_t *fs, 173251881Speter svn_revnum_t rev, 174251881Speter const char *propname, 175362181Sdim svn_boolean_t refresh, 176362181Sdim apr_pool_t *result_pool, 177362181Sdim apr_pool_t *scratch_pool); 178251881Speter 179251881Spetersvn_error_t *svn_fs_base__revision_proplist(apr_hash_t **table_p, 180251881Speter svn_fs_t *fs, 181251881Speter svn_revnum_t rev, 182362181Sdim svn_boolean_t refresh, 183362181Sdim apr_pool_t *result_pool, 184362181Sdim apr_pool_t *scratch_pool); 185251881Speter 186251881Spetersvn_error_t *svn_fs_base__change_rev_prop(svn_fs_t *fs, svn_revnum_t rev, 187251881Speter const char *name, 188251881Speter const svn_string_t *const *old_value_p, 189251881Speter const svn_string_t *value, 190251881Speter apr_pool_t *pool); 191251881Speter 192251881Spetersvn_error_t *svn_fs_base__begin_txn(svn_fs_txn_t **txn_p, svn_fs_t *fs, 193251881Speter svn_revnum_t rev, apr_uint32_t flags, 194251881Speter apr_pool_t *pool); 195251881Speter 196251881Spetersvn_error_t *svn_fs_base__open_txn(svn_fs_txn_t **txn, svn_fs_t *fs, 197251881Speter const char *name, apr_pool_t *pool); 198251881Speter 199251881Spetersvn_error_t *svn_fs_base__purge_txn(svn_fs_t *fs, const char *txn_id, 200251881Speter apr_pool_t *pool); 201251881Speter 202251881Spetersvn_error_t *svn_fs_base__list_transactions(apr_array_header_t **names_p, 203251881Speter svn_fs_t *fs, apr_pool_t *pool); 204251881Speter 205251881Spetersvn_error_t *svn_fs_base__abort_txn(svn_fs_txn_t *txn, apr_pool_t *pool); 206251881Speter 207251881Spetersvn_error_t *svn_fs_base__txn_prop(svn_string_t **value_p, svn_fs_txn_t *txn, 208251881Speter const char *propname, apr_pool_t *pool); 209251881Speter 210251881Spetersvn_error_t *svn_fs_base__txn_proplist(apr_hash_t **table_p, 211251881Speter svn_fs_txn_t *txn, 212251881Speter apr_pool_t *pool); 213251881Speter 214251881Speter/* Helper func: variant of __txn_proplist that uses an existing TRAIL. 215251881Speter * TXN_ID identifies the transaction. 216251881Speter * *TABLE_P will be non-null upon success. 217251881Speter */ 218251881Spetersvn_error_t *svn_fs_base__txn_proplist_in_trail(apr_hash_t **table_p, 219251881Speter const char *txn_id, 220251881Speter trail_t *trail); 221251881Speter 222251881Spetersvn_error_t *svn_fs_base__change_txn_prop(svn_fs_txn_t *txn, const char *name, 223251881Speter const svn_string_t *value, 224251881Speter apr_pool_t *pool); 225251881Speter 226251881Spetersvn_error_t *svn_fs_base__change_txn_props(svn_fs_txn_t *txn, 227251881Speter const apr_array_header_t *props, 228251881Speter apr_pool_t *pool); 229251881Speter 230251881Speter 231251881Speter#ifdef __cplusplus 232251881Speter} 233251881Speter#endif /* __cplusplus */ 234251881Speter 235251881Speter#endif /* SVN_LIBSVN_FS_REVS_TXNS_H */ 236