Blame tests/network/remote/defaultbranch.c

Packit Service 20376f
#include "clar_libgit2.h"
Packit Service 20376f
#include "buffer.h"
Packit Service 20376f
#include "refspec.h"
Packit Service 20376f
#include "remote.h"
Packit Service 20376f
Packit Service 20376f
static git_remote *g_remote;
Packit Service 20376f
static git_repository *g_repo_a, *g_repo_b;
Packit Service 20376f
Packit Service 20376f
void test_network_remote_defaultbranch__initialize(void)
Packit Service 20376f
{
Packit Service 20376f
	g_repo_a = cl_git_sandbox_init("testrepo.git");
Packit Service 20376f
	cl_git_pass(git_repository_init(&g_repo_b, "repo-b.git", true));
Packit Service 20376f
	cl_git_pass(git_remote_create(&g_remote, g_repo_b, "origin", git_repository_path(g_repo_a)));
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_network_remote_defaultbranch__cleanup(void)
Packit Service 20376f
{
Packit Service 20376f
	git_remote_free(g_remote);
Packit Service 20376f
	git_repository_free(g_repo_b);
Packit Service 20376f
Packit Service 20376f
	cl_git_sandbox_cleanup();
Packit Service 20376f
	cl_fixture_cleanup("repo-b.git");
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
static void assert_default_branch(const char *should)
Packit Service 20376f
{
Packit Service 20376f
	git_buf name = GIT_BUF_INIT;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_remote_connect(g_remote, GIT_DIRECTION_FETCH, NULL, NULL, NULL));
Packit Service 20376f
	cl_git_pass(git_remote_default_branch(&name, g_remote));
Packit Service 20376f
	cl_assert_equal_s(should, name.ptr);
Packit Service 20376f
	git_buf_free(&name);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_network_remote_defaultbranch__master(void)
Packit Service 20376f
{
Packit Service 20376f
	assert_default_branch("refs/heads/master");
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_network_remote_defaultbranch__master_does_not_win(void)
Packit Service 20376f
{
Packit Service 20376f
	cl_git_pass(git_repository_set_head(g_repo_a, "refs/heads/not-good"));
Packit Service 20376f
	assert_default_branch("refs/heads/not-good");
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_network_remote_defaultbranch__master_on_detached(void)
Packit Service 20376f
{
Packit Service 20376f
	cl_git_pass(git_repository_detach_head(g_repo_a));
Packit Service 20376f
	assert_default_branch("refs/heads/master");
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_network_remote_defaultbranch__no_default_branch(void)
Packit Service 20376f
{
Packit Service 20376f
	git_remote *remote_b;
Packit Service 20376f
	const git_remote_head **heads;
Packit Service 20376f
	size_t len;
Packit Service 20376f
	git_buf buf = GIT_BUF_INIT;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_remote_create(&remote_b, g_repo_b, "self", git_repository_path(g_repo_b)));
Packit Service 20376f
	cl_git_pass(git_remote_connect(remote_b, GIT_DIRECTION_FETCH, NULL, NULL, NULL));
Packit Service 20376f
	cl_git_pass(git_remote_ls(&heads, &len, remote_b));
Packit Service 20376f
	cl_assert_equal_i(0, len);
Packit Service 20376f
Packit Service 20376f
	cl_git_fail_with(GIT_ENOTFOUND, git_remote_default_branch(&buf, remote_b));
Packit Service 20376f
Packit Service 20376f
	git_remote_free(remote_b);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_network_remote_defaultbranch__detached_sharing_nonbranch_id(void)
Packit Service 20376f
{
Packit Service 20376f
	git_oid id, id_cloned;
Packit Service 20376f
	git_reference *ref;
Packit Service 20376f
	git_buf buf = GIT_BUF_INIT;
Packit Service 20376f
	git_repository *cloned_repo;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_name_to_id(&id, g_repo_a, "HEAD"));
Packit Service 20376f
	cl_git_pass(git_repository_detach_head(g_repo_a));
Packit Service 20376f
	cl_git_pass(git_reference_remove(g_repo_a, "refs/heads/master"));
Packit Service 20376f
	cl_git_pass(git_reference_remove(g_repo_a, "refs/heads/not-good"));
Packit Service 20376f
	cl_git_pass(git_reference_create(&ref, g_repo_a, "refs/foo/bar", &id, 1, NULL));
Packit Service 20376f
	git_reference_free(ref);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_remote_connect(g_remote, GIT_DIRECTION_FETCH, NULL, NULL, NULL));
Packit Service 20376f
	cl_git_fail_with(GIT_ENOTFOUND, git_remote_default_branch(&buf, g_remote));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_clone(&cloned_repo, git_repository_path(g_repo_a), "./local-detached", NULL));
Packit Service 20376f
Packit Service 20376f
	cl_assert(git_repository_head_detached(cloned_repo));
Packit Service 20376f
	cl_git_pass(git_reference_name_to_id(&id_cloned, g_repo_a, "HEAD"));
Packit Service 20376f
	cl_assert(git_oid_equal(&id, &id_cloned));
Packit Service 20376f
Packit Service 20376f
	git_repository_free(cloned_repo);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_network_remote_defaultbranch__unborn_HEAD_with_branches(void)
Packit Service 20376f
{
Packit Service 20376f
	git_reference *ref;
Packit Service 20376f
	git_repository *cloned_repo;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_symbolic_create(&ref, g_repo_a, "HEAD", "refs/heads/i-dont-exist", 1, NULL));
Packit Service 20376f
	git_reference_free(ref);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_clone(&cloned_repo, git_repository_path(g_repo_a), "./semi-empty", NULL));
Packit Service 20376f
Packit Service 20376f
	cl_assert(git_repository_head_unborn(cloned_repo));
Packit Service 20376f
Packit Service 20376f
	git_repository_free(cloned_repo);
Packit Service 20376f
}