svn_ra_svn_private.h revision 289180
1251881Speter/**
2251881Speter * @copyright
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 * @endcopyright
22251881Speter *
23251881Speter * @file svn_ra_svn_private.h
24251881Speter * @brief Functions used by the server - Internal routines
25251881Speter */
26251881Speter
27251881Speter#ifndef SVN_RA_SVN_PRIVATE_H
28251881Speter#define SVN_RA_SVN_PRIVATE_H
29251881Speter
30251881Speter#include "svn_ra_svn.h"
31251881Speter#include "svn_editor.h"
32251881Speter
33251881Speter#ifdef __cplusplus
34251881Speterextern "C" {
35251881Speter#endif /* __cplusplus */
36251881Speter
37251881Speter
38251881Speter/**
39251881Speter * Set the shim callbacks to be used by @a conn to @a shim_callbacks.
40251881Speter */
41251881Spetersvn_error_t *
42251881Spetersvn_ra_svn__set_shim_callbacks(svn_ra_svn_conn_t *conn,
43251881Speter                               svn_delta_shim_callbacks_t *shim_callbacks);
44251881Speter
45251881Speter/**
46289180Speter * Return the memory pool used to allocate @a conn.
47289180Speter */
48289180Speterapr_pool_t *
49289180Spetersvn_ra_svn__get_pool(svn_ra_svn_conn_t *conn);
50289180Speter
51289180Speter/**
52251881Speter * @defgroup ra_svn_deprecated ra_svn low-level functions
53251881Speter * @{
54251881Speter */
55251881Speter
56251881Speter/** Write a number over the net.
57251881Speter *
58251881Speter * Writes will be buffered until the next read or flush.
59251881Speter */
60251881Spetersvn_error_t *
61251881Spetersvn_ra_svn__write_number(svn_ra_svn_conn_t *conn,
62251881Speter                         apr_pool_t *pool,
63251881Speter                         apr_uint64_t number);
64251881Speter
65251881Speter/** Write a string over the net.
66251881Speter *
67251881Speter * Writes will be buffered until the next read or flush.
68251881Speter */
69251881Spetersvn_error_t *
70251881Spetersvn_ra_svn__write_string(svn_ra_svn_conn_t *conn,
71251881Speter                         apr_pool_t *pool,
72251881Speter                         const svn_string_t *str);
73251881Speter
74251881Speter/** Write a cstring over the net.
75251881Speter *
76251881Speter * Writes will be buffered until the next read or flush.
77251881Speter */
78251881Spetersvn_error_t *
79251881Spetersvn_ra_svn__write_cstring(svn_ra_svn_conn_t *conn,
80251881Speter                          apr_pool_t *pool,
81251881Speter                          const char *s);
82251881Speter
83251881Speter/** Write a word over the net.
84251881Speter *
85251881Speter * Writes will be buffered until the next read or flush.
86251881Speter */
87251881Spetersvn_error_t *
88251881Spetersvn_ra_svn__write_word(svn_ra_svn_conn_t *conn,
89251881Speter                       apr_pool_t *pool,
90251881Speter                       const char *word);
91251881Speter
92289180Speter/** Write a boolean over the net.
93289180Speter *
94289180Speter * Writes will be buffered until the next read or flush.
95289180Speter */
96289180Spetersvn_error_t *
97289180Spetersvn_ra_svn__write_boolean(svn_ra_svn_conn_t *conn,
98289180Speter                          apr_pool_t *pool,
99289180Speter                          svn_boolean_t value);
100289180Speter
101251881Speter/** Write a list of properties over the net.  @a props is allowed to be NULL,
102251881Speter * in which case an empty list will be written out.
103251881Speter *
104251881Speter * @since New in 1.5.
105251881Speter */
106251881Spetersvn_error_t *
107251881Spetersvn_ra_svn__write_proplist(svn_ra_svn_conn_t *conn,
108251881Speter                           apr_pool_t *pool,
109251881Speter                           apr_hash_t *props);
110251881Speter
111251881Speter/** Begin a list.  Writes will be buffered until the next read or flush. */
112251881Spetersvn_error_t *
113251881Spetersvn_ra_svn__start_list(svn_ra_svn_conn_t *conn,
114251881Speter                       apr_pool_t *pool);
115251881Speter
116251881Speter/** End a list.  Writes will be buffered until the next read or flush. */
117251881Spetersvn_error_t *
118251881Spetersvn_ra_svn__end_list(svn_ra_svn_conn_t *conn,
119251881Speter                     apr_pool_t *pool);
120251881Speter
121251881Speter/** Flush the write buffer.
122251881Speter *
123251881Speter * Normally this shouldn't be necessary, since the write buffer is flushed
124251881Speter * when a read is attempted.
125251881Speter */
126251881Spetersvn_error_t *
127251881Spetersvn_ra_svn__flush(svn_ra_svn_conn_t *conn,
128251881Speter                  apr_pool_t *pool);
129251881Speter
130251881Speter/** Write a tuple, using a printf-like interface.
131251881Speter *
132251881Speter * The format string @a fmt may contain:
133251881Speter *
134251881Speter *@verbatim
135251881Speter     Spec  Argument type         Item type
136251881Speter     ----  --------------------  ---------
137251881Speter     n     apr_uint64_t          Number
138251881Speter     r     svn_revnum_t          Number
139251881Speter     s     const svn_string_t *  String
140251881Speter     c     const char *          String
141251881Speter     w     const char *          Word
142251881Speter     b     svn_boolean_t         Word ("true" or "false")
143251881Speter     (                           Begin tuple
144251881Speter     )                           End tuple
145251881Speter     ?                           Remaining elements optional
146251881Speter     ! (at beginning or end)     Suppress opening or closing of tuple
147251881Speter  @endverbatim
148251881Speter *
149251881Speter * Inside the optional part of a tuple, 'r' values may be @c
150251881Speter * SVN_INVALID_REVNUM, 'n' values may be
151251881Speter * SVN_RA_SVN_UNSPECIFIED_NUMBER, and 's', 'c', and 'w' values may be
152251881Speter * @c NULL; in these cases no data will be written.  'b' and '(' may
153251881Speter * not appear in the optional part of a tuple.  Either all or none of
154251881Speter * the optional values should be valid.
155251881Speter *
156251881Speter * (If we ever have a need for an optional boolean value, we should
157251881Speter * invent a 'B' specifier which stores a boolean into an int, using -1
158251881Speter * for unspecified.  Right now there is no need for such a thing.)
159251881Speter *
160251881Speter * Use the '!' format specifier to write partial tuples when you have
161251881Speter * to transmit an array or other unusual data.  For example, to write
162251881Speter * a tuple containing a revision, an array of words, and a boolean:
163251881Speter * @code
164251881Speter     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "r(!", rev));
165251881Speter     for (i = 0; i < n; i++)
166251881Speter       SVN_ERR(svn_ra_svn_write_word(conn, pool, words[i]));
167251881Speter     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b", flag)); @endcode
168251881Speter */
169251881Spetersvn_error_t *
170251881Spetersvn_ra_svn__write_tuple(svn_ra_svn_conn_t *conn,
171251881Speter                        apr_pool_t *pool,
172251881Speter                        const char *fmt, ...);
173251881Speter
174251881Speter/** Read an item from the network into @a *item. */
175251881Spetersvn_error_t *
176251881Spetersvn_ra_svn__read_item(svn_ra_svn_conn_t *conn,
177251881Speter                      apr_pool_t *pool,
178251881Speter                      svn_ra_svn_item_t **item);
179251881Speter
180251881Speter/** Scan data on @a conn until we find something which looks like the
181251881Speter * beginning of an svn server greeting (an open paren followed by a
182251881Speter * whitespace character).  This function is appropriate for beginning
183251881Speter * a client connection opened in tunnel mode, since people's dotfiles
184251881Speter * sometimes write output to stdout.  It may only be called at the
185251881Speter * beginning of a client connection.
186251881Speter */
187251881Spetersvn_error_t *
188251881Spetersvn_ra_svn__skip_leading_garbage(svn_ra_svn_conn_t *conn,
189251881Speter                                 apr_pool_t *pool);
190251881Speter
191251881Speter/** Parse an array of @c svn_sort__item_t structures as a tuple, using a
192251881Speter * printf-like interface.  The format string @a fmt may contain:
193251881Speter *
194251881Speter *@verbatim
195251881Speter     Spec  Argument type          Item type
196251881Speter     ----  --------------------   ---------
197251881Speter     n     apr_uint64_t *         Number
198251881Speter     r     svn_revnum_t *         Number
199251881Speter     s     svn_string_t **        String
200251881Speter     c     const char **          String
201251881Speter     w     const char **          Word
202251881Speter     b     svn_boolean_t *        Word ("true" or "false")
203251881Speter     B     apr_uint64_t *         Word ("true" or "false")
204289180Speter     3     svn_tristate_t *       Word ("true" or "false")
205251881Speter     l     apr_array_header_t **  List
206251881Speter     (                            Begin tuple
207251881Speter     )                            End tuple
208251881Speter     ?                            Tuple is allowed to end here
209251881Speter  @endverbatim
210251881Speter *
211251881Speter * Note that a tuple is only allowed to end precisely at a '?', or at
212251881Speter * the end of the specification.  So if @a fmt is "c?cc" and @a list
213251881Speter * contains two elements, an error will result.
214251881Speter *
215289180Speter * '3' is similar to 'b', but may be used in the optional tuple specification.
216289180Speter * It returns #svn_tristate_true, #svn_tristate_false or #svn_tristate_unknown.
217251881Speter *
218289180Speter * 'B' is similar to '3', but it returns @c TRUE, @c FALSE, or
219289180Speter * #SVN_RA_SVN_UNSPECIFIED_NUMBER.  'B' is deprecated; new code should
220289180Speter * use '3' instead.
221289180Speter *
222251881Speter * If an optional part of a tuple contains no data, 'r' values will be
223289180Speter * set to @c SVN_INVALID_REVNUM; 'n' and 'B' values will be set to
224289180Speter * #SVN_RA_SVN_UNSPECIFIED_NUMBER; 's', 'c', 'w', and 'l' values
225289180Speter * will be set to @c NULL; and '3' values will be set to #svn_tristate_unknown
226289180Speter * 'b' may not appear inside an optional tuple specification; use '3' instead.
227251881Speter */
228251881Spetersvn_error_t *
229251881Spetersvn_ra_svn__parse_tuple(const apr_array_header_t *list,
230251881Speter                        apr_pool_t *pool,
231251881Speter                        const char *fmt, ...);
232251881Speter
233251881Speter/** Read a tuple from the network and parse it as a tuple, using the
234251881Speter * format string notation from svn_ra_svn_parse_tuple().
235251881Speter */
236251881Spetersvn_error_t *
237251881Spetersvn_ra_svn__read_tuple(svn_ra_svn_conn_t *conn,
238251881Speter                       apr_pool_t *pool,
239251881Speter                       const char *fmt, ...);
240251881Speter
241251881Speter/** Parse an array of @c svn_ra_svn_item_t structures as a list of
242251881Speter * properties, storing the properties in a hash table.
243251881Speter *
244251881Speter * @since New in 1.5.
245251881Speter */
246251881Spetersvn_error_t *
247251881Spetersvn_ra_svn__parse_proplist(const apr_array_header_t *list,
248251881Speter                           apr_pool_t *pool,
249251881Speter                           apr_hash_t **props);
250251881Speter
251251881Speter/** Read a command response from the network and parse it as a tuple, using
252251881Speter * the format string notation from svn_ra_svn_parse_tuple().
253251881Speter */
254251881Spetersvn_error_t *
255251881Spetersvn_ra_svn__read_cmd_response(svn_ra_svn_conn_t *conn,
256251881Speter                              apr_pool_t *pool,
257251881Speter                              const char *fmt, ...);
258251881Speter
259289180Speter/** Check the receive buffer and socket of @a conn whether there is some
260289180Speter * unprocessed incoming data without waiting for new data to come in.
261289180Speter * If data is found, set @a *has_command to TRUE.  If the connection does
262289180Speter * not contain any more data and has been closed, set @a *terminated to
263289180Speter * TRUE.
264289180Speter */
265289180Spetersvn_error_t *
266289180Spetersvn_ra_svn__has_command(svn_boolean_t *has_command,
267289180Speter                        svn_boolean_t *terminated,
268289180Speter                        svn_ra_svn_conn_t *conn,
269289180Speter                        apr_pool_t *pool);
270289180Speter
271289180Speter/** Accept a single command from @a conn and handle them according
272289180Speter * to @a cmd_hash.  Command handlers will be passed @a conn, @a pool,
273289180Speter * the parameters of the command, and @a baton.  @a *terminate will be
274289180Speter * set if either @a error_on_disconnect is FALSE and the connection got
275289180Speter * closed, or if the command being handled has the "terminate" flag set
276289180Speter * in the command table.
277289180Speter */
278289180Spetersvn_error_t *
279289180Spetersvn_ra_svn__handle_command(svn_boolean_t *terminate,
280289180Speter                           apr_hash_t *cmd_hash,
281289180Speter                           void *baton,
282289180Speter                           svn_ra_svn_conn_t *conn,
283289180Speter                           svn_boolean_t error_on_disconnect,
284289180Speter                           apr_pool_t *pool);
285289180Speter
286251881Speter/** Accept commands over the network and handle them according to @a
287251881Speter * commands.  Command handlers will be passed @a conn, a subpool of @a
288251881Speter * pool (cleared after each command is handled), the parameters of the
289251881Speter * command, and @a baton.  Commands will be accepted until a
290251881Speter * terminating command is received (a command with "terminate" set in
291251881Speter * the command table).  If a command handler returns an error wrapped
292251881Speter * in SVN_RA_SVN_CMD_ERR (see the @c SVN_CMD_ERR macro), the error
293251881Speter * will be reported to the other side of the connection and the
294251881Speter * command loop will continue; any other kind of error (typically a
295251881Speter * network or protocol error) is passed through to the caller.
296251881Speter *
297251881Speter * @since New in 1.6.
298251881Speter *
299251881Speter */
300251881Spetersvn_error_t *
301251881Spetersvn_ra_svn__handle_commands2(svn_ra_svn_conn_t *conn,
302251881Speter                             apr_pool_t *pool,
303251881Speter                             const svn_ra_svn_cmd_entry_t *commands,
304251881Speter                             void *baton,
305251881Speter                             svn_boolean_t error_on_disconnect);
306251881Speter
307251881Speter/** Write a successful command response over the network, using the
308251881Speter * same format string notation as svn_ra_svn_write_tuple().  Do not use
309251881Speter * partial tuples with this function; if you need to use partial
310251881Speter * tuples, just write out the "success" and argument tuple by hand.
311251881Speter */
312251881Spetersvn_error_t *
313251881Spetersvn_ra_svn__write_cmd_response(svn_ra_svn_conn_t *conn,
314251881Speter                               apr_pool_t *pool,
315251881Speter                               const char *fmt, ...);
316251881Speter
317289180Speter/** Write an unsuccessful command response over the network.
318289180Speter *
319289180Speter * @note This does not clear @a err. */
320251881Spetersvn_error_t *
321251881Spetersvn_ra_svn__write_cmd_failure(svn_ra_svn_conn_t *conn,
322251881Speter                              apr_pool_t *pool,
323289180Speter                              const svn_error_t *err);
324251881Speter
325251881Speter/**
326251881Speter * @}
327251881Speter */
328251881Speter
329251881Speter/**
330251881Speter * @defgroup svn_commands sending ra_svn commands
331251881Speter * @{
332251881Speter */
333251881Speter
334251881Speter/** Sets the target revision of connection @a conn to @a rev.  Use @a pool
335251881Speter * for allocations.
336251881Speter */
337251881Spetersvn_error_t *
338251881Spetersvn_ra_svn__write_cmd_target_rev(svn_ra_svn_conn_t *conn,
339251881Speter                                 apr_pool_t *pool,
340251881Speter                                 svn_revnum_t rev);
341251881Speter
342251881Speter/** Send a "open-root" command over connection @a conn.  Open the
343251881Speter * repository root at revision @a rev and associate it with @a token.
344251881Speter * Use @a pool for allocations.
345251881Speter */
346251881Spetersvn_error_t *
347251881Spetersvn_ra_svn__write_cmd_open_root(svn_ra_svn_conn_t *conn,
348251881Speter                                apr_pool_t *pool,
349251881Speter                                svn_revnum_t rev,
350251881Speter                                const char *token);
351251881Speter
352251881Speter/** Send a "delete-entry" command over connection @a conn.  Delete the
353251881Speter * @a path at optional revision @a rev below @a parent_token.
354251881Speter * Use @a pool for allocations.
355251881Speter */
356251881Spetersvn_error_t *
357251881Spetersvn_ra_svn__write_cmd_delete_entry(svn_ra_svn_conn_t *conn,
358251881Speter                                   apr_pool_t *pool,
359251881Speter                                   const char *path,
360251881Speter                                   svn_revnum_t rev,
361251881Speter                                   const char *parent_token);
362251881Speter
363251881Speter/** Send a "add-dir" command over connection @a conn.  Add a new directory
364251881Speter * node named @a path under the directory identified by @a parent_token.
365251881Speter * Associate the new directory with the given @a token.  * @a copy_path
366251881Speter * and @a copy_rev are optional and describe the copy source.
367251881Speter * Use @a pool for allocations.
368251881Speter */
369251881Spetersvn_error_t *
370251881Spetersvn_ra_svn__write_cmd_add_dir(svn_ra_svn_conn_t *conn,
371251881Speter                              apr_pool_t *pool,
372251881Speter                              const char *path,
373251881Speter                              const char *parent_token,
374251881Speter                              const char *token,
375251881Speter                              const char *copy_path,
376251881Speter                              svn_revnum_t copy_rev);
377251881Speter
378251881Speter/** Send a "open-dir" command over connection @a conn.  Associate to
379251881Speter * @a token the directory node named @a path under the directory
380251881Speter * identified by @a parent_token in revision @a rev.
381251881Speter * Use @a pool for allocations.
382251881Speter */
383251881Spetersvn_error_t *
384251881Spetersvn_ra_svn__write_cmd_open_dir(svn_ra_svn_conn_t *conn,
385251881Speter                               apr_pool_t *pool,
386251881Speter                               const char *path,
387251881Speter                               const char *parent_token,
388251881Speter                               const char *token,
389251881Speter                               svn_revnum_t rev);
390251881Speter
391251881Speter/** Send a "change-dir-prop" command over connection @a conn.  Set the
392251881Speter * property @a name to the optional @a value on the directory identified
393251881Speter * to @a token.  Use @a pool for allocations.
394251881Speter */
395251881Spetersvn_error_t *
396251881Spetersvn_ra_svn__write_cmd_change_dir_prop(svn_ra_svn_conn_t *conn,
397251881Speter                                      apr_pool_t *pool,
398251881Speter                                      const char *token,
399251881Speter                                      const char *name,
400251881Speter                                      const svn_string_t *value);
401251881Speter
402251881Speter/** Send a "close-dir" command over connection @a conn.  Identify the node
403251881Speter * to close with @a token.  The latter will then no longer be associated
404251881Speter * with that node.  Use @a pool for allocations.
405251881Speter */
406251881Spetersvn_error_t *
407251881Spetersvn_ra_svn__write_cmd_close_dir(svn_ra_svn_conn_t *conn,
408251881Speter                                apr_pool_t *pool,
409251881Speter                                const char *token);
410251881Speter
411251881Speter/** Send a "absent-dir" command over connection @a conn.  Directory node
412251881Speter * named @a path under the directory identified by @a parent_token is
413251881Speter * absent.  Use @a pool for allocations.
414251881Speter */
415251881Spetersvn_error_t *
416251881Spetersvn_ra_svn__write_cmd_absent_dir(svn_ra_svn_conn_t *conn,
417251881Speter                                 apr_pool_t *pool,
418251881Speter                                 const char *path,
419251881Speter                                 const char *parent_token);
420251881Speter
421251881Speter/** Send a "add-file" command over connection @a conn.  Add a new file
422251881Speter * node named @a path under the directory identified by @a parent_token.
423251881Speter * Associate the new file with the given @a token.  * @a copy_path and
424251881Speter * @a copy_rev are optional and describe the copy source.
425251881Speter * Use @a pool for allocations.
426251881Speter */
427251881Spetersvn_error_t *
428251881Spetersvn_ra_svn__write_cmd_add_file(svn_ra_svn_conn_t *conn,
429251881Speter                               apr_pool_t *pool,
430251881Speter                               const char *path,
431251881Speter                               const char *parent_token,
432251881Speter                               const char *token,
433251881Speter                               const char *copy_path,
434251881Speter                               svn_revnum_t copy_rev);
435251881Speter
436251881Speter/** Send a "open-file" command over connection @a conn.  Associate to
437251881Speter * @a token the file node named @a path under the directory identified by
438251881Speter * @a parent_token in revision @a rev.
439251881Speter * Use @a pool for allocations.
440251881Speter */
441251881Spetersvn_error_t *
442251881Spetersvn_ra_svn__write_cmd_open_file(svn_ra_svn_conn_t *conn,
443251881Speter                                apr_pool_t *pool,
444251881Speter                                const char *path,
445251881Speter                                const char *parent_token,
446251881Speter                                const char *token,
447251881Speter                                svn_revnum_t rev);
448251881Speter
449251881Speter/** Send a "change-file-prop" command over connection @a conn.  Set the
450251881Speter * property @a name to the optional @a value on the file identified to
451251881Speter * @a token.  Use @a pool for allocations.
452251881Speter */
453251881Spetersvn_error_t *
454251881Spetersvn_ra_svn__write_cmd_change_file_prop(svn_ra_svn_conn_t *conn,
455251881Speter                                       apr_pool_t *pool,
456251881Speter                                       const char *token,
457251881Speter                                       const char *name,
458251881Speter                                       const svn_string_t *value);
459251881Speter
460251881Speter/** Send a "close-dir" command over connection @a conn.  Identify the node
461251881Speter * to close with @a token and provide an optional @a check_sum.  The token
462251881Speter * will then no longer be associated with that node.
463251881Speter * Use @a pool for allocations.
464251881Speter */
465251881Spetersvn_error_t *
466251881Spetersvn_ra_svn__write_cmd_close_file(svn_ra_svn_conn_t *conn,
467251881Speter                                 apr_pool_t *pool,
468251881Speter                                 const char *token,
469251881Speter                                 const char *text_checksum);
470251881Speter
471251881Speter/** Send a "absent-file" command over connection @a conn.  File node
472251881Speter * named @a path in the directory identified by @a parent_token is
473251881Speter * absent.  Use @a pool for allocations.
474251881Speter */
475251881Spetersvn_error_t *
476251881Spetersvn_ra_svn__write_cmd_absent_file(svn_ra_svn_conn_t *conn,
477251881Speter                                  apr_pool_t *pool,
478251881Speter                                  const char *path,
479251881Speter                                  const char *parent_token);
480251881Speter
481251881Speter/** Send a "apply-textdelta" command over connection @a conn.  Starts a
482251881Speter * series of text deltas to be applied to the file identified by @a token.
483251881Speter * Optionally, specify the file's current checksum in @a base_checksum.
484251881Speter * Use @a pool for allocations.
485251881Speter */
486251881Spetersvn_error_t *
487251881Spetersvn_ra_svn__write_cmd_apply_textdelta(svn_ra_svn_conn_t *conn,
488251881Speter                                      apr_pool_t *pool,
489251881Speter                                      const char *token,
490251881Speter                                      const char *base_checksum);
491251881Speter
492251881Speter/** Send a "textdelta-chunk" command over connection @a conn.  Apply
493251881Speter * textdelta @a chunk to the file identified by @a token.
494251881Speter * Use @a pool for allocations.
495251881Speter */
496251881Spetersvn_error_t *
497251881Spetersvn_ra_svn__write_cmd_textdelta_chunk(svn_ra_svn_conn_t *conn,
498251881Speter                                      apr_pool_t *pool,
499251881Speter                                      const char *token,
500251881Speter                                      const svn_string_t *chunk);
501251881Speter
502251881Speter/** Send a "textdelta-end" command over connection @a conn.  Ends the
503251881Speter * series of text deltas to be applied to the file identified by @a token.
504251881Speter * Use @a pool for allocations.
505251881Speter */
506251881Spetersvn_error_t *
507251881Spetersvn_ra_svn__write_cmd_textdelta_end(svn_ra_svn_conn_t *conn,
508251881Speter                                    apr_pool_t *pool,
509251881Speter                                    const char *token);
510251881Speter
511251881Speter/** Send a "close-edit" command over connection @a conn.  Ends the editor
512251881Speter * drive (successfully).  Use @a pool for allocations.
513251881Speter */
514251881Spetersvn_error_t *
515251881Spetersvn_ra_svn__write_cmd_close_edit(svn_ra_svn_conn_t *conn,
516251881Speter                                 apr_pool_t *pool);
517251881Speter
518251881Speter/** Send a "abort-edit" command over connection @a conn.  Prematurely ends
519251881Speter * the editor drive, e.g. due to some problem on the other side.
520251881Speter * Use @a pool for allocations.
521251881Speter */
522251881Spetersvn_error_t *
523251881Spetersvn_ra_svn__write_cmd_abort_edit(svn_ra_svn_conn_t *conn,
524251881Speter                                 apr_pool_t *pool);
525251881Speter
526251881Speter/** Send a "set-path" command over connection @a conn.
527251881Speter * Use @a pool for allocations.
528251881Speter *
529251881Speter * @see set_path() in #svn_ra_reporter3_t for a description.
530251881Speter */
531251881Spetersvn_error_t *
532251881Spetersvn_ra_svn__write_cmd_set_path(svn_ra_svn_conn_t *conn,
533251881Speter                               apr_pool_t *pool,
534251881Speter                               const char *path,
535251881Speter                               svn_revnum_t rev,
536251881Speter                               svn_boolean_t start_empty,
537251881Speter                               const char *lock_token,
538251881Speter                               svn_depth_t depth);
539251881Speter
540251881Speter/** Send a "delete-path" command over connection @a conn.
541251881Speter * Use @a pool for allocations.
542251881Speter *
543251881Speter * @see delete_path() in #svn_ra_reporter3_t for a description.
544251881Speter */
545251881Spetersvn_error_t *
546251881Spetersvn_ra_svn__write_cmd_delete_path(svn_ra_svn_conn_t *conn,
547251881Speter                                  apr_pool_t *pool,
548251881Speter                                  const char *path);
549251881Speter
550251881Speter/** Send a "link-path" command over connection @a conn.
551251881Speter * Use @a pool for allocations.
552251881Speter *
553251881Speter * @see link_path() in #svn_ra_reporter3_t for a description.
554251881Speter */
555251881Spetersvn_error_t *
556251881Spetersvn_ra_svn__write_cmd_link_path(svn_ra_svn_conn_t *conn,
557251881Speter                                apr_pool_t *pool,
558251881Speter                                const char *path,
559251881Speter                                const char *url,
560251881Speter                                svn_revnum_t rev,
561251881Speter                                svn_boolean_t start_empty,
562251881Speter                                const char *lock_token,
563251881Speter                                svn_depth_t depth);
564251881Speter
565251881Speter/** Send a "finish-report" command over connection @a conn.
566251881Speter * Use @a pool for allocations.
567251881Speter *
568251881Speter * @see finish_report() in #svn_ra_reporter3_t for a description.
569251881Speter */
570251881Spetersvn_error_t *
571251881Spetersvn_ra_svn__write_cmd_finish_report(svn_ra_svn_conn_t *conn,
572251881Speter                                    apr_pool_t *pool);
573251881Speter
574251881Speter/** Send a "abort-report" command over connection @a conn.
575251881Speter * Use @a pool for allocations.
576251881Speter *
577251881Speter * @see abort_report() in #svn_ra_reporter3_t for a description.
578251881Speter */
579251881Spetersvn_error_t *
580251881Spetersvn_ra_svn__write_cmd_abort_report(svn_ra_svn_conn_t *conn,
581251881Speter                                   apr_pool_t *pool);
582251881Speter
583251881Speter/** Send a "reparent" command over connection @a conn.
584251881Speter * Use @a pool for allocations.
585251881Speter *
586251881Speter * @see #svn_ra_reparent for a description.
587251881Speter */
588251881Spetersvn_error_t *
589251881Spetersvn_ra_svn__write_cmd_reparent(svn_ra_svn_conn_t *conn,
590251881Speter                               apr_pool_t *pool,
591251881Speter                               const char *url);
592251881Speter
593251881Speter/** Send a "get-latest-rev" command over connection @a conn.
594251881Speter * Use @a pool for allocations.
595251881Speter *
596251881Speter * @see #svn_ra_get_latest_revnum for a description.
597251881Speter */
598251881Spetersvn_error_t *
599251881Spetersvn_ra_svn__write_cmd_get_latest_rev(svn_ra_svn_conn_t *conn,
600251881Speter                                     apr_pool_t *pool);
601251881Speter
602251881Speter/** Send a "get-dated-rev" command over connection @a conn.
603251881Speter * Use @a pool for allocations.
604251881Speter *
605251881Speter * @see #svn_ra_get_dated_revision for a description.
606251881Speter */
607251881Spetersvn_error_t *
608251881Spetersvn_ra_svn__write_cmd_get_dated_rev(svn_ra_svn_conn_t *conn,
609251881Speter                                    apr_pool_t *pool,
610251881Speter                                    apr_time_t tm);
611251881Speter
612251881Speter/** Send a "change-rev-prop2" command over connection @a conn.
613251881Speter * Use @a pool for allocations.
614251881Speter *
615289180Speter * If @a dont_care is false then check that the old value matches
616289180Speter * @a old_value. If @a dont_care is true then do not check the old
617289180Speter * value; in this case @a old_value must be NULL.
618289180Speter *
619289180Speter * @see #svn_ra_change_rev_prop2 for the rest of the description.
620251881Speter */
621251881Spetersvn_error_t *
622251881Spetersvn_ra_svn__write_cmd_change_rev_prop2(svn_ra_svn_conn_t *conn,
623251881Speter                                       apr_pool_t *pool,
624251881Speter                                       svn_revnum_t rev,
625251881Speter                                       const char *name,
626251881Speter                                       const svn_string_t *value,
627251881Speter                                       svn_boolean_t dont_care,
628251881Speter                                       const svn_string_t *old_value);
629251881Speter
630251881Speter/** Send a "change-rev-prop" command over connection @a conn.
631251881Speter * Use @a pool for allocations.
632251881Speter *
633251881Speter * @see #svn_ra_change_rev_prop for a description.
634251881Speter */
635251881Spetersvn_error_t *
636251881Spetersvn_ra_svn__write_cmd_change_rev_prop(svn_ra_svn_conn_t *conn,
637251881Speter                                      apr_pool_t *pool,
638251881Speter                                      svn_revnum_t rev,
639251881Speter                                      const char *name,
640251881Speter                                      const svn_string_t *value);
641251881Speter
642251881Speter/** Send a "rev-proplist" command over connection @a conn.
643251881Speter * Use @a pool for allocations.
644251881Speter *
645251881Speter * @see #svn_ra_rev_proplist for a description.
646251881Speter */
647251881Spetersvn_error_t *
648251881Spetersvn_ra_svn__write_cmd_rev_proplist(svn_ra_svn_conn_t *conn,
649251881Speter                                   apr_pool_t *pool,
650251881Speter                                   svn_revnum_t rev);
651251881Speter
652251881Speter/** Send a "rev-prop" command over connection @a conn.
653251881Speter * Use @a pool for allocations.
654251881Speter *
655251881Speter * @see #svn_ra_rev_prop for a description.
656251881Speter */
657251881Spetersvn_error_t *
658251881Spetersvn_ra_svn__write_cmd_rev_prop(svn_ra_svn_conn_t *conn,
659251881Speter                               apr_pool_t *pool,
660251881Speter                               svn_revnum_t rev,
661251881Speter                               const char *name);
662251881Speter
663251881Speter/** Send a "get-file" command over connection @a conn.
664251881Speter * Use @a pool for allocations.
665251881Speter *
666251881Speter * @see #svn_ra_get_file for a description.
667251881Speter */
668251881Spetersvn_error_t *
669251881Spetersvn_ra_svn__write_cmd_get_file(svn_ra_svn_conn_t *conn,
670251881Speter                               apr_pool_t *pool,
671251881Speter                               const char *path,
672251881Speter                               svn_revnum_t rev,
673251881Speter                               svn_boolean_t props,
674251881Speter                               svn_boolean_t stream);
675251881Speter
676251881Speter/** Send a "update" command over connection @a conn.
677251881Speter * Use @a pool for allocations.
678251881Speter *
679251881Speter * @see #svn_ra_do_update3 for a description.
680251881Speter */
681251881Spetersvn_error_t *
682251881Spetersvn_ra_svn__write_cmd_update(svn_ra_svn_conn_t *conn,
683251881Speter                             apr_pool_t *pool,
684251881Speter                             svn_revnum_t rev,
685251881Speter                             const char *target,
686251881Speter                             svn_boolean_t recurse,
687251881Speter                             svn_depth_t depth,
688251881Speter                             svn_boolean_t send_copyfrom_args,
689251881Speter                             svn_boolean_t ignore_ancestry);
690251881Speter
691251881Speter/** Send a "switch" command over connection @a conn.
692251881Speter * Use @a pool for allocations.
693251881Speter *
694251881Speter * @see #svn_ra_do_switch3 for a description.
695251881Speter */
696251881Spetersvn_error_t *
697251881Spetersvn_ra_svn__write_cmd_switch(svn_ra_svn_conn_t *conn,
698251881Speter                             apr_pool_t *pool,
699251881Speter                             svn_revnum_t rev,
700251881Speter                             const char *target,
701251881Speter                             svn_boolean_t recurse,
702251881Speter                             const char *switch_url,
703251881Speter                             svn_depth_t depth,
704251881Speter                             svn_boolean_t send_copyfrom_args,
705251881Speter                             svn_boolean_t ignore_ancestry);
706251881Speter
707251881Speter/** Send a "status" command over connection @a conn.
708251881Speter * Use @a pool for allocations.
709251881Speter *
710251881Speter * @see #svn_ra_do_status2 for a description.
711251881Speter */
712251881Spetersvn_error_t *
713251881Spetersvn_ra_svn__write_cmd_status(svn_ra_svn_conn_t *conn,
714251881Speter                             apr_pool_t *pool,
715251881Speter                             const char *target,
716251881Speter                             svn_boolean_t recurse,
717251881Speter                             svn_revnum_t rev,
718251881Speter                             svn_depth_t depth);
719251881Speter
720251881Speter/** Send a "diff" command over connection @a conn.
721251881Speter * Use @a pool for allocations.
722251881Speter *
723251881Speter * @see #svn_ra_do_diff3 for a description.
724251881Speter */
725251881Spetersvn_error_t *
726251881Spetersvn_ra_svn__write_cmd_diff(svn_ra_svn_conn_t *conn,
727251881Speter                           apr_pool_t *pool,
728251881Speter                           svn_revnum_t rev,
729251881Speter                           const char *target,
730251881Speter                           svn_boolean_t recurse,
731251881Speter                           svn_boolean_t ignore_ancestry,
732251881Speter                           const char *versus_url,
733251881Speter                           svn_boolean_t text_deltas,
734251881Speter                           svn_depth_t depth);
735251881Speter
736251881Speter/** Send a "check-path" command over connection @a conn.
737251881Speter * Use @a pool for allocations.
738251881Speter *
739251881Speter * @see #svn_ra_check_path for a description.
740251881Speter */
741251881Spetersvn_error_t *
742251881Spetersvn_ra_svn__write_cmd_check_path(svn_ra_svn_conn_t *conn,
743251881Speter                                 apr_pool_t *pool,
744251881Speter                                 const char *path,
745251881Speter                                 svn_revnum_t rev);
746251881Speter
747251881Speter/** Send a "stat" command over connection @a conn.
748251881Speter * Use @a pool for allocations.
749251881Speter *
750251881Speter * @see #svn_ra_stat for a description.
751251881Speter */
752251881Spetersvn_error_t *
753251881Spetersvn_ra_svn__write_cmd_stat(svn_ra_svn_conn_t *conn,
754251881Speter                           apr_pool_t *pool,
755251881Speter                           const char *path,
756251881Speter                           svn_revnum_t rev);
757251881Speter
758251881Speter/** Send a "get-file-revs" command over connection @a conn.
759251881Speter * Use @a pool for allocations.
760251881Speter *
761251881Speter * @see #svn_ra_get_file_revs2 for a description.
762251881Speter */
763251881Spetersvn_error_t *
764251881Spetersvn_ra_svn__write_cmd_get_file_revs(svn_ra_svn_conn_t *conn,
765251881Speter                                    apr_pool_t *pool,
766251881Speter                                    const char *path,
767251881Speter                                    svn_revnum_t start,
768251881Speter                                    svn_revnum_t end,
769251881Speter                                    svn_boolean_t include_merged_revisions);
770251881Speter
771251881Speter/** Send a "lock" command over connection @a conn.
772251881Speter * Use @a pool for allocations.
773251881Speter *
774251881Speter * @see #svn_ra_lock for a description.
775251881Speter */
776251881Spetersvn_error_t *
777251881Spetersvn_ra_svn__write_cmd_lock(svn_ra_svn_conn_t *conn,
778251881Speter                           apr_pool_t *pool,
779251881Speter                           const char *path,
780251881Speter                           const char *comment,
781251881Speter                           svn_boolean_t steal_lock,
782251881Speter                           svn_revnum_t revnum);
783251881Speter
784251881Speter/** Send a "unlock" command over connection @a conn.
785251881Speter * Use @a pool for allocations.
786251881Speter *
787251881Speter * @see #svn_ra_unlock for a description.
788251881Speter */
789251881Spetersvn_error_t *
790251881Spetersvn_ra_svn__write_cmd_unlock(svn_ra_svn_conn_t *conn,
791251881Speter                             apr_pool_t *pool,
792251881Speter                             const char *path,
793251881Speter                             const char *token,
794251881Speter                             svn_boolean_t break_lock);
795251881Speter
796251881Speter/** Send a "get-lock" command over connection @a conn.
797251881Speter * Use @a pool for allocations.
798251881Speter *
799251881Speter * @see #svn_ra_get_lock for a description.
800251881Speter */
801251881Spetersvn_error_t *
802251881Spetersvn_ra_svn__write_cmd_get_lock(svn_ra_svn_conn_t *conn,
803251881Speter                               apr_pool_t *pool,
804251881Speter                               const char *path);
805251881Speter
806251881Speter/** Send a "get-locks" command over connection @a conn.
807251881Speter * Use @a pool for allocations.
808251881Speter *
809251881Speter * @see #svn_ra_get_locks2 for a description.
810251881Speter */
811251881Spetersvn_error_t *
812251881Spetersvn_ra_svn__write_cmd_get_locks(svn_ra_svn_conn_t *conn,
813251881Speter                                apr_pool_t *pool,
814251881Speter                                const char *path,
815251881Speter                                svn_depth_t depth);
816251881Speter
817251881Speter/** Send a "replay" command over connection @a conn.
818251881Speter * Use @a pool for allocations.
819251881Speter *
820251881Speter * @see #svn_ra_replay for a description.
821251881Speter */
822251881Spetersvn_error_t *
823251881Spetersvn_ra_svn__write_cmd_replay(svn_ra_svn_conn_t *conn,
824251881Speter                             apr_pool_t *pool,
825251881Speter                             svn_revnum_t rev,
826251881Speter                             svn_revnum_t low_water_mark,
827251881Speter                             svn_boolean_t send_deltas);
828251881Speter
829251881Speter/** Send a "replay-range" command over connection @a conn.
830251881Speter * Use @a pool for allocations.
831251881Speter *
832251881Speter * @see #svn_ra_replay_range for a description.
833251881Speter */
834251881Spetersvn_error_t *
835251881Spetersvn_ra_svn__write_cmd_replay_range(svn_ra_svn_conn_t *conn,
836251881Speter                                   apr_pool_t *pool,
837251881Speter                                   svn_revnum_t start_revision,
838251881Speter                                   svn_revnum_t end_revision,
839251881Speter                                   svn_revnum_t low_water_mark,
840251881Speter                                   svn_boolean_t send_deltas);
841251881Speter
842251881Speter/** Send a "get-deleted-rev" command over connection @a conn.
843251881Speter * Use @a pool for allocations.
844251881Speter *
845251881Speter * @see #svn_ra_get_deleted_rev for a description.
846251881Speter */
847251881Spetersvn_error_t *
848251881Spetersvn_ra_svn__write_cmd_get_deleted_rev(svn_ra_svn_conn_t *conn,
849251881Speter                                      apr_pool_t *pool,
850251881Speter                                      const char *path,
851251881Speter                                      svn_revnum_t peg_revision,
852251881Speter                                      svn_revnum_t end_revision);
853251881Speter
854251881Speter/** Send a "get-iprops" command over connection @a conn.
855251881Speter * Use @a pool for allocations.
856251881Speter *
857251881Speter * @see #svn_ra_get_inherited_props for a description.
858251881Speter */
859251881Spetersvn_error_t *
860251881Spetersvn_ra_svn__write_cmd_get_iprops(svn_ra_svn_conn_t *conn,
861251881Speter                                 apr_pool_t *pool,
862251881Speter                                 const char *path,
863251881Speter                                 svn_revnum_t revision);
864251881Speter
865251881Speter/** Send a "finish-replay" command over connection @a conn.
866251881Speter * Use @a pool for allocations.
867251881Speter */
868251881Spetersvn_error_t *
869251881Spetersvn_ra_svn__write_cmd_finish_replay(svn_ra_svn_conn_t *conn,
870251881Speter                                    apr_pool_t *pool);
871251881Speter
872251881Speter/**
873251881Speter * @}
874251881Speter */
875289180Speter
876289180Speter/**
877289180Speter * @defgroup svn_send_data sending data structures over ra_svn
878289180Speter * @{
879289180Speter */
880289180Speter
881289180Speter/** Send a changed path (as part of transmitting a log entry) over connection
882289180Speter * @a conn.  Use @a pool for allocations.
883289180Speter *
884289180Speter * @see svn_log_changed_path2_t for a description of the other parameters.
885289180Speter */
886289180Spetersvn_error_t *
887289180Spetersvn_ra_svn__write_data_log_changed_path(svn_ra_svn_conn_t *conn,
888289180Speter                                        apr_pool_t *pool,
889289180Speter                                        const char *path,
890289180Speter                                        char action,
891289180Speter                                        const char *copyfrom_path,
892289180Speter                                        svn_revnum_t copyfrom_rev,
893289180Speter                                        svn_node_kind_t node_kind,
894289180Speter                                        svn_boolean_t text_modified,
895289180Speter                                        svn_boolean_t props_modified);
896289180Speter
897289180Speter/** Send a the details of a log entry (as part of transmitting a log entry
898289180Speter * and without revprops and changed paths) over connection @a conn.
899289180Speter * Use @a pool for allocations.
900289180Speter *
901289180Speter * @a author, @a date and @a message have been extracted and removed from
902289180Speter * the revprops to follow.  @a has_children is taken directly from the
903289180Speter * #svn_log_entry_t struct.  @a revision is too, except when it equals
904289180Speter * #SVN_INVALID_REVNUM.  In that case, @a revision must be 0 and
905289180Speter * @a invalid_revnum be set to TRUE.  @a revprop_count is the number of
906289180Speter * revprops that will follow in the revprops list.
907289180Speter */
908289180Spetersvn_error_t *
909289180Spetersvn_ra_svn__write_data_log_entry(svn_ra_svn_conn_t *conn,
910289180Speter                                 apr_pool_t *pool,
911289180Speter                                 svn_revnum_t revision,
912289180Speter                                 const svn_string_t *author,
913289180Speter                                 const svn_string_t *date,
914289180Speter                                 const svn_string_t *message,
915289180Speter                                 svn_boolean_t has_children,
916289180Speter                                 svn_boolean_t invalid_revnum,
917289180Speter                                 unsigned revprop_count);
918289180Speter
919289180Speter/**
920289180Speter * @}
921289180Speter */
922289180Speter
923289180Speter/**
924289180Speter * @defgroup svn_read_data reading data structures from ra_svn
925289180Speter * @{
926289180Speter */
927289180Speter
928289180Speter/** Take the data tuple ITEMS received over ra_svn and convert it to the
929289180Speter * a changed path (as part of receiving a log entry).
930289180Speter *
931289180Speter * @see svn_log_changed_path2_t for a description of the output parameters.
932289180Speter */
933289180Spetersvn_error_t *
934289180Spetersvn_ra_svn__read_data_log_changed_entry(const apr_array_header_t *items,
935289180Speter                                        svn_string_t **cpath,
936289180Speter                                        const char **action,
937289180Speter                                        const char **copy_path,
938289180Speter                                        svn_revnum_t *copy_rev,
939289180Speter                                        const char **kind_str,
940289180Speter                                        apr_uint64_t *text_mods,
941289180Speter                                        apr_uint64_t *prop_mods);
942289180Speter/**
943289180Speter * @}
944289180Speter */
945289180Speter
946251881Speter#ifdef __cplusplus
947251881Speter}
948251881Speter#endif /* __cplusplus */
949251881Speter
950251881Speter#endif /* SVN_RA_SVN_PRIVATE_H */
951