diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2015-11-17 13:20:48 -0500 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2015-11-17 13:20:48 -0500 |
commit | 41744745e3af1379e36487f02a2210378f5d5224 (patch) | |
tree | 23e9f7e47155e28610ab9ae1e51a683185af29cf | |
parent | 32b9e647c5a91bb2cfb42822d86962054cfeeeea (diff) | |
parent | 88638f9b1841a83e82fc5f79bf00f90d40fb426f (diff) | |
download | libgit2-41744745e3af1379e36487f02a2210378f5d5224.tar.gz |
Merge pull request #3512 from ethomson/windows_sysdir
Protect windows SYSDIR when running tests
-rw-r--r-- | include/git2/common.h | 11 | ||||
-rw-r--r-- | src/settings.c | 15 | ||||
-rw-r--r-- | tests/clar_libgit2.c | 17 | ||||
-rw-r--r-- | tests/config/global.c | 10 |
4 files changed, 37 insertions, 16 deletions
diff --git a/include/git2/common.h b/include/git2/common.h index e687977d5..ee230dfae 100644 --- a/include/git2/common.h +++ b/include/git2/common.h @@ -174,9 +174,9 @@ typedef enum { * * opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf) * * > Get the search path for a given level of config data. "level" must - * > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`, or - * > `GIT_CONFIG_LEVEL_XDG`. The search path is written to the `out` - * > buffer. + * > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`, + * > `GIT_CONFIG_LEVEL_XDG`, or `GIT_CONFIG_LEVEL_PROGRAMDATA`. + * > The search path is written to the `out` buffer. * * * opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path) * @@ -188,8 +188,9 @@ typedef enum { * > variables). Use magic path `$PATH` to include the old value * > of the path (if you want to prepend or append, for instance). * > - * > - `level` must be GIT_CONFIG_LEVEL_SYSTEM, GIT_CONFIG_LEVEL_GLOBAL, - * > or GIT_CONFIG_LEVEL_XDG. + * > - `level` must be `GIT_CONFIG_LEVEL_SYSTEM`, + * > `GIT_CONFIG_LEVEL_GLOBAL`, `GIT_CONFIG_LEVEL_XDG`, or + * > `GIT_CONFIG_LEVEL_PROGRAMDATA`. * * * opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, git_otype type, size_t size) * diff --git a/src/settings.c b/src/settings.c index 91bdfd520..da99b59e2 100644 --- a/src/settings.c +++ b/src/settings.c @@ -49,9 +49,18 @@ static int config_level_to_sysdir(int config_level) int val = -1; switch (config_level) { - case GIT_CONFIG_LEVEL_SYSTEM: val = GIT_SYSDIR_SYSTEM; break; - case GIT_CONFIG_LEVEL_XDG: val = GIT_SYSDIR_XDG; break; - case GIT_CONFIG_LEVEL_GLOBAL: val = GIT_SYSDIR_GLOBAL; break; + case GIT_CONFIG_LEVEL_SYSTEM: + val = GIT_SYSDIR_SYSTEM; + break; + case GIT_CONFIG_LEVEL_XDG: + val = GIT_SYSDIR_XDG; + break; + case GIT_CONFIG_LEVEL_GLOBAL: + val = GIT_SYSDIR_GLOBAL; + break; + case GIT_CONFIG_LEVEL_PROGRAMDATA: + val = GIT_SYSDIR_PROGRAMDATA; + break; default: giterr_set( GITERR_INVALID, "Invalid config path selector %d", config_level); diff --git a/tests/clar_libgit2.c b/tests/clar_libgit2.c index 61442f88b..314d3441e 100644 --- a/tests/clar_libgit2.c +++ b/tests/clar_libgit2.c @@ -541,14 +541,23 @@ void cl_fake_home(void) void cl_sandbox_set_search_path_defaults(void) { - const char *sandbox_path = clar_sandbox_path(); + git_buf path = GIT_BUF_INIT; + + git_buf_joinpath(&path, clar_sandbox_path(), "__config"); + + if (!git_path_exists(path.ptr)) + cl_must_pass(p_mkdir(path.ptr, 0777)); git_libgit2_opts( - GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_GLOBAL, sandbox_path); + GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_GLOBAL, path.ptr); git_libgit2_opts( - GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_XDG, sandbox_path); + GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_XDG, path.ptr); git_libgit2_opts( - GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_SYSTEM, sandbox_path); + GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_SYSTEM, path.ptr); + git_libgit2_opts( + GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_PROGRAMDATA, path.ptr); + + git_buf_free(&path); } #ifdef GIT_WIN32 diff --git a/tests/config/global.c b/tests/config/global.c index 1336ef6e7..0ddd204ad 100644 --- a/tests/config/global.c +++ b/tests/config/global.c @@ -68,7 +68,6 @@ void test_config_global__open_xdg(void) void test_config_global__open_programdata(void) { - char *programdata; git_config *cfg; git_repository *repo; git_buf config_path = GIT_BUF_INIT; @@ -77,9 +76,12 @@ void test_config_global__open_programdata(void) if (!cl_getenv("GITTEST_INVASIVE_FS_STRUCTURE")) cl_skip(); - programdata = cl_getenv("PROGRAMDATA"); - cl_git_pass(git_buf_printf(&config_path, "%s/Git", programdata)); - cl_git_pass(p_mkdir(config_path.ptr, 0777)); + cl_git_pass(git_libgit2_opts(GIT_OPT_GET_SEARCH_PATH, + GIT_CONFIG_LEVEL_PROGRAMDATA, &config_path)); + + if (!git_path_isdir(config_path.ptr)) + cl_git_pass(p_mkdir(config_path.ptr, 0777)); + cl_git_pass(git_buf_puts(&config_path, "/config")); cl_git_pass(git_config_open_ondisk(&cfg, config_path.ptr)); |