diff options
| author | Carlos Martín Nieto <cmn@elego.de> | 2011-05-06 12:42:47 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <cmn@elego.de> | 2011-05-10 14:47:20 +0200 |
| commit | c0335005495c1b49986d19031557f9df6bf49922 (patch) | |
| tree | e78fe9fc9487818a73f531af3d873353010ed583 /include | |
| parent | ca8d2dfc0cea0c16e2d6bae16d95d652e292f473 (diff) | |
| download | libgit2-c0335005495c1b49986d19031557f9df6bf49922.tar.gz | |
Move config to a backend structure
Configuration options can come from different sources. Currently,
there is only support for reading them from a flat file, but it might
make sense to read it from a database at some point.
Move the parsing code into src/config_file.c and create an include
file include/git2/config_backend.h to allow for other backends to be
developed.
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
Diffstat (limited to 'include')
| -rw-r--r-- | include/git2/config.h | 12 | ||||
| -rw-r--r-- | include/git2/config_backend.h | 57 | ||||
| -rw-r--r-- | include/git2/types.h | 3 |
3 files changed, 71 insertions, 1 deletions
diff --git a/include/git2/config.h b/include/git2/config.h index abf59fa9e..3ebbe64de 100644 --- a/include/git2/config.h +++ b/include/git2/config.h @@ -38,12 +38,22 @@ GIT_BEGIN_DECL /** + * Allocate a new configuration + */ +GIT_EXTERN(int) git_config_new(git_config **out); + +/** * Open a configuration file * * @param cfg_out pointer to the configuration data * @param path where to load the confiration from */ -GIT_EXTERN(int) git_config_open(git_config **cfg_out, const char *path); +GIT_EXTERN(int) git_config_open_bare(git_config **cfg_out, const char *path); + +/** + * + */ +GIT_EXTERN(int) git_config_add_backend(git_config *cfg, git_config_backend *backend, int priority); /** * Free the configuration and its associated memory diff --git a/include/git2/config_backend.h b/include/git2/config_backend.h new file mode 100644 index 000000000..427cd95dd --- /dev/null +++ b/include/git2/config_backend.h @@ -0,0 +1,57 @@ +/* + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, + * as published by the Free Software Foundation. + * + * In addition to the permissions in the GNU General Public License, + * the authors give you unlimited permission to link the compiled + * version of this file into combinations with other programs, + * and to distribute those combinations without any restriction + * coming from the use of this file. (The General Public License + * restrictions do apply in other respects; for example, they cover + * modification of the file, and distribution when not linked into + * a combined executable.) + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDE_git_config_backend_h__ +#define INCLUDE_git_config_backend_h__ + +#include "common.h" +#include "types.h" +#include "config.h" + +GIT_BEGIN_DECL + +struct git_config; + +struct git_config_backend { + struct git_config *cfg; + /* Open means open the file/database and parse if necessary */ + int (*open)(struct git_config_backend *); + int (* get)(struct git_config_backend *, const char *key, const char **value); + int (* set)(struct git_config_backend *, const char *key, const char *value); + int (*foreach)(struct git_config_backend *, int (*fn)(const char *, void *), void *data); + void (*free)(struct git_config_backend *); +}; + +/** + * Create a file-backed configuration backend + * + * @param out the new backend + * @path where the config file is located + */ +GIT_EXTERN(int) git_config_backend_file(struct git_config_backend **out, const char *path); + +GIT_END_DECL + +#endif diff --git a/include/git2/types.h b/include/git2/types.h index 84e3d5b7f..49e80dd95 100644 --- a/include/git2/types.h +++ b/include/git2/types.h @@ -133,6 +133,9 @@ typedef struct git_index git_index; /** Memory representation of a config file */ typedef struct git_config git_config; +/** A specific implementation of a config backend */ +typedef struct git_config_backend git_config_backend; + /** Memory representation of a config variable */ typedef struct git_cvar git_cvar; |
