svn_cmdline_private.h revision 251881
1/**
2 * @copyright
3 * ====================================================================
4 *    Licensed to the Apache Software Foundation (ASF) under one
5 *    or more contributor license agreements.  See the NOTICE file
6 *    distributed with this work for additional information
7 *    regarding copyright ownership.  The ASF licenses this file
8 *    to you under the Apache License, Version 2.0 (the
9 *    "License"); you may not use this file except in compliance
10 *    with the License.  You may obtain a copy of the License at
11 *
12 *      http://www.apache.org/licenses/LICENSE-2.0
13 *
14 *    Unless required by applicable law or agreed to in writing,
15 *    software distributed under the License is distributed on an
16 *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 *    KIND, either express or implied.  See the License for the
18 *    specific language governing permissions and limitations
19 *    under the License.
20 * ====================================================================
21 * @endcopyright
22 *
23 * @file svn_cmdline_private.h
24 * @brief Private functions for Subversion cmdline.
25 */
26
27#ifndef SVN_CMDLINE_PRIVATE_H
28#define SVN_CMDLINE_PRIVATE_H
29
30#include <apr_pools.h>
31#include <apr_hash.h>
32
33#include "svn_string.h"
34#include "svn_error.h"
35#include "svn_io.h"
36
37#ifdef __cplusplus
38extern "C" {
39#endif /* __cplusplus */
40
41/** Write a property as an XML element into @a *outstr.
42 *
43 * If @a outstr is NULL, allocate @a *outstr in @a pool; else append to
44 * @a *outstr, allocating in @a outstr's pool
45 *
46 * @a propname is the property name. @a propval is the property value, which
47 * will be encoded if it contains unsafe bytes.
48 *
49 * If @a inherited_prop is TRUE then @a propname is an inherited property,
50 * otherwise @a propname is an explicit property.
51 */
52void
53svn_cmdline__print_xml_prop(svn_stringbuf_t **outstr,
54                            const char *propname,
55                            svn_string_t *propval,
56                            svn_boolean_t inherited_prop,
57                            apr_pool_t *pool);
58
59
60/** An implementation of @c svn_auth_gnome_keyring_unlock_prompt_func_t that
61 * prompts the user for default GNOME Keyring password.
62 *
63 * Expects a @c svn_cmdline_prompt_baton2_t to be passed as @a baton.
64 *
65 * @since New in 1.6.
66 */
67svn_error_t *
68svn_cmdline__auth_gnome_keyring_unlock_prompt(char **keyring_password,
69                                              const char *keyring_name,
70                                              void *baton,
71                                              apr_pool_t *pool);
72
73/** Container for config options parsed with svn_cmdline__parse_config_option
74 *
75 * @since New in 1.7.
76 */
77typedef struct svn_cmdline__config_argument_t
78{
79  const char *file;
80  const char *section;
81  const char *option;
82  const char *value;
83} svn_cmdline__config_argument_t;
84
85/** Parser for 'FILE:SECTION:OPTION=[VALUE]'-style option arguments.
86 *
87 * Parses @a opt_arg and places its value in @a config_options, an apr array
88 * containing svn_cmdline__config_argument_t* elements, allocating the option
89 * data in @a pool
90 *
91 * @since New in 1.7.
92 */
93svn_error_t *
94svn_cmdline__parse_config_option(apr_array_header_t *config_options,
95                                 const char *opt_arg,
96                                 apr_pool_t *pool);
97
98/** Sets the config options in @a config_options, an apr array containing
99 * @c svn_cmdline__config_argument_t* elements, to the configuration in @a cfg,
100 * a hash mapping of <tt>const char *</tt> configuration file names to
101 * @c svn_config_t *'s. Write warnings to stderr.
102 *
103 * Use @a prefix as prefix and @a argument_name in warning messages.
104 *
105 * @since New in 1.7.
106 */
107svn_error_t *
108svn_cmdline__apply_config_options(apr_hash_t *config,
109                                  const apr_array_header_t *config_options,
110                                  const char *prefix,
111                                  const char *argument_name);
112
113/* Return a string allocated in POOL that is a copy of STR but with each
114 * line prefixed with INDENT. A line is all characters up to the first
115 * CR-LF, LF-CR, CR or LF, or the end of STR if sooner. */
116const char *
117svn_cmdline__indent_string(const char *str,
118                           const char *indent,
119                           apr_pool_t *pool);
120
121/* Print to stdout a hash PROP_HASH that maps property names (char *) to
122   property values (svn_string_t *).  The names are assumed to be in UTF-8
123   format; the values are either in UTF-8 (the special Subversion props) or
124   plain binary values.
125
126   If OUT is not NULL, then write to it rather than stdout.
127
128   If NAMES_ONLY is true, print just names, else print names and
129   values. */
130svn_error_t *
131svn_cmdline__print_prop_hash(svn_stream_t *out,
132                             apr_hash_t *prop_hash,
133                             svn_boolean_t names_only,
134                             apr_pool_t *pool);
135
136/* Similar to svn_cmdline__print_prop_hash(), only output xml to *OUTSTR.
137   If INHERITED_PROPS is true, then PROP_HASH contains inherited properties,
138   otherwise PROP_HASH contains explicit properties.  If *OUTSTR is NULL,
139   allocate it first from POOL, otherwise append to it. */
140svn_error_t *
141svn_cmdline__print_xml_prop_hash(svn_stringbuf_t **outstr,
142                                 apr_hash_t *prop_hash,
143                                 svn_boolean_t names_only,
144                                 svn_boolean_t inherited_props,
145                                 apr_pool_t *pool);
146
147
148/* Search for a text editor command in standard environment variables,
149   and invoke it to edit PATH.  Use POOL for all allocations.
150
151   If EDITOR_CMD is not NULL, it is the name of the external editor
152   command to use, overriding anything else that might determine the
153   editor.
154
155   CONFIG is a hash of svn_config_t * items keyed on a configuration
156   category (SVN_CONFIG_CATEGORY_CONFIG et al), and may be NULL.  */
157svn_error_t *
158svn_cmdline__edit_file_externally(const char *path,
159                                  const char *editor_cmd,
160                                  apr_hash_t *config,
161                                  apr_pool_t *pool);
162
163/* Search for a text editor command in standard environment variables,
164   and invoke it to edit CONTENTS (using a temporary file created in
165   directory BASE_DIR).  Return the new contents in *EDITED_CONTENTS,
166   or set *EDITED_CONTENTS to NULL if no edit was performed.
167
168   If EDITOR_CMD is not NULL, it is the name of the external editor
169   command to use, overriding anything else that might determine the
170   editor.
171
172   If TMPFILE_LEFT is NULL, the temporary file will be destroyed.
173   Else, the file will be left on disk, and its path returned in
174   *TMPFILE_LEFT.
175
176   CONFIG is a hash of svn_config_t * items keyed on a configuration
177   category (SVN_CONFIG_CATEGORY_CONFIG et al), and may be NULL.
178
179   If AS_TEXT is TRUE, recode CONTENTS and convert to native eol-style before
180   editing and back again afterwards.  In this case, ENCODING determines the
181   encoding used during editing.  If non-NULL, use the named encoding, else
182   use the system encoding.  If AS_TEXT is FALSE, don't do any translation.
183   In that case, ENCODING is ignored.
184
185   Use POOL for all allocations.  Use PREFIX as the prefix for the
186   temporary file used by the editor.
187
188   If return error, *EDITED_CONTENTS is not touched. */
189svn_error_t *
190svn_cmdline__edit_string_externally(svn_string_t **edited_contents,
191                                    const char **tmpfile_left,
192                                    const char *editor_cmd,
193                                    const char *base_dir,
194                                    const svn_string_t *contents,
195                                    const char *prefix,
196                                    apr_hash_t *config,
197                                    svn_boolean_t as_text,
198                                    const char *encoding,
199                                    apr_pool_t *pool);
200
201
202/** Wrapper for apr_getopt_init(), which see.
203 *
204 * @since New in 1.4.
205 */
206svn_error_t *
207svn_cmdline__getopt_init(apr_getopt_t **os,
208                         int argc,
209                         const char *argv[],
210                         apr_pool_t *pool);
211
212/* Determine whether interactive mode should be enabled, based on whether
213 * the user passed the --non-interactive or --force-interactive options.
214 * If neither option was passed, interactivity is enabled if standard
215 * input is connected to a terminal device.
216 *
217 * @since New in 1.8.
218 */
219svn_boolean_t
220svn_cmdline__be_interactive(svn_boolean_t non_interactive,
221                            svn_boolean_t force_interactive);
222
223
224#ifdef __cplusplus
225}
226#endif /* __cplusplus */
227
228#endif /* SVN_CMDLINE_PRIVATE_H */
229