svn_client_mtcc.h revision 299742
1/**
2 * @copyright
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 * @endcopyright
22 *
23 * @file svn_client_mtcc.h
24 * @brief Subversion multicommand client support
25 *
26 * Requires:  The working copy library and client library.
27 * Provides:  High level multicommand api.
28 * Used By:   Client programs, svnmucc.
29 */
30
31#ifndef SVN_CLIENT_MTCC_H
32#define SVN_CLIENT_MTCC_H
33
34#include "svn_client.h"
35
36#ifdef __cplusplus
37extern "C" {
38#endif /* __cplusplus */
39
40
41/**
42 *
43 * @defgroup clnt_mtcc Multi Command Context related functions
44 *
45 * @{
46 *
47 */
48
49/** This is a structure which stores a list of repository commands
50 * that can be played to a repository as a single operation
51 *
52 * Use svn_client__mtcc_create() to create instances
53 *
54 * @since New in 1.9.
55 */
56typedef struct svn_client__mtcc_t svn_client__mtcc_t;
57
58/** Creates a new multicommand context for an operation on @a anchor_url and
59 * its descendants.
60 *
61 * Allocate the context in @a result_pool and perform temporary allocations in
62 * @a scratch_pool.
63 *
64 * @since New in 1.9.
65 */
66svn_error_t *
67svn_client__mtcc_create(svn_client__mtcc_t **mtcc,
68                        const char *anchor_url,
69                        svn_revnum_t base_revision,
70                        svn_client_ctx_t *ctx,
71                        apr_pool_t *result_pool,
72                        apr_pool_t *scratch_pool);
73
74/** Adds a file add operation of @a relpath to @a mtcc. If @a src_checksum
75 * is not null it will be provided to the repository to verify if the file
76 * was transferred successfully.
77 *
78 * Perform temporary allocations in @a scratch_pool.
79 *
80 * @note The current implementation keeps @a src_stream open until @a mtcc
81 * is committed.
82 *
83 * @since New in 1.9.
84 */
85svn_error_t *
86svn_client__mtcc_add_add_file(const char *relpath,
87                              svn_stream_t *src_stream,
88                              const svn_checksum_t *src_checksum,
89                              svn_client__mtcc_t *mtcc,
90                              apr_pool_t *scratch_pool);
91
92/** Adds a copy operation of the node @a src_relpath at revision @a revision
93 * to @a dst_relpath to @a mtcc.
94 *
95 * Perform temporary allocations in @a scratch_pool.
96 *
97 * @since New in 1.9.
98 */
99svn_error_t *
100svn_client__mtcc_add_copy(const char *src_relpath,
101                          svn_revnum_t revision,
102                          const char *dst_relpath,
103                          svn_client__mtcc_t *mtcc,
104                          apr_pool_t *scratch_pool);
105
106/** Adds a delete of @a relpath to @a mtcc.
107 *
108 * Perform temporary allocations in @a scratch_pool.
109 *
110 * @since New in 1.9.
111 */
112svn_error_t *
113svn_client__mtcc_add_delete(const char *relpath,
114                            svn_client__mtcc_t *mtcc,
115                            apr_pool_t *scratch_pool);
116
117/** Adds an mkdir operation of @a relpath to @a mtcc.
118 *
119 * Perform temporary allocations in @a scratch_pool.
120 *
121 * @since New in 1.9.
122 */
123svn_error_t *
124svn_client__mtcc_add_mkdir(const char *relpath,
125                           svn_client__mtcc_t *mtcc,
126                           apr_pool_t *scratch_pool);
127
128
129/** Adds a move operation of the node @a src_relpath to @a dst_relpath to
130 * @a mtcc.
131 *
132 * Perform temporary allocations in @a scratch_pool.
133 *
134 * @since New in 1.9.
135 */
136svn_error_t *
137svn_client__mtcc_add_move(const char *src_relpath,
138                          const char *dst_relpath,
139                          svn_client__mtcc_t *mtcc,
140                          apr_pool_t *scratch_pool);
141
142/** Adds a propset operation for the property @a propname to @a propval
143 * (which can be NULL for a delete) on @a relpath to @a mtcc.
144 *
145 * If @a skip_checks is not FALSE Subversion defined properties are verified
146 * for correctness like svn_client_propset_remote()
147 *
148 * Perform temporary allocations in @a scratch_pool.
149 *
150 * @since New in 1.9.
151 */
152svn_error_t *
153svn_client__mtcc_add_propset(const char *relpath,
154                             const char *propname,
155                             const svn_string_t *propval,
156                             svn_boolean_t skip_checks,
157                             svn_client__mtcc_t *mtcc,
158                             apr_pool_t *scratch_pool);
159
160
161/** Adds an update file operation for @a relpath to @a mtcc.
162 *
163 * The final version of the file is provided with @a src_stream. If @a
164 * src_checksum is provided it will be provided to the repository to verify
165 * the final result.
166 *
167 * If @a base_checksum is provided it will be used by the repository to verify
168 * if the base file matches this checksum.
169 *
170 * If @a base_stream is not NULL only the binary diff from @a base_stream to
171 * @a src_stream is written to the repository.
172 *
173 * Perform temporary allocations in @a scratch_pool.
174 *
175 * @note Callers should assume that the mtcc requires @a src_stream and @a
176 * base_stream to be valid until @a mtcc is committed.
177 *
178 * @since New in 1.9.
179 */
180svn_error_t *
181svn_client__mtcc_add_update_file(const char *relpath,
182                                 svn_stream_t *src_stream,
183                                 const svn_checksum_t *src_checksum,
184                                 svn_stream_t *base_stream,
185                                 const svn_checksum_t *base_checksum,
186                                 svn_client__mtcc_t *mtcc,
187                                 apr_pool_t *scratch_pool);
188
189/** Obtains the kind of node at @a relpath in the current state of @a mtcc.
190 * This value might be from the cache (in case of modifications, copies)
191 * or fetched from the repository.
192 *
193 * If @a check_repository is TRUE, verify the node type with the repository at
194 * least once and cache the result for further checks.
195 *
196 * When a node does not exist this functions sets @a *kind to @c svn_node_node.
197 *
198 * @since New in 1.9.
199 */
200svn_error_t *
201svn_client__mtcc_check_path(svn_node_kind_t *kind,
202                            const char *relpath,
203                            svn_boolean_t check_repository,
204                            svn_client__mtcc_t *mtcc,
205                            apr_pool_t *scratch_pool);
206
207/** Commits all operations stored in @a mtcc as a new revision and destroys
208 * @a mtcc.
209 *
210 * @since New in 1.9.
211 */
212svn_error_t *
213svn_client__mtcc_commit(apr_hash_t *revprop_table,
214                        svn_commit_callback2_t commit_callback,
215                        void *commit_baton,
216                        svn_client__mtcc_t *mtcc,
217                        apr_pool_t *scratch_pool);
218
219
220/** @} end group: Multi Command Context related functions */
221
222#ifdef __cplusplus
223}
224#endif /* __cplusplus */
225
226#endif  /* SVN_CLIENT_MTCC_H */
227