mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-07 18:11:43 +00:00

This converts virtually all of the places that allocate GIT_PATH_MAX buffers on the stack for manipulating paths to use git_buf objects instead. The patch is pretty careful not to touch the public API for libgit2, so there are a few places that still use GIT_PATH_MAX. This extends and changes some details of the git_buf implementation to add a couple of extra functions and to make error handling easier. This includes serious alterations to all the path.c functions, and several of the fileops.c ones, too. Also, there are a number of new functions that parallel existing ones except that use a git_buf instead of a stack-based buffer (such as git_config_find_global_r that exists alongsize git_config_find_global). This also modifies the win32 version of p_realpath to allocate whatever buffer size is needed to accommodate the realpath instead of hardcoding a GIT_PATH_MAX limit, but that change needs to be tested still.
56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
#include "clay_libgit2.h"
|
|
#include "posix.h"
|
|
|
|
void test_repo_open__bare_empty_repo(void)
|
|
{
|
|
git_repository *repo;
|
|
|
|
cl_git_pass(git_repository_open(&repo, cl_fixture("empty_bare.git")));
|
|
cl_assert(git_repository_path(repo) != NULL);
|
|
cl_assert(git_repository_workdir(repo) == NULL);
|
|
|
|
git_repository_free(repo);
|
|
}
|
|
|
|
void test_repo_open__standard_empty_repo(void)
|
|
{
|
|
git_repository *repo;
|
|
|
|
cl_git_pass(git_repository_open(&repo, cl_fixture("empty_standard_repo/.gitted")));
|
|
cl_assert(git_repository_path(repo) != NULL);
|
|
cl_assert(git_repository_workdir(repo) != NULL);
|
|
|
|
git_repository_free(repo);
|
|
}
|
|
|
|
/* TODO TODO */
|
|
#if 0
|
|
BEGIN_TEST(open2, "Open a bare repository with a relative path escaping out of the current working directory")
|
|
char current_workdir[GIT_PATH_MAX];
|
|
git_buf new_current_workdir = GIT_BUF_INIT;
|
|
git_buf path_repository = GIT_BUF_INIT;
|
|
|
|
const mode_t mode = 0777;
|
|
git_repository* repo;
|
|
|
|
/* Setup the repository to open */
|
|
must_pass(p_getcwd(current_workdir, sizeof(current_workdir)));
|
|
must_pass(git_buf_join_n(&path_repository, 3, current_workdir, TEMP_REPO_FOLDER, "a/d/e.git"));
|
|
must_pass(copydir_recurs(REPOSITORY_FOLDER, path_repository.ptr));
|
|
git_buf_free(&path_repository);
|
|
|
|
/* Change the current working directory */
|
|
must_pass(git_buf_joinpath(&new_current_workdir, TEMP_REPO_FOLDER, "a/b/c/"));
|
|
must_pass(git_futils_mkdir_r(new_current_workdir.ptr, mode));
|
|
must_pass(chdir(new_current_workdir.ptr));
|
|
git_buf_free(&new_current_workdir);
|
|
|
|
must_pass(git_repository_open(&repo, "../../d/e.git"));
|
|
|
|
git_repository_free(repo);
|
|
|
|
must_pass(chdir(current_workdir));
|
|
must_pass(git_futils_rmdir_r(TEMP_REPO_FOLDER, 1));
|
|
END_TEST
|
|
#endif
|