]> git.proxmox.com Git - libgit2.git/commitdiff
Add git_repository_config API
authorCarlos Martín Nieto <carlos@cmartin.tk>
Thu, 16 Jun 2011 15:46:06 +0000 (17:46 +0200)
committerVicent Marti <tanoku@gmail.com>
Fri, 17 Jun 2011 20:30:29 +0000 (22:30 +0200)
This function puts the global and repository configurations in one
git_config object and gives it to the user.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
include/git2/repository.h
src/config.h
src/repository.c

index 6fd763c5f4ed9c637add1cfbf1dfb175f7ea1e76..5c7903adcffef0bbbb5b23792089033b60374fc3 100644 (file)
@@ -265,6 +265,16 @@ GIT_EXTERN(const char *) git_repository_path(git_repository *repo, git_repositor
  */
 GIT_EXTERN(int) git_repository_is_bare(git_repository *repo);
 
+/**
+ * Retrieve the relevant configuration for a repository
+ *
+ * Puts together the configuration from the global and local files.
+ *
+ * @param out the repository's configuration
+ * @param repo the repository for which to get the config
+ */
+GIT_EXTERN(int) git_repository_config(git_config **out, git_repository *repo);
+
 /** @} */
 GIT_END_DECL
 #endif
index 8b521543ccf38062f0326fdad0e75d7d22578023..673887e396f1ffb9da34d635ea49919ab23df69e 100644 (file)
@@ -6,6 +6,7 @@
 #include "vector.h"
 
 #define GIT_CONFIG_FILENAME ".gitconfig"
+#define GIT_CONFIG_FILENAME_INREPO "config"
 
 struct git_config {
        git_vector files;
index c9678f1855096e0f5baf119e08da7de7fd86c742..be089b54b88103c83eaa538d17a7719cb04ceefa 100644 (file)
@@ -32,7 +32,7 @@
 #include "tag.h"
 #include "blob.h"
 #include "fileops.h"
-
+#include "config.h"
 #include "refs.h"
 
 #define GIT_OBJECTS_INFO_DIR GIT_OBJECTS_DIR "info/"
@@ -271,6 +271,42 @@ cleanup:
        return git__rethrow(error, "Failed to open repository");
 }
 
+int git_repository_config(git_config **out, git_repository *repo)
+{
+       git_config *cfg = NULL;
+       git_config_file *local = NULL;
+       char gitconfig[GIT_PATH_MAX];
+       int error = GIT_SUCCESS;
+
+       error = git_config_open_global(&cfg);
+       if (error < GIT_SUCCESS)
+               return git__rethrow(error, "Failed to open global config");
+
+       git__joinpath(gitconfig, repo->path_repository, GIT_CONFIG_FILENAME_INREPO);
+       error = git_config_file__ondisk(&local, gitconfig);
+       if (error < GIT_SUCCESS) {
+               error = git__rethrow(error, "Failed to open local config");
+               goto cleanup;
+       }
+
+       error = git_config_add_file(cfg, local, 2);
+       if (error < GIT_SUCCESS) {
+               error = git__rethrow(error, "Failed to add the local config");
+               goto cleanup;
+       }
+
+       *out = cfg;
+
+cleanup:
+       if (error < GIT_SUCCESS) {
+               git_config_free(cfg);
+               if (local)
+                       local->free(local);
+       }
+
+       return error;
+}
+
 static int discover_repository_dirs(git_repository *repo, const char *path)
 {
        int error;