mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-07 10:46:01 +00:00
120 lines
3.4 KiB
C
120 lines
3.4 KiB
C
#include "clar_libgit2.h"
|
|
#include "branch.h"
|
|
#include "remote.h"
|
|
|
|
static git_repository *g_repo;
|
|
|
|
static const char *current_master_tip = "099fabac3a9ea935598528c27f866e34089c2eff";
|
|
|
|
void test_refs_branches_remote__initialize(void)
|
|
{
|
|
git_oid id;
|
|
|
|
g_repo = cl_git_sandbox_init("testrepo");
|
|
git_oid_fromstr(&id, current_master_tip);
|
|
|
|
/* Create test/master */
|
|
git_reference_create(NULL, g_repo, "refs/remotes/test/master", &id, 1);
|
|
}
|
|
|
|
void test_refs_branches_remote__cleanup(void)
|
|
{
|
|
cl_git_sandbox_cleanup();
|
|
}
|
|
|
|
void test_refs_branches_remote__can_get_remote_for_branch(void)
|
|
{
|
|
git_reference *ref;
|
|
const char *name;
|
|
char *expectedRemoteName = "test";
|
|
int expectedRemoteNameLength = strlen(expectedRemoteName) + 1;
|
|
char remotename[1024] = {0};
|
|
|
|
cl_git_pass(git_branch_lookup(&ref, g_repo, "test/master", GIT_BRANCH_REMOTE));
|
|
cl_git_pass(git_branch_name(&name, ref));
|
|
cl_assert_equal_s("test/master", name);
|
|
|
|
cl_assert_equal_i(expectedRemoteNameLength,
|
|
git_branch_remote_name(NULL, 0, g_repo, ref));
|
|
cl_assert_equal_i(expectedRemoteNameLength,
|
|
git_branch_remote_name(remotename, expectedRemoteNameLength, g_repo, ref));
|
|
cl_assert_equal_s("test", remotename);
|
|
|
|
git_reference_free(ref);
|
|
}
|
|
|
|
void test_refs_branches_remote__insufficient_buffer_returns_error(void)
|
|
{
|
|
git_reference *ref;
|
|
const char *name;
|
|
char *expectedRemoteName = "test";
|
|
int expectedRemoteNameLength = strlen(expectedRemoteName) + 1;
|
|
char remotename[1024] = {0};
|
|
|
|
cl_git_pass(git_branch_lookup(&ref, g_repo, "test/master", GIT_BRANCH_REMOTE));
|
|
cl_git_pass(git_branch_name(&name, ref));
|
|
cl_assert_equal_s("test/master", name);
|
|
|
|
cl_assert_equal_i(expectedRemoteNameLength,
|
|
git_branch_remote_name(NULL, 0, g_repo, ref));
|
|
cl_git_fail_with(GIT_ERROR,
|
|
git_branch_remote_name(remotename, expectedRemoteNameLength - 1, g_repo, ref));
|
|
|
|
git_reference_free(ref);
|
|
}
|
|
|
|
void test_refs_branches_remote__no_matching_remote_returns_error(void)
|
|
{
|
|
git_reference *ref;
|
|
const char *name;
|
|
git_oid id;
|
|
|
|
git_oid_fromstr(&id, current_master_tip);
|
|
|
|
/* Create nonexistent/master */
|
|
git_reference_create(NULL, g_repo, "refs/remotes/nonexistent/master", &id, 1);
|
|
|
|
cl_git_pass(git_branch_lookup(&ref, g_repo,"nonexistent/master", GIT_BRANCH_REMOTE));
|
|
cl_git_pass(git_branch_name(&name, ref));
|
|
cl_assert_equal_s("nonexistent/master", name);
|
|
|
|
cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, ref), GIT_ENOTFOUND);
|
|
git_reference_free(ref);
|
|
}
|
|
|
|
void test_refs_branches_remote__local_remote_returns_error(void)
|
|
{
|
|
git_reference *ref;
|
|
const char *name;
|
|
|
|
cl_git_pass(git_branch_lookup(&ref,g_repo, "master", GIT_BRANCH_LOCAL));
|
|
cl_git_pass(git_branch_name(&name, ref));
|
|
cl_assert_equal_s("master",name);
|
|
|
|
cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, ref), GIT_ERROR);
|
|
git_reference_free(ref);
|
|
}
|
|
|
|
void test_refs_branches_remote__ambiguous_remote_returns_error(void)
|
|
{
|
|
git_reference *ref;
|
|
const char *name;
|
|
git_remote *remote;
|
|
|
|
/* Create the remote */
|
|
cl_git_pass(git_remote_create(&remote, g_repo, "addtest", "http://github.com/libgit2/libgit2"));
|
|
|
|
/* Update the remote fetch spec */
|
|
cl_git_pass(git_remote_set_fetchspec(remote, "refs/heads/*:refs/remotes/test/*"));
|
|
cl_git_pass(git_remote_save(remote));
|
|
|
|
git_remote_free(remote);
|
|
|
|
cl_git_pass(git_branch_lookup(&ref,g_repo, "test/master", GIT_BRANCH_REMOTE));
|
|
cl_git_pass(git_branch_name(&name, ref));
|
|
cl_assert_equal_s("test/master", name);
|
|
|
|
cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, ref), GIT_EAMBIGUOUS);
|
|
git_reference_free(ref);
|
|
}
|