blob: 43de9ca519f7be9f65eb1dcd42c1cfadd99e4513 [file] [log] [blame]
/* svn_config.h: Functions for accessing SVN configuration files.
*
* ====================================================================
* Copyright (c) 2000-2002 CollabNet. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://subversion.tigris.org/license-1.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
*
* This software consists of voluntary contributions made by many
* individuals. For exact contribution history, see the revision
* history and logs, available at http://subversion.tigris.org/.
* ====================================================================
*/
#ifndef SVN_CONFIG_H
#define SVN_CONFIG_H
#include <apr_pools.h>
#include <svn_types.h>
#include <svn_error.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**************************************************************************
*** ***
*** For a description of the SVN configuration file syntax, see ***
*** your ~/.subversion/README, which is written out automatically by ***
*** svn_config_ensure(). ***
*** ***
**************************************************************************/
/* Opaque structure describing a set of configuration options. */
typedef struct svn_config_t svn_config_t;
/* Merge proxy configuration information from all available sources
and store it in *CFGP, which is allocated in POOL. That is, first
read any system-wide proxy configurations (from a file or from the
registry), then merge in personal proxy configurations (again from
file or registry).
Under Unix, or a Unix emulator such as Cygwin, personal config is
always located in .subversion/proxies in the user's home
directory. Under Windows it may be there, or in the registry; if
both are present, the registry is read first and then the file info
is merged in. System config information under Windows is found
only in the registry.
If no proxy config information is available, return an empty *CFGP.
### Notes: This function, and future ones like it, rather obviates
the need for svn_config_read() and svn_config_merge() as public
interfaces. However, I'm leaving them public for now, until it's
clear they can be de-exported. Hmm, funny how in this context, the
opposite of "exported" is not "imported", eh?
*/
svn_error_t *svn_config_read_proxies (svn_config_t **cfgp, apr_pool_t *pool);
/* Read configuration data from FILE (a file or registry path) into
*CFGP, allocated in POOL.
If FILE does not exist, then if MUST_EXIST, return an error,
otherwise return an empty svn_config_t. */
svn_error_t *svn_config_read (svn_config_t **cfgp,
const char *file,
svn_boolean_t must_exist,
apr_pool_t *pool);
/* Like svn_config_read, but merge the configuration data from FILE (a
file or registry path) into *CFG, which was previously returned
from svn_config_read. This function invalidates all value
expansions in CFG, so that the next svn_option_get() takes the
modifications into account. */
svn_error_t *svn_config_merge (svn_config_t *cfg,
const char *file,
svn_boolean_t must_exist);
/* Find the value of a (SECTION, OPTION) pair in CFG, set *VALUEP to
the value.
If the value does not exist, return DEFAULT_VALUE. Otherwise, the
value returned in VALUEP remains valid at least until the next
operation that invalidates variable expansions. DEFAULT_VALUE may
be the same as *VALUEP.
This function may change CFG by expanding option values. */
void svn_config_get (svn_config_t *cfg, const char **valuep,
const char *section, const char *option,
const char *default_value);
/* Add or replace the value of a (SECTION, OPTION) pair in CFG with VALUE.
This function invalidates all value expansions in CFG. */
void svn_config_set (svn_config_t *cfg,
const char *section, const char *option,
const char *value);
/* Enumerate the options in SECTION, passing BATON and the current
option's name and value to CALLBACK. Continue the enumeration if
CALLBACK returns TRUE. Return the number of times CALLBACK was
called.
### kff asks: A more usual interface is to continue enumerating
while CALLBACK does not return error, and if CALLBACK does
return error, to return the same error (or a wrapping of it)
from svn_config_enumerate(). What's the use case for
svn_config_enumerate()? Is it more likely to need to break out
of an enumeration early, with no error, than an invocation of
CALLBACK is likely to need to return an error? ###
CALLBACK's NAME and VALUE parameters are only valid for the
duration of the call. */
typedef svn_boolean_t (*svn_config_enumerator_t)
(const char *name, const char *value, void *baton);
int svn_config_enumerate (svn_config_t *cfg, const char *section,
svn_config_enumerator_t callback, void *baton);
/*** Setting up an initial configuration area. ***/
/* Try to ensure that the user's ~/.subversion/ area exists, and create no-op
template files for any absent config files. Use POOL for any
temporary allocation.
Don't error if something exists but is the wrong kind (for example,
~/.subversion exists but is a file, or ~/.subversion/proxies exists
but is a directory).
Also don't error if try to create something and fail -- it's okay
for the config area or its contents not to be created. But if
succeed in creating a config template file, return error if unable
to initialize its contents. */
svn_error_t *svn_config_ensure (apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_CONFIG_H */
/* --------------------------------------------------------------
* local variables:
* eval: (load-file "../../tools/dev/svn-dev.el")
* end:
*/