]> git.proxmox.com Git - libgit2.git/blobdiff - tests/config/global.c
config: add a ProgramData level
[libgit2.git] / tests / config / global.c
index 4481308d64b10c02941e2653c8734ae7da282209..1336ef6e75786e9beb6fbabe10fae311698bfeb0 100644 (file)
@@ -6,17 +6,17 @@ void test_config_global__initialize(void)
 {
        git_buf path = GIT_BUF_INIT;
 
-       cl_git_pass(git_futils_mkdir_r("home", NULL, 0777));
+       cl_git_pass(git_futils_mkdir_r("home", 0777));
        cl_git_pass(git_path_prettify(&path, "home", NULL));
        cl_git_pass(git_libgit2_opts(
                GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_GLOBAL, path.ptr));
 
-       cl_git_pass(git_futils_mkdir_r("xdg/git", NULL, 0777));
+       cl_git_pass(git_futils_mkdir_r("xdg/git", 0777));
        cl_git_pass(git_path_prettify(&path, "xdg/git", NULL));
        cl_git_pass(git_libgit2_opts(
                GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_XDG, path.ptr));
 
-       cl_git_pass(git_futils_mkdir_r("etc", NULL, 0777));
+       cl_git_pass(git_futils_mkdir_r("etc", 0777));
        cl_git_pass(git_path_prettify(&path, "etc", NULL));
        cl_git_pass(git_libgit2_opts(
                GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_SYSTEM, path.ptr));
@@ -65,3 +65,43 @@ void test_config_global__open_xdg(void)
        git_config_free(xdg);
        git_config_free(cfg);
 }
+
+void test_config_global__open_programdata(void)
+{
+       char *programdata;
+       git_config *cfg;
+       git_repository *repo;
+       git_buf config_path = GIT_BUF_INIT;
+       git_buf var_contents = GIT_BUF_INIT;
+
+       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_buf_puts(&config_path, "/config"));
+
+       cl_git_pass(git_config_open_ondisk(&cfg, config_path.ptr));
+       cl_git_pass(git_config_set_string(cfg, "programdata.var", "even higher level"));
+
+       git_buf_free(&config_path);
+       git_config_free(cfg);
+
+       git_config_open_default(&cfg);
+       cl_git_pass(git_config_get_string_buf(&var_contents, cfg, "programdata.var"));
+       cl_assert_equal_s("even higher level", var_contents.ptr);
+
+       git_config_free(cfg);
+       git_buf_free(&var_contents);
+
+       cl_git_pass(git_repository_init(&repo, "./foo.git", true));
+       cl_git_pass(git_repository_config(&cfg, repo));
+       cl_git_pass(git_config_get_string_buf(&var_contents, cfg, "programdata.var"));
+       cl_assert_equal_s("even higher level", var_contents.ptr);
+
+       git_config_free(cfg);
+       git_buf_free(&var_contents);
+       git_repository_free(repo);
+       cl_fixture_cleanup("./foo.git");
+}