mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-29 15:02:37 +00:00

There are a few tests that set up a fake home directory and a fake GLOBAL search path so that we can test things in global ignore or attribute or config files. This cleans up that code to work more robustly even if there is a test failure. This also fixes some valgrind warnings where scanning search paths for separators could end up doing a little bit of sketchy data access when coming to the end of search list.
92 lines
2.5 KiB
C
92 lines
2.5 KiB
C
#include "clar_libgit2.h"
|
|
#include "buffer.h"
|
|
#include "fileops.h"
|
|
|
|
static git_config_level_t setting[3] = {
|
|
GIT_CONFIG_LEVEL_GLOBAL,
|
|
GIT_CONFIG_LEVEL_XDG,
|
|
GIT_CONFIG_LEVEL_SYSTEM
|
|
};
|
|
static char *restore[3];
|
|
|
|
void test_config_global__initialize(void)
|
|
{
|
|
int i;
|
|
git_buf path = GIT_BUF_INIT;
|
|
|
|
/* snapshot old settings to restore later */
|
|
for (i = 0; i < 3; ++i) {
|
|
cl_git_pass(
|
|
git_libgit2_opts(GIT_OPT_GET_SEARCH_PATH, setting[i], &path));
|
|
restore[i] = git_buf_detach(&path);
|
|
}
|
|
|
|
cl_git_pass(git_futils_mkdir_r("home", NULL, 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_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_path_prettify(&path, "etc", NULL));
|
|
cl_git_pass(git_libgit2_opts(
|
|
GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_SYSTEM, path.ptr));
|
|
|
|
git_buf_free(&path);
|
|
}
|
|
|
|
void test_config_global__cleanup(void)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < 3; ++i) {
|
|
cl_git_pass(
|
|
git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH, setting[i], restore[i]));
|
|
git__free(restore[i]);
|
|
restore[i] = NULL;
|
|
}
|
|
|
|
cl_git_pass(git_futils_rmdir_r("home", NULL, GIT_RMDIR_REMOVE_FILES));
|
|
cl_git_pass(git_futils_rmdir_r("xdg", NULL, GIT_RMDIR_REMOVE_FILES));
|
|
cl_git_pass(git_futils_rmdir_r("etc", NULL, GIT_RMDIR_REMOVE_FILES));
|
|
}
|
|
|
|
void test_config_global__open_global(void)
|
|
{
|
|
git_config *cfg, *global, *selected, *dummy;
|
|
|
|
cl_git_pass(git_config_open_default(&cfg));
|
|
cl_git_pass(git_config_open_level(&global, cfg, GIT_CONFIG_LEVEL_GLOBAL));
|
|
cl_git_fail(git_config_open_level(&dummy, cfg, GIT_CONFIG_LEVEL_XDG));
|
|
cl_git_pass(git_config_open_global(&selected, cfg));
|
|
|
|
git_config_free(selected);
|
|
git_config_free(global);
|
|
git_config_free(cfg);
|
|
}
|
|
|
|
void test_config_global__open_xdg(void)
|
|
{
|
|
git_config *cfg, *xdg, *selected;
|
|
const char *val, *str = "teststring";
|
|
const char *key = "this.variable";
|
|
|
|
cl_git_mkfile("xdg/git/config", "# XDG config\n[core]\n test = 1\n");
|
|
|
|
cl_git_pass(git_config_open_default(&cfg));
|
|
cl_git_pass(git_config_open_level(&xdg, cfg, GIT_CONFIG_LEVEL_XDG));
|
|
cl_git_pass(git_config_open_global(&selected, cfg));
|
|
|
|
cl_git_pass(git_config_set_string(xdg, key, str));
|
|
cl_git_pass(git_config_get_string(&val, selected, key));
|
|
cl_assert_equal_s(str, val);
|
|
|
|
git_config_free(selected);
|
|
git_config_free(xdg);
|
|
git_config_free(cfg);
|
|
}
|