summaryrefslogtreecommitdiff
path: root/include/git2
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@elego.de>2011-05-06 12:42:47 +0200
committerCarlos Martín Nieto <cmn@elego.de>2011-05-10 14:47:20 +0200
commitc0335005495c1b49986d19031557f9df6bf49922 (patch)
treee78fe9fc9487818a73f531af3d873353010ed583 /include/git2
parentca8d2dfc0cea0c16e2d6bae16d95d652e292f473 (diff)
downloadlibgit2-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/git2')
-rw-r--r--include/git2/config.h12
-rw-r--r--include/git2/config_backend.h57
-rw-r--r--include/git2/types.h3
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;