filter: set a temporary sysdir in test
authorEdward Thomson <[email protected]>
Mon, 20 Jan 2025 22:33:53 +0000 (20 22:33 +0000)
committerEdward Thomson <[email protected]>
Mon, 20 Jan 2025 22:45:59 +0000 (20 22:45 +0000)
The filter tests mutate state, and should set a temporary sysdir to do
so.

tests/libgit2/filter/systemattrs.c

index b687b4b..5f669e3 100644 (file)
@@ -1,21 +1,30 @@
 #include "clar_libgit2.h"
 #include "crlf.h"
 #include "path.h"
+#include "futils.h"
 
 static git_repository *g_repo = NULL;
+static git_str orig_system_path = GIT_STR_INIT;
 static git_str system_attr_path = GIT_STR_INIT;
 
 void test_filter_systemattrs__initialize(void)
 {
-       git_buf system_path = GIT_BUF_INIT;
+       git_str new_system_path = GIT_BUF_INIT;
 
        g_repo = cl_git_sandbox_init("crlf");
        cl_must_pass(p_unlink("crlf/.gitattributes"));
 
        cl_git_pass(git_libgit2_opts(
-               GIT_OPT_GET_SEARCH_PATH, GIT_CONFIG_LEVEL_SYSTEM, &system_path));
+               GIT_OPT_GET_SEARCH_PATH, GIT_CONFIG_LEVEL_SYSTEM, &orig_system_path));
+
+       cl_git_pass(git_str_joinpath(&new_system_path,
+               clar_sandbox_path(), "_system_path"));
+       cl_git_pass(git_futils_mkdir_r(new_system_path.ptr, 0777));
+       cl_git_pass(git_libgit2_opts(
+               GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_SYSTEM, new_system_path.ptr));
+
        cl_git_pass(git_str_joinpath(&system_attr_path,
-               system_path.ptr, "gitattributes"));
+               new_system_path.ptr, "gitattributes"));
 
        cl_git_mkfile(system_attr_path.ptr,
                "*.txt text\n"
@@ -23,13 +32,17 @@ void test_filter_systemattrs__initialize(void)
                "*.crlf text eol=crlf\n"
                "*.lf text eol=lf\n");
 
-       git_buf_dispose(&system_path);
+       git_str_dispose(&new_system_path);
 }
 
 void test_filter_systemattrs__cleanup(void)
 {
+       cl_git_pass(git_libgit2_opts(
+               GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_SYSTEM, orig_system_path.ptr));
+
        cl_must_pass(p_unlink(system_attr_path.ptr));
        git_str_dispose(&system_attr_path);
+       git_str_dispose(&orig_system_path);
 
        cl_git_sandbox_cleanup();
 }