diff options
author | Patrick Steinhardt <ps@pks.im> | 2015-09-24 14:37:10 +0200 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2017-02-13 10:28:15 +0100 |
commit | 4292837d502fedbbf1f24abe355eb349e4b3b0c9 (patch) | |
tree | c981feb33bdf01222b27bd039362ada74662146e | |
parent | e9403024fe65528a4125ae08a89cd5a8f2eb61e2 (diff) | |
download | libgit2-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.c | 3 | ||||
-rw-r--r-- | tests/worktree/config.c | 45 |
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); +} |