svn_ra_svn_private.h revision 251881
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/**
46251881Speter * @defgroup ra_svn_deprecated ra_svn low-level functions
47251881Speter * @{
48251881Speter */
49251881Speter
50251881Speter/** Write a number over the net.
51251881Speter *
52251881Speter * Writes will be buffered until the next read or flush.
53251881Speter */
54251881Spetersvn_error_t *
55251881Spetersvn_ra_svn__write_number(svn_ra_svn_conn_t *conn,
56251881Speter                         apr_pool_t *pool,
57251881Speter                         apr_uint64_t number);
58251881Speter
59251881Speter/** Write a string over the net.
60251881Speter *
61251881Speter * Writes will be buffered until the next read or flush.
62251881Speter */
63251881Spetersvn_error_t *
64251881Spetersvn_ra_svn__write_string(svn_ra_svn_conn_t *conn,
65251881Speter                         apr_pool_t *pool,
66251881Speter                         const svn_string_t *str);
67251881Speter
68251881Speter/** Write a cstring over the net.
69251881Speter *
70251881Speter * Writes will be buffered until the next read or flush.
71251881Speter */
72251881Spetersvn_error_t *
73251881Spetersvn_ra_svn__write_cstring(svn_ra_svn_conn_t *conn,
74251881Speter                          apr_pool_t *pool,
75251881Speter                          const char *s);
76251881Speter
77251881Speter/** Write a word over the net.
78251881Speter *
79251881Speter * Writes will be buffered until the next read or flush.
80251881Speter */
81251881Spetersvn_error_t *
82251881Spetersvn_ra_svn__write_word(svn_ra_svn_conn_t *conn,
83251881Speter                       apr_pool_t *pool,
84251881Speter                       const char *word);
85251881Speter
86251881Speter/** Write a list of properties over the net.  @a props is allowed to be NULL,
87251881Speter * in which case an empty list will be written out.
88251881Speter *
89251881Speter * @since New in 1.5.
90251881Speter */
91251881Spetersvn_error_t *
92251881Spetersvn_ra_svn__write_proplist(svn_ra_svn_conn_t *conn,
93251881Speter                           apr_pool_t *pool,
94251881Speter                           apr_hash_t *props);
95251881Speter
96251881Speter/** Begin a list.  Writes will be buffered until the next read or flush. */
97251881Spetersvn_error_t *
98251881Spetersvn_ra_svn__start_list(svn_ra_svn_conn_t *conn,
99251881Speter                       apr_pool_t *pool);
100251881Speter
101251881Speter/** End a list.  Writes will be buffered until the next read or flush. */
102251881Spetersvn_error_t *
103251881Spetersvn_ra_svn__end_list(svn_ra_svn_conn_t *conn,
104251881Speter                     apr_pool_t *pool);
105251881Speter
106251881Speter/** Flush the write buffer.
107251881Speter *
108251881Speter * Normally this shouldn't be necessary, since the write buffer is flushed
109251881Speter * when a read is attempted.
110251881Speter */
111251881Spetersvn_error_t *
112251881Spetersvn_ra_svn__flush(svn_ra_svn_conn_t *conn,
113251881Speter                  apr_pool_t *pool);
114251881Speter
115251881Speter/** Write a tuple, using a printf-like interface.
116251881Speter *
117251881Speter * The format string @a fmt may contain:
118251881Speter *
119251881Speter *@verbatim
120251881Speter     Spec  Argument type         Item type
121251881Speter     ----  --------------------  ---------
122251881Speter     n     apr_uint64_t          Number
123251881Speter     r     svn_revnum_t          Number
124251881Speter     s     const svn_string_t *  String
125251881Speter     c     const char *          String
126251881Speter     w     const char *          Word
127251881Speter     b     svn_boolean_t         Word ("true" or "false")
128251881Speter     (                           Begin tuple
129251881Speter     )                           End tuple
130251881Speter     ?                           Remaining elements optional
131251881Speter     ! (at beginning or end)     Suppress opening or closing of tuple
132251881Speter  @endverbatim
133251881Speter *
134251881Speter * Inside the optional part of a tuple, 'r' values may be @c
135251881Speter * SVN_INVALID_REVNUM, 'n' values may be
136251881Speter * SVN_RA_SVN_UNSPECIFIED_NUMBER, and 's', 'c', and 'w' values may be
137251881Speter * @c NULL; in these cases no data will be written.  'b' and '(' may
138251881Speter * not appear in the optional part of a tuple.  Either all or none of
139251881Speter * the optional values should be valid.
140251881Speter *
141251881Speter * (If we ever have a need for an optional boolean value, we should
142251881Speter * invent a 'B' specifier which stores a boolean into an int, using -1
143251881Speter * for unspecified.  Right now there is no need for such a thing.)
144251881Speter *
145251881Speter * Use the '!' format specifier to write partial tuples when you have
146251881Speter * to transmit an array or other unusual data.  For example, to write
147251881Speter * a tuple containing a revision, an array of words, and a boolean:
148251881Speter * @code
149251881Speter     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "r(!", rev));
150251881Speter     for (i = 0; i < n; i++)
151251881Speter       SVN_ERR(svn_ra_svn_write_word(conn, pool, words[i]));
152251881Speter     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b", flag)); @endcode
153251881Speter */
154251881Spetersvn_error_t *
155251881Spetersvn_ra_svn__write_tuple(svn_ra_svn_conn_t *conn,
156251881Speter                        apr_pool_t *pool,
157251881Speter                        const char *fmt, ...);
158251881Speter
159251881Speter/** Read an item from the network into @a *item. */
160251881Spetersvn_error_t *
161251881Spetersvn_ra_svn__read_item(svn_ra_svn_conn_t *conn,
162251881Speter                      apr_pool_t *pool,
163251881Speter                      svn_ra_svn_item_t **item);
164251881Speter
165251881Speter/** Scan data on @a conn until we find something which looks like the
166251881Speter * beginning of an svn server greeting (an open paren followed by a
167251881Speter * whitespace character).  This function is appropriate for beginning
168251881Speter * a client connection opened in tunnel mode, since people's dotfiles
169251881Speter * sometimes write output to stdout.  It may only be called at the
170251881Speter * beginning of a client connection.
171251881Speter */
172251881Spetersvn_error_t *
173251881Spetersvn_ra_svn__skip_leading_garbage(svn_ra_svn_conn_t *conn,
174251881Speter                                 apr_pool_t *pool);
175251881Speter
176251881Speter/** Parse an array of @c svn_sort__item_t structures as a tuple, using a
177251881Speter * printf-like interface.  The format string @a fmt may contain:
178251881Speter *
179251881Speter *@verbatim
180251881Speter     Spec  Argument type          Item type
181251881Speter     ----  --------------------   ---------
182251881Speter     n     apr_uint64_t *         Number
183251881Speter     r     svn_revnum_t *         Number
184251881Speter     s     svn_string_t **        String
185251881Speter     c     const char **          String
186251881Speter     w     const char **          Word
187251881Speter     b     svn_boolean_t *        Word ("true" or "false")
188251881Speter     B     apr_uint64_t *         Word ("true" or "false")
189251881Speter     l     apr_array_header_t **  List
190251881Speter     (                            Begin tuple
191251881Speter     )                            End tuple
192251881Speter     ?                            Tuple is allowed to end here
193251881Speter  @endverbatim
194251881Speter *
195251881Speter * Note that a tuple is only allowed to end precisely at a '?', or at
196251881Speter * the end of the specification.  So if @a fmt is "c?cc" and @a list
197251881Speter * contains two elements, an error will result.
198251881Speter *
199251881Speter * 'B' is similar to 'b', but may be used in the optional tuple specification.
200251881Speter * It returns TRUE, FALSE, or SVN_RA_SVN_UNSPECIFIED_NUMBER.
201251881Speter *
202251881Speter * If an optional part of a tuple contains no data, 'r' values will be
203251881Speter * set to @c SVN_INVALID_REVNUM, 'n' and 'B' values will be set to
204251881Speter * SVN_RA_SVN_UNSPECIFIED_NUMBER, and 's', 'c', 'w', and 'l' values
205251881Speter * will be set to @c NULL.  'b' may not appear inside an optional
206251881Speter * tuple specification; use 'B' instead.
207251881Speter */
208251881Spetersvn_error_t *
209251881Spetersvn_ra_svn__parse_tuple(const apr_array_header_t *list,
210251881Speter                        apr_pool_t *pool,
211251881Speter                        const char *fmt, ...);
212251881Speter
213251881Speter/** Read a tuple from the network and parse it as a tuple, using the
214251881Speter * format string notation from svn_ra_svn_parse_tuple().
215251881Speter */
216251881Spetersvn_error_t *
217251881Spetersvn_ra_svn__read_tuple(svn_ra_svn_conn_t *conn,
218251881Speter                       apr_pool_t *pool,
219251881Speter                       const char *fmt, ...);
220251881Speter
221251881Speter/** Parse an array of @c svn_ra_svn_item_t structures as a list of
222251881Speter * properties, storing the properties in a hash table.
223251881Speter *
224251881Speter * @since New in 1.5.
225251881Speter */
226251881Spetersvn_error_t *
227251881Spetersvn_ra_svn__parse_proplist(const apr_array_header_t *list,
228251881Speter                           apr_pool_t *pool,
229251881Speter                           apr_hash_t **props);
230251881Speter
231251881Speter/** Read a command response from the network and parse it as a tuple, using
232251881Speter * the format string notation from svn_ra_svn_parse_tuple().
233251881Speter */
234251881Spetersvn_error_t *
235251881Spetersvn_ra_svn__read_cmd_response(svn_ra_svn_conn_t *conn,
236251881Speter                              apr_pool_t *pool,
237251881Speter                              const char *fmt, ...);
238251881Speter
239251881Speter/** Accept commands over the network and handle them according to @a
240251881Speter * commands.  Command handlers will be passed @a conn, a subpool of @a
241251881Speter * pool (cleared after each command is handled), the parameters of the
242251881Speter * command, and @a baton.  Commands will be accepted until a
243251881Speter * terminating command is received (a command with "terminate" set in
244251881Speter * the command table).  If a command handler returns an error wrapped
245251881Speter * in SVN_RA_SVN_CMD_ERR (see the @c SVN_CMD_ERR macro), the error
246251881Speter * will be reported to the other side of the connection and the
247251881Speter * command loop will continue; any other kind of error (typically a
248251881Speter * network or protocol error) is passed through to the caller.
249251881Speter *
250251881Speter * @since New in 1.6.
251251881Speter *
252251881Speter */
253251881Spetersvn_error_t *
254251881Spetersvn_ra_svn__handle_commands2(svn_ra_svn_conn_t *conn,
255251881Speter                             apr_pool_t *pool,
256251881Speter                             const svn_ra_svn_cmd_entry_t *commands,
257251881Speter                             void *baton,
258251881Speter                             svn_boolean_t error_on_disconnect);
259251881Speter
260251881Speter/** Write a successful command response over the network, using the
261251881Speter * same format string notation as svn_ra_svn_write_tuple().  Do not use
262251881Speter * partial tuples with this function; if you need to use partial
263251881Speter * tuples, just write out the "success" and argument tuple by hand.
264251881Speter */
265251881Spetersvn_error_t *
266251881Spetersvn_ra_svn__write_cmd_response(svn_ra_svn_conn_t *conn,
267251881Speter                               apr_pool_t *pool,
268251881Speter                               const char *fmt, ...);
269251881Speter
270251881Speter/** Write an unsuccessful command response over the network. */
271251881Spetersvn_error_t *
272251881Spetersvn_ra_svn__write_cmd_failure(svn_ra_svn_conn_t *conn,
273251881Speter                              apr_pool_t *pool,
274251881Speter                              svn_error_t *err);
275251881Speter
276251881Speter/**
277251881Speter * @}
278251881Speter */
279251881Speter
280251881Speter/**
281251881Speter * @defgroup svn_commands sending ra_svn commands
282251881Speter * @{
283251881Speter */
284251881Speter
285251881Speter/** Sets the target revision of connection @a conn to @a rev.  Use @a pool
286251881Speter * for allocations.
287251881Speter */
288251881Spetersvn_error_t *
289251881Spetersvn_ra_svn__write_cmd_target_rev(svn_ra_svn_conn_t *conn,
290251881Speter                                 apr_pool_t *pool,
291251881Speter                                 svn_revnum_t rev);
292251881Speter
293251881Speter/** Send a "open-root" command over connection @a conn.  Open the
294251881Speter * repository root at revision @a rev and associate it with @a token.
295251881Speter * Use @a pool for allocations.
296251881Speter */
297251881Spetersvn_error_t *
298251881Spetersvn_ra_svn__write_cmd_open_root(svn_ra_svn_conn_t *conn,
299251881Speter                                apr_pool_t *pool,
300251881Speter                                svn_revnum_t rev,
301251881Speter                                const char *token);
302251881Speter
303251881Speter/** Send a "delete-entry" command over connection @a conn.  Delete the
304251881Speter * @a path at optional revision @a rev below @a parent_token.
305251881Speter * Use @a pool for allocations.
306251881Speter */
307251881Spetersvn_error_t *
308251881Spetersvn_ra_svn__write_cmd_delete_entry(svn_ra_svn_conn_t *conn,
309251881Speter                                   apr_pool_t *pool,
310251881Speter                                   const char *path,
311251881Speter                                   svn_revnum_t rev,
312251881Speter                                   const char *parent_token);
313251881Speter
314251881Speter/** Send a "add-dir" command over connection @a conn.  Add a new directory
315251881Speter * node named @a path under the directory identified by @a parent_token.
316251881Speter * Associate the new directory with the given @a token.  * @a copy_path
317251881Speter * and @a copy_rev are optional and describe the copy source.
318251881Speter * Use @a pool for allocations.
319251881Speter */
320251881Spetersvn_error_t *
321251881Spetersvn_ra_svn__write_cmd_add_dir(svn_ra_svn_conn_t *conn,
322251881Speter                              apr_pool_t *pool,
323251881Speter                              const char *path,
324251881Speter                              const char *parent_token,
325251881Speter                              const char *token,
326251881Speter                              const char *copy_path,
327251881Speter                              svn_revnum_t copy_rev);
328251881Speter
329251881Speter/** Send a "open-dir" command over connection @a conn.  Associate to
330251881Speter * @a token the directory node named @a path under the directory
331251881Speter * identified by @a parent_token in revision @a rev.
332251881Speter * Use @a pool for allocations.
333251881Speter */
334251881Spetersvn_error_t *
335251881Spetersvn_ra_svn__write_cmd_open_dir(svn_ra_svn_conn_t *conn,
336251881Speter                               apr_pool_t *pool,
337251881Speter                               const char *path,
338251881Speter                               const char *parent_token,
339251881Speter                               const char *token,
340251881Speter                               svn_revnum_t rev);
341251881Speter
342251881Speter/** Send a "change-dir-prop" command over connection @a conn.  Set the
343251881Speter * property @a name to the optional @a value on the directory identified
344251881Speter * to @a token.  Use @a pool for allocations.
345251881Speter */
346251881Spetersvn_error_t *
347251881Spetersvn_ra_svn__write_cmd_change_dir_prop(svn_ra_svn_conn_t *conn,
348251881Speter                                      apr_pool_t *pool,
349251881Speter                                      const char *token,
350251881Speter                                      const char *name,
351251881Speter                                      const svn_string_t *value);
352251881Speter
353251881Speter/** Send a "close-dir" command over connection @a conn.  Identify the node
354251881Speter * to close with @a token.  The latter will then no longer be associated
355251881Speter * with that node.  Use @a pool for allocations.
356251881Speter */
357251881Spetersvn_error_t *
358251881Spetersvn_ra_svn__write_cmd_close_dir(svn_ra_svn_conn_t *conn,
359251881Speter                                apr_pool_t *pool,
360251881Speter                                const char *token);
361251881Speter
362251881Speter/** Send a "absent-dir" command over connection @a conn.  Directory node
363251881Speter * named @a path under the directory identified by @a parent_token is
364251881Speter * absent.  Use @a pool for allocations.
365251881Speter */
366251881Spetersvn_error_t *
367251881Spetersvn_ra_svn__write_cmd_absent_dir(svn_ra_svn_conn_t *conn,
368251881Speter                                 apr_pool_t *pool,
369251881Speter                                 const char *path,
370251881Speter                                 const char *parent_token);
371251881Speter
372251881Speter/** Send a "add-file" command over connection @a conn.  Add a new file
373251881Speter * node named @a path under the directory identified by @a parent_token.
374251881Speter * Associate the new file with the given @a token.  * @a copy_path and
375251881Speter * @a copy_rev are optional and describe the copy source.
376251881Speter * Use @a pool for allocations.
377251881Speter */
378251881Spetersvn_error_t *
379251881Spetersvn_ra_svn__write_cmd_add_file(svn_ra_svn_conn_t *conn,
380251881Speter                               apr_pool_t *pool,
381251881Speter                               const char *path,
382251881Speter                               const char *parent_token,
383251881Speter                               const char *token,
384251881Speter                               const char *copy_path,
385251881Speter                               svn_revnum_t copy_rev);
386251881Speter
387251881Speter/** Send a "open-file" command over connection @a conn.  Associate to
388251881Speter * @a token the file node named @a path under the directory identified by
389251881Speter * @a parent_token in revision @a rev.
390251881Speter * Use @a pool for allocations.
391251881Speter */
392251881Spetersvn_error_t *
393251881Spetersvn_ra_svn__write_cmd_open_file(svn_ra_svn_conn_t *conn,
394251881Speter                                apr_pool_t *pool,
395251881Speter                                const char *path,
396251881Speter                                const char *parent_token,
397251881Speter                                const char *token,
398251881Speter                                svn_revnum_t rev);
399251881Speter
400251881Speter/** Send a "change-file-prop" command over connection @a conn.  Set the
401251881Speter * property @a name to the optional @a value on the file identified to
402251881Speter * @a token.  Use @a pool for allocations.
403251881Speter */
404251881Spetersvn_error_t *
405251881Spetersvn_ra_svn__write_cmd_change_file_prop(svn_ra_svn_conn_t *conn,
406251881Speter                                       apr_pool_t *pool,
407251881Speter                                       const char *token,
408251881Speter                                       const char *name,
409251881Speter                                       const svn_string_t *value);
410251881Speter
411251881Speter/** Send a "close-dir" command over connection @a conn.  Identify the node
412251881Speter * to close with @a token and provide an optional @a check_sum.  The token
413251881Speter * will then no longer be associated with that node.
414251881Speter * Use @a pool for allocations.
415251881Speter */
416251881Spetersvn_error_t *
417251881Spetersvn_ra_svn__write_cmd_close_file(svn_ra_svn_conn_t *conn,
418251881Speter                                 apr_pool_t *pool,
419251881Speter                                 const char *token,
420251881Speter                                 const char *text_checksum);
421251881Speter
422251881Speter/** Send a "absent-file" command over connection @a conn.  File node
423251881Speter * named @a path in the directory identified by @a parent_token is
424251881Speter * absent.  Use @a pool for allocations.
425251881Speter */
426251881Spetersvn_error_t *
427251881Spetersvn_ra_svn__write_cmd_absent_file(svn_ra_svn_conn_t *conn,
428251881Speter                                  apr_pool_t *pool,
429251881Speter                                  const char *path,
430251881Speter                                  const char *parent_token);
431251881Speter
432251881Speter/** Send a "apply-textdelta" command over connection @a conn.  Starts a
433251881Speter * series of text deltas to be applied to the file identified by @a token.
434251881Speter * Optionally, specify the file's current checksum in @a base_checksum.
435251881Speter * Use @a pool for allocations.
436251881Speter */
437251881Spetersvn_error_t *
438251881Spetersvn_ra_svn__write_cmd_apply_textdelta(svn_ra_svn_conn_t *conn,
439251881Speter                                      apr_pool_t *pool,
440251881Speter                                      const char *token,
441251881Speter                                      const char *base_checksum);
442251881Speter
443251881Speter/** Send a "textdelta-chunk" command over connection @a conn.  Apply
444251881Speter * textdelta @a chunk to the file identified by @a token.
445251881Speter * Use @a pool for allocations.
446251881Speter */
447251881Spetersvn_error_t *
448251881Spetersvn_ra_svn__write_cmd_textdelta_chunk(svn_ra_svn_conn_t *conn,
449251881Speter                                      apr_pool_t *pool,
450251881Speter                                      const char *token,
451251881Speter                                      const svn_string_t *chunk);
452251881Speter
453251881Speter/** Send a "textdelta-end" command over connection @a conn.  Ends the
454251881Speter * series of text deltas to be applied to the file identified by @a token.
455251881Speter * Use @a pool for allocations.
456251881Speter */
457251881Spetersvn_error_t *
458251881Spetersvn_ra_svn__write_cmd_textdelta_end(svn_ra_svn_conn_t *conn,
459251881Speter                                    apr_pool_t *pool,
460251881Speter                                    const char *token);
461251881Speter
462251881Speter/** Send a "close-edit" command over connection @a conn.  Ends the editor
463251881Speter * drive (successfully).  Use @a pool for allocations.
464251881Speter */
465251881Spetersvn_error_t *
466251881Spetersvn_ra_svn__write_cmd_close_edit(svn_ra_svn_conn_t *conn,
467251881Speter                                 apr_pool_t *pool);
468251881Speter
469251881Speter/** Send a "abort-edit" command over connection @a conn.  Prematurely ends
470251881Speter * the editor drive, e.g. due to some problem on the other side.
471251881Speter * Use @a pool for allocations.
472251881Speter */
473251881Spetersvn_error_t *
474251881Spetersvn_ra_svn__write_cmd_abort_edit(svn_ra_svn_conn_t *conn,
475251881Speter                                 apr_pool_t *pool);
476251881Speter
477251881Speter/** Send a "set-path" command over connection @a conn.
478251881Speter * Use @a pool for allocations.
479251881Speter *
480251881Speter * @see set_path() in #svn_ra_reporter3_t for a description.
481251881Speter */
482251881Spetersvn_error_t *
483251881Spetersvn_ra_svn__write_cmd_set_path(svn_ra_svn_conn_t *conn,
484251881Speter                               apr_pool_t *pool,
485251881Speter                               const char *path,
486251881Speter                               svn_revnum_t rev,
487251881Speter                               svn_boolean_t start_empty,
488251881Speter                               const char *lock_token,
489251881Speter                               svn_depth_t depth);
490251881Speter
491251881Speter/** Send a "delete-path" command over connection @a conn.
492251881Speter * Use @a pool for allocations.
493251881Speter *
494251881Speter * @see delete_path() in #svn_ra_reporter3_t for a description.
495251881Speter */
496251881Spetersvn_error_t *
497251881Spetersvn_ra_svn__write_cmd_delete_path(svn_ra_svn_conn_t *conn,
498251881Speter                                  apr_pool_t *pool,
499251881Speter                                  const char *path);
500251881Speter
501251881Speter/** Send a "link-path" command over connection @a conn.
502251881Speter * Use @a pool for allocations.
503251881Speter *
504251881Speter * @see link_path() in #svn_ra_reporter3_t for a description.
505251881Speter */
506251881Spetersvn_error_t *
507251881Spetersvn_ra_svn__write_cmd_link_path(svn_ra_svn_conn_t *conn,
508251881Speter                                apr_pool_t *pool,
509251881Speter                                const char *path,
510251881Speter                                const char *url,
511251881Speter                                svn_revnum_t rev,
512251881Speter                                svn_boolean_t start_empty,
513251881Speter                                const char *lock_token,
514251881Speter                                svn_depth_t depth);
515251881Speter
516251881Speter/** Send a "finish-report" command over connection @a conn.
517251881Speter * Use @a pool for allocations.
518251881Speter *
519251881Speter * @see finish_report() in #svn_ra_reporter3_t for a description.
520251881Speter */
521251881Spetersvn_error_t *
522251881Spetersvn_ra_svn__write_cmd_finish_report(svn_ra_svn_conn_t *conn,
523251881Speter                                    apr_pool_t *pool);
524251881Speter
525251881Speter/** Send a "abort-report" command over connection @a conn.
526251881Speter * Use @a pool for allocations.
527251881Speter *
528251881Speter * @see abort_report() in #svn_ra_reporter3_t for a description.
529251881Speter */
530251881Spetersvn_error_t *
531251881Spetersvn_ra_svn__write_cmd_abort_report(svn_ra_svn_conn_t *conn,
532251881Speter                                   apr_pool_t *pool);
533251881Speter
534251881Speter/** Send a "reparent" command over connection @a conn.
535251881Speter * Use @a pool for allocations.
536251881Speter *
537251881Speter * @see #svn_ra_reparent for a description.
538251881Speter */
539251881Spetersvn_error_t *
540251881Spetersvn_ra_svn__write_cmd_reparent(svn_ra_svn_conn_t *conn,
541251881Speter                               apr_pool_t *pool,
542251881Speter                               const char *url);
543251881Speter
544251881Speter/** Send a "get-latest-rev" command over connection @a conn.
545251881Speter * Use @a pool for allocations.
546251881Speter *
547251881Speter * @see #svn_ra_get_latest_revnum for a description.
548251881Speter */
549251881Spetersvn_error_t *
550251881Spetersvn_ra_svn__write_cmd_get_latest_rev(svn_ra_svn_conn_t *conn,
551251881Speter                                     apr_pool_t *pool);
552251881Speter
553251881Speter/** Send a "get-dated-rev" command over connection @a conn.
554251881Speter * Use @a pool for allocations.
555251881Speter *
556251881Speter * @see #svn_ra_get_dated_revision for a description.
557251881Speter */
558251881Spetersvn_error_t *
559251881Spetersvn_ra_svn__write_cmd_get_dated_rev(svn_ra_svn_conn_t *conn,
560251881Speter                                    apr_pool_t *pool,
561251881Speter                                    apr_time_t tm);
562251881Speter
563251881Speter/** Send a "change-rev-prop2" command over connection @a conn.
564251881Speter * Use @a pool for allocations.
565251881Speter *
566251881Speter * @see #svn_ra_change_rev_prop2 for a description.
567251881Speter */
568251881Spetersvn_error_t *
569251881Spetersvn_ra_svn__write_cmd_change_rev_prop2(svn_ra_svn_conn_t *conn,
570251881Speter                                       apr_pool_t *pool,
571251881Speter                                       svn_revnum_t rev,
572251881Speter                                       const char *name,
573251881Speter                                       const svn_string_t *value,
574251881Speter                                       svn_boolean_t dont_care,
575251881Speter                                       const svn_string_t *old_value);
576251881Speter
577251881Speter/** Send a "change-rev-prop" command over connection @a conn.
578251881Speter * Use @a pool for allocations.
579251881Speter *
580251881Speter * @see #svn_ra_change_rev_prop for a description.
581251881Speter */
582251881Spetersvn_error_t *
583251881Spetersvn_ra_svn__write_cmd_change_rev_prop(svn_ra_svn_conn_t *conn,
584251881Speter                                      apr_pool_t *pool,
585251881Speter                                      svn_revnum_t rev,
586251881Speter                                      const char *name,
587251881Speter                                      const svn_string_t *value);
588251881Speter
589251881Speter/** Send a "rev-proplist" command over connection @a conn.
590251881Speter * Use @a pool for allocations.
591251881Speter *
592251881Speter * @see #svn_ra_rev_proplist for a description.
593251881Speter */
594251881Spetersvn_error_t *
595251881Spetersvn_ra_svn__write_cmd_rev_proplist(svn_ra_svn_conn_t *conn,
596251881Speter                                   apr_pool_t *pool,
597251881Speter                                   svn_revnum_t rev);
598251881Speter
599251881Speter/** Send a "rev-prop" command over connection @a conn.
600251881Speter * Use @a pool for allocations.
601251881Speter *
602251881Speter * @see #svn_ra_rev_prop for a description.
603251881Speter */
604251881Spetersvn_error_t *
605251881Spetersvn_ra_svn__write_cmd_rev_prop(svn_ra_svn_conn_t *conn,
606251881Speter                               apr_pool_t *pool,
607251881Speter                               svn_revnum_t rev,
608251881Speter                               const char *name);
609251881Speter
610251881Speter/** Send a "get-file" command over connection @a conn.
611251881Speter * Use @a pool for allocations.
612251881Speter *
613251881Speter * @see #svn_ra_get_file for a description.
614251881Speter */
615251881Spetersvn_error_t *
616251881Spetersvn_ra_svn__write_cmd_get_file(svn_ra_svn_conn_t *conn,
617251881Speter                               apr_pool_t *pool,
618251881Speter                               const char *path,
619251881Speter                               svn_revnum_t rev,
620251881Speter                               svn_boolean_t props,
621251881Speter                               svn_boolean_t stream);
622251881Speter
623251881Speter/** Send a "update" command over connection @a conn.
624251881Speter * Use @a pool for allocations.
625251881Speter *
626251881Speter * @see #svn_ra_do_update3 for a description.
627251881Speter */
628251881Spetersvn_error_t *
629251881Spetersvn_ra_svn__write_cmd_update(svn_ra_svn_conn_t *conn,
630251881Speter                             apr_pool_t *pool,
631251881Speter                             svn_revnum_t rev,
632251881Speter                             const char *target,
633251881Speter                             svn_boolean_t recurse,
634251881Speter                             svn_depth_t depth,
635251881Speter                             svn_boolean_t send_copyfrom_args,
636251881Speter                             svn_boolean_t ignore_ancestry);
637251881Speter
638251881Speter/** Send a "switch" command over connection @a conn.
639251881Speter * Use @a pool for allocations.
640251881Speter *
641251881Speter * @see #svn_ra_do_switch3 for a description.
642251881Speter */
643251881Spetersvn_error_t *
644251881Spetersvn_ra_svn__write_cmd_switch(svn_ra_svn_conn_t *conn,
645251881Speter                             apr_pool_t *pool,
646251881Speter                             svn_revnum_t rev,
647251881Speter                             const char *target,
648251881Speter                             svn_boolean_t recurse,
649251881Speter                             const char *switch_url,
650251881Speter                             svn_depth_t depth,
651251881Speter                             svn_boolean_t send_copyfrom_args,
652251881Speter                             svn_boolean_t ignore_ancestry);
653251881Speter
654251881Speter/** Send a "status" command over connection @a conn.
655251881Speter * Use @a pool for allocations.
656251881Speter *
657251881Speter * @see #svn_ra_do_status2 for a description.
658251881Speter */
659251881Spetersvn_error_t *
660251881Spetersvn_ra_svn__write_cmd_status(svn_ra_svn_conn_t *conn,
661251881Speter                             apr_pool_t *pool,
662251881Speter                             const char *target,
663251881Speter                             svn_boolean_t recurse,
664251881Speter                             svn_revnum_t rev,
665251881Speter                             svn_depth_t depth);
666251881Speter
667251881Speter/** Send a "diff" command over connection @a conn.
668251881Speter * Use @a pool for allocations.
669251881Speter *
670251881Speter * @see #svn_ra_do_diff3 for a description.
671251881Speter */
672251881Spetersvn_error_t *
673251881Spetersvn_ra_svn__write_cmd_diff(svn_ra_svn_conn_t *conn,
674251881Speter                           apr_pool_t *pool,
675251881Speter                           svn_revnum_t rev,
676251881Speter                           const char *target,
677251881Speter                           svn_boolean_t recurse,
678251881Speter                           svn_boolean_t ignore_ancestry,
679251881Speter                           const char *versus_url,
680251881Speter                           svn_boolean_t text_deltas,
681251881Speter                           svn_depth_t depth);
682251881Speter
683251881Speter/** Send a "check-path" command over connection @a conn.
684251881Speter * Use @a pool for allocations.
685251881Speter *
686251881Speter * @see #svn_ra_check_path for a description.
687251881Speter */
688251881Spetersvn_error_t *
689251881Spetersvn_ra_svn__write_cmd_check_path(svn_ra_svn_conn_t *conn,
690251881Speter                                 apr_pool_t *pool,
691251881Speter                                 const char *path,
692251881Speter                                 svn_revnum_t rev);
693251881Speter
694251881Speter/** Send a "stat" command over connection @a conn.
695251881Speter * Use @a pool for allocations.
696251881Speter *
697251881Speter * @see #svn_ra_stat for a description.
698251881Speter */
699251881Spetersvn_error_t *
700251881Spetersvn_ra_svn__write_cmd_stat(svn_ra_svn_conn_t *conn,
701251881Speter                           apr_pool_t *pool,
702251881Speter                           const char *path,
703251881Speter                           svn_revnum_t rev);
704251881Speter
705251881Speter/** Send a "get-file-revs" command over connection @a conn.
706251881Speter * Use @a pool for allocations.
707251881Speter *
708251881Speter * @see #svn_ra_get_file_revs2 for a description.
709251881Speter */
710251881Spetersvn_error_t *
711251881Spetersvn_ra_svn__write_cmd_get_file_revs(svn_ra_svn_conn_t *conn,
712251881Speter                                    apr_pool_t *pool,
713251881Speter                                    const char *path,
714251881Speter                                    svn_revnum_t start,
715251881Speter                                    svn_revnum_t end,
716251881Speter                                    svn_boolean_t include_merged_revisions);
717251881Speter
718251881Speter/** Send a "lock" command over connection @a conn.
719251881Speter * Use @a pool for allocations.
720251881Speter *
721251881Speter * @see #svn_ra_lock for a description.
722251881Speter */
723251881Spetersvn_error_t *
724251881Spetersvn_ra_svn__write_cmd_lock(svn_ra_svn_conn_t *conn,
725251881Speter                           apr_pool_t *pool,
726251881Speter                           const char *path,
727251881Speter                           const char *comment,
728251881Speter                           svn_boolean_t steal_lock,
729251881Speter                           svn_revnum_t revnum);
730251881Speter
731251881Speter/** Send a "unlock" command over connection @a conn.
732251881Speter * Use @a pool for allocations.
733251881Speter *
734251881Speter * @see #svn_ra_unlock for a description.
735251881Speter */
736251881Spetersvn_error_t *
737251881Spetersvn_ra_svn__write_cmd_unlock(svn_ra_svn_conn_t *conn,
738251881Speter                             apr_pool_t *pool,
739251881Speter                             const char *path,
740251881Speter                             const char *token,
741251881Speter                             svn_boolean_t break_lock);
742251881Speter
743251881Speter/** Send a "get-lock" command over connection @a conn.
744251881Speter * Use @a pool for allocations.
745251881Speter *
746251881Speter * @see #svn_ra_get_lock for a description.
747251881Speter */
748251881Spetersvn_error_t *
749251881Spetersvn_ra_svn__write_cmd_get_lock(svn_ra_svn_conn_t *conn,
750251881Speter                               apr_pool_t *pool,
751251881Speter                               const char *path);
752251881Speter
753251881Speter/** Send a "get-locks" command over connection @a conn.
754251881Speter * Use @a pool for allocations.
755251881Speter *
756251881Speter * @see #svn_ra_get_locks2 for a description.
757251881Speter */
758251881Spetersvn_error_t *
759251881Spetersvn_ra_svn__write_cmd_get_locks(svn_ra_svn_conn_t *conn,
760251881Speter                                apr_pool_t *pool,
761251881Speter                                const char *path,
762251881Speter                                svn_depth_t depth);
763251881Speter
764251881Speter/** Send a "replay" command over connection @a conn.
765251881Speter * Use @a pool for allocations.
766251881Speter *
767251881Speter * @see #svn_ra_replay for a description.
768251881Speter */
769251881Spetersvn_error_t *
770251881Spetersvn_ra_svn__write_cmd_replay(svn_ra_svn_conn_t *conn,
771251881Speter                             apr_pool_t *pool,
772251881Speter                             svn_revnum_t rev,
773251881Speter                             svn_revnum_t low_water_mark,
774251881Speter                             svn_boolean_t send_deltas);
775251881Speter
776251881Speter/** Send a "replay-range" command over connection @a conn.
777251881Speter * Use @a pool for allocations.
778251881Speter *
779251881Speter * @see #svn_ra_replay_range for a description.
780251881Speter */
781251881Spetersvn_error_t *
782251881Spetersvn_ra_svn__write_cmd_replay_range(svn_ra_svn_conn_t *conn,
783251881Speter                                   apr_pool_t *pool,
784251881Speter                                   svn_revnum_t start_revision,
785251881Speter                                   svn_revnum_t end_revision,
786251881Speter                                   svn_revnum_t low_water_mark,
787251881Speter                                   svn_boolean_t send_deltas);
788251881Speter
789251881Speter/** Send a "get-deleted-rev" command over connection @a conn.
790251881Speter * Use @a pool for allocations.
791251881Speter *
792251881Speter * @see #svn_ra_get_deleted_rev for a description.
793251881Speter */
794251881Spetersvn_error_t *
795251881Spetersvn_ra_svn__write_cmd_get_deleted_rev(svn_ra_svn_conn_t *conn,
796251881Speter                                      apr_pool_t *pool,
797251881Speter                                      const char *path,
798251881Speter                                      svn_revnum_t peg_revision,
799251881Speter                                      svn_revnum_t end_revision);
800251881Speter
801251881Speter/** Send a "get-iprops" command over connection @a conn.
802251881Speter * Use @a pool for allocations.
803251881Speter *
804251881Speter * @see #svn_ra_get_inherited_props for a description.
805251881Speter */
806251881Spetersvn_error_t *
807251881Spetersvn_ra_svn__write_cmd_get_iprops(svn_ra_svn_conn_t *conn,
808251881Speter                                 apr_pool_t *pool,
809251881Speter                                 const char *path,
810251881Speter                                 svn_revnum_t revision);
811251881Speter
812251881Speter/** Send a "finish-replay" command over connection @a conn.
813251881Speter * Use @a pool for allocations.
814251881Speter */
815251881Spetersvn_error_t *
816251881Spetersvn_ra_svn__write_cmd_finish_replay(svn_ra_svn_conn_t *conn,
817251881Speter                                    apr_pool_t *pool);
818251881Speter
819251881Speter/**
820251881Speter * @}
821251881Speter */
822251881Speter#ifdef __cplusplus
823251881Speter}
824251881Speter#endif /* __cplusplus */
825251881Speter
826251881Speter#endif /* SVN_RA_SVN_PRIVATE_H */
827