|
Packit Service |
20376f |
#include "clar_libgit2.h"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
#include "repository.h"
|
|
Packit Service |
20376f |
#include "buffer.h"
|
|
Packit Service |
20376f |
#include "submodule.h"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static const char *repo_name = "win32-forbidden";
|
|
Packit Service |
20376f |
static git_repository *repo;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__initialize(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
repo = cl_git_sandbox_init(repo_name);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__cleanup(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
cl_git_sandbox_cleanup();
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__can_open_index(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_index *index;
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_index(&index, repo));
|
|
Packit Service |
20376f |
cl_assert_equal_i(7, git_index_entrycount(index));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* ensure we can even write the unmodified index */
|
|
Packit Service |
20376f |
cl_git_pass(git_index_write(index));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_index_free(index);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__can_add_forbidden_filename_with_entry(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_index *index;
|
|
Packit Service |
20376f |
git_index_entry entry = {{0}};
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_index(&index, repo));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
entry.path = "aux";
|
|
Packit Service |
20376f |
entry.mode = GIT_FILEMODE_BLOB;
|
|
Packit Service |
20376f |
git_oid_fromstr(&entry.id, "da623abd956bb2fd8052c708c7ed43f05d192d37");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_index_add(index, &entry));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_index_free(index);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__cannot_add_dot_git_even_with_entry(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_index *index;
|
|
Packit Service |
20376f |
git_index_entry entry = {{0}};
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_index(&index, repo));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
entry.path = "foo/.git";
|
|
Packit Service |
20376f |
entry.mode = GIT_FILEMODE_BLOB;
|
|
Packit Service |
20376f |
git_oid_fromstr(&entry.id, "da623abd956bb2fd8052c708c7ed43f05d192d37");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_fail(git_index_add(index, &entry));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_index_free(index);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__cannot_add_forbidden_filename_from_filesystem(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_index *index;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* since our function calls are very low-level, we can create `aux.`,
|
|
Packit Service |
20376f |
* but we should not be able to add it to the index
|
|
Packit Service |
20376f |
*/
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_index(&index, repo));
|
|
Packit Service |
20376f |
cl_git_write2file("win32-forbidden/aux.", "foo\n", 4, O_RDWR | O_CREAT, 0666);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
#ifdef GIT_WIN32
|
|
Packit Service |
20376f |
cl_git_fail(git_index_add_bypath(index, "aux."));
|
|
Packit Service |
20376f |
#else
|
|
Packit Service |
20376f |
cl_git_pass(git_index_add_bypath(index, "aux."));
|
|
Packit Service |
20376f |
#endif
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_must_pass(p_unlink("win32-forbidden/aux."));
|
|
Packit Service |
20376f |
git_index_free(index);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static int dummy_submodule_cb(
|
|
Packit Service |
20376f |
git_submodule *sm, const char *name, void *payload)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
GIT_UNUSED(sm);
|
|
Packit Service |
20376f |
GIT_UNUSED(name);
|
|
Packit Service |
20376f |
GIT_UNUSED(payload);
|
|
Packit Service |
20376f |
return 0;
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__can_diff_tree_to_index(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_diff *diff;
|
|
Packit Service |
20376f |
git_tree *tree;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_head_tree(&tree, repo));
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_tree_to_index(&diff, repo, tree, NULL, NULL));
|
|
Packit Service |
20376f |
cl_assert_equal_i(0, git_diff_num_deltas(diff));
|
|
Packit Service |
20376f |
git_diff_free(diff);
|
|
Packit Service |
20376f |
git_tree_free(tree);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__can_diff_tree_to_tree(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_diff *diff;
|
|
Packit Service |
20376f |
git_tree *tree;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_head_tree(&tree, repo));
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_tree_to_tree(&diff, repo, tree, tree, NULL));
|
|
Packit Service |
20376f |
cl_assert_equal_i(0, git_diff_num_deltas(diff));
|
|
Packit Service |
20376f |
git_diff_free(diff);
|
|
Packit Service |
20376f |
git_tree_free(tree);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__can_diff_index_to_workdir(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_index *index;
|
|
Packit Service |
20376f |
git_diff *diff;
|
|
Packit Service |
20376f |
const git_diff_delta *delta;
|
|
Packit Service |
20376f |
git_tree *tree;
|
|
Packit Service |
20376f |
size_t i;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_index(&index, repo));
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_head_tree(&tree, repo));
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_index_to_workdir(&diff, repo, index, NULL));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
for (i = 0; i < git_diff_num_deltas(diff); i++) {
|
|
Packit Service |
20376f |
delta = git_diff_get_delta(diff, i);
|
|
Packit Service |
20376f |
cl_assert_equal_i(GIT_DELTA_DELETED, delta->status);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_diff_free(diff);
|
|
Packit Service |
20376f |
git_tree_free(tree);
|
|
Packit Service |
20376f |
git_index_free(index);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__checking_out_forbidden_index_fails(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
#ifdef GIT_WIN32
|
|
Packit Service |
20376f |
git_index *index;
|
|
Packit Service |
20376f |
git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
|
|
Packit Service |
20376f |
git_diff *diff;
|
|
Packit Service |
20376f |
const git_diff_delta *delta;
|
|
Packit Service |
20376f |
git_tree *tree;
|
|
Packit Service |
20376f |
size_t num_deltas, i;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
opts.checkout_strategy = GIT_CHECKOUT_FORCE;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_index(&index, repo));
|
|
Packit Service |
20376f |
cl_git_fail(git_checkout_index(repo, index, &opts));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_head_tree(&tree, repo));
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_index_to_workdir(&diff, repo, index, NULL));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
num_deltas = git_diff_num_deltas(diff);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert(num_deltas > 0);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
for (i = 0; i < num_deltas; i++) {
|
|
Packit Service |
20376f |
delta = git_diff_get_delta(diff, i);
|
|
Packit Service |
20376f |
cl_assert_equal_i(GIT_DELTA_DELETED, delta->status);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_diff_free(diff);
|
|
Packit Service |
20376f |
git_tree_free(tree);
|
|
Packit Service |
20376f |
git_index_free(index);
|
|
Packit Service |
20376f |
#endif
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__can_query_submodules(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
cl_git_pass(git_submodule_foreach(repo, dummy_submodule_cb, NULL));
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_win32_forbidden__can_blame_file(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_blame *blame;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_blame_file(&blame, repo, "aux", NULL));
|
|
Packit Service |
20376f |
git_blame_free(blame);
|
|
Packit Service |
20376f |
}
|