git_repository *cl_git_sandbox_init(const char *sandbox) { /* Copy the whole sandbox folder from our fixtures to our test sandbox * area. After this it can be accessed with `./sandbox` */ cl_fixture_sandbox(sandbox); _cl_sandbox = sandbox; cl_git_pass(p_chdir(sandbox)); /* If this is not a bare repo, then rename `sandbox/.gitted` to * `sandbox/.git` which must be done since we cannot store a folder * named `.git` inside the fixtures folder of our libgit2 repo. */ if (p_access(".gitted", F_OK) == 0) cl_git_pass(cl_rename(".gitted", ".git")); /* If we have `gitattributes`, rename to `.gitattributes`. This may * be necessary if we don't want the attributes to be applied in the * libgit2 repo, but just during testing. */ if (p_access("gitattributes", F_OK) == 0) cl_git_pass(cl_rename("gitattributes", ".gitattributes")); /* As with `gitattributes`, we may need `gitignore` just for testing. */ if (p_access("gitignore", F_OK) == 0) cl_git_pass(cl_rename("gitignore", ".gitignore")); cl_git_pass(p_chdir("..")); /* Now open the sandbox repository and make it available for tests */ cl_git_pass(git_repository_open(&_cl_repo, sandbox)); return _cl_repo; }
void test_checkout_tree__can_continue_when_dir_in_use(void) { #ifdef GIT_WIN32 git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT; git_oid oid; git_object *obj = NULL; opts.checkout_strategy = GIT_CHECKOUT_FORCE | GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES; cl_git_pass(git_reference_name_to_id(&oid, g_repo, "refs/heads/dir")); cl_git_pass(git_object_lookup(&obj, g_repo, &oid, GIT_OBJ_ANY)); cl_git_pass(git_checkout_tree(g_repo, obj, &opts)); cl_assert(git_path_isfile("testrepo/a/b.txt")); git_object_free(obj); cl_git_pass(p_chdir("testrepo/a")); cl_git_pass(git_reference_name_to_id(&oid, g_repo, "refs/heads/master")); cl_git_pass(git_object_lookup(&obj, g_repo, &oid, GIT_OBJ_ANY)); cl_git_pass(git_checkout_tree(g_repo, obj, &opts)); cl_git_pass(p_chdir("../..")); cl_assert(git_path_is_empty_dir("testrepo/a")); git_object_free(obj); #endif }
void test_path_win32__absolute_from_relative(void) { #ifdef GIT_WIN32 char cwd_backup[MAX_PATH]; cl_must_pass(p_getcwd(cwd_backup, MAX_PATH)); cl_must_pass(p_chdir("C:/")); test_utf8_to_utf16("Foo", L"\\\\?\\C:\\Foo"); test_utf8_to_utf16("..\\..\\Foo", L"\\\\?\\C:\\Foo"); test_utf8_to_utf16("Foo\\..", L"\\\\?\\C:\\"); test_utf8_to_utf16("Foo\\..\\..", L"\\\\?\\C:\\"); test_utf8_to_utf16("", L"\\\\?\\C:\\"); cl_must_pass(p_chdir("C:/Windows")); test_utf8_to_utf16("Foo", L"\\\\?\\C:\\Windows\\Foo"); test_utf8_to_utf16("Foo\\Bar", L"\\\\?\\C:\\Windows\\Foo\\Bar"); test_utf8_to_utf16("..\\Foo", L"\\\\?\\C:\\Foo"); test_utf8_to_utf16("Foo\\..\\Bar", L"\\\\?\\C:\\Windows\\Bar"); test_utf8_to_utf16("", L"\\\\?\\C:\\Windows"); cl_must_pass(p_chdir(cwd_backup)); #endif }
static void env_cd_( const char *path, void (*passfail_)(const char *, const char *, int), const char *file, int line) { git_buf cwd_buf = GIT_BUF_INIT; cl_git_pass(git_path_prettify_dir(&cwd_buf, ".", NULL)); cl_must_pass(p_chdir(path)); passfail_(NULL, file, line); cl_must_pass(p_chdir(git_buf_cstr(&cwd_buf))); git_buf_free(&cwd_buf); }