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