summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2015-09-24 14:37:10 +0200
committerPatrick Steinhardt <ps@pks.im>2017-02-13 10:28:15 +0100
commit4292837d502fedbbf1f24abe355eb349e4b3b0c9 (patch)
treec981feb33bdf01222b27bd039362ada74662146e
parente9403024fe65528a4125ae08a89cd5a8f2eb61e2 (diff)
downloadlibgit2-4292837d502fedbbf1f24abe355eb349e4b3b0c9.tar.gz
config: open configuration in commondir
A repository's configuartion file can always be found in the GIT_COMMON_DIR, which has been newly introduced. For normal repositories this does change nothing, but for working trees this change allows to access the shared configuration file.
-rw-r--r--src/repository.c3
-rw-r--r--tests/worktree/config.c45
2 files changed, 46 insertions, 2 deletions
diff --git a/src/repository.c b/src/repository.c
index 1f8035aed..a829161e8 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -862,8 +862,7 @@ static int load_config(
if ((error = git_config_new(&cfg)) < 0)
return error;
- error = git_buf_joinpath(
- &config_path, repo->path_repository, GIT_CONFIG_FILENAME_INREPO);
+ error = git_repository_item_path(&config_path, repo, GIT_REPOSITORY_ITEM_CONFIG);
if (error < 0)
goto on_error;
diff --git a/tests/worktree/config.c b/tests/worktree/config.c
new file mode 100644
index 000000000..3ab317bb5
--- /dev/null
+++ b/tests/worktree/config.c
@@ -0,0 +1,45 @@
+#include "clar_libgit2.h"
+#include "worktree_helpers.h"
+
+#define COMMON_REPO "testrepo"
+#define WORKTREE_REPO "testrepo-worktree"
+
+static worktree_fixture fixture =
+ WORKTREE_FIXTURE_INIT(COMMON_REPO, WORKTREE_REPO);
+
+void test_worktree_config__initialize(void)
+{
+ setup_fixture_worktree(&fixture);
+}
+
+void test_worktree_config__cleanup(void)
+{
+ cleanup_fixture_worktree(&fixture);
+}
+
+void test_worktree_config__open(void)
+{
+ git_config *cfg;
+
+ cl_git_pass(git_repository_config(&cfg, fixture.worktree));
+ cl_assert(cfg != NULL);
+
+ git_config_free(cfg);
+}
+
+void test_worktree_config__set(void)
+{
+ git_config *cfg;
+ int32_t val;
+
+ cl_git_pass(git_repository_config(&cfg, fixture.worktree));
+ cl_git_pass(git_config_set_int32(cfg, "core.dummy", 5));
+ git_config_free(cfg);
+
+ // reopen to verify configuration has been set in the
+ // common dir
+ cl_git_pass(git_repository_config(&cfg, fixture.repo));
+ cl_git_pass(git_config_get_int32(&val, cfg, "core.dummy"));
+ cl_assert_equal_i(val, 5);
+ git_config_free(cfg);
+}