|
Packit Service |
20376f |
#include "clar_libgit2.h"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
#include "fileops.h"
|
|
Packit Service |
20376f |
#include "fetchhead.h"
|
|
Packit Service |
20376f |
#include "../fetchhead/fetchhead_data.h"
|
|
Packit Service |
20376f |
#include "git2/clone.h"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
#define LIVE_REPO_URL "git://github.com/libgit2/TestGitRepository"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static git_repository *g_repo;
|
|
Packit Service |
20376f |
static git_clone_options g_options;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_online_fetchhead__initialize(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_fetch_options dummy_fetch = GIT_FETCH_OPTIONS_INIT;
|
|
Packit Service |
20376f |
g_repo = NULL;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
memset(&g_options, 0, sizeof(git_clone_options));
|
|
Packit Service |
20376f |
g_options.version = GIT_CLONE_OPTIONS_VERSION;
|
|
Packit Service |
20376f |
g_options.fetch_opts = dummy_fetch;
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_online_fetchhead__cleanup(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
if (g_repo) {
|
|
Packit Service |
20376f |
git_repository_free(g_repo);
|
|
Packit Service |
20376f |
g_repo = NULL;
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_fixture_cleanup("./foo");
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static void fetchhead_test_clone(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
cl_git_pass(git_clone(&g_repo, LIVE_REPO_URL, "./foo", &g_options));
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static int count_references(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_strarray array;
|
|
Packit Service |
20376f |
int refs;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_reference_list(&array, g_repo));
|
|
Packit Service |
20376f |
refs = array.count;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_strarray_free(&array);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
return refs;
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static void fetchhead_test_fetch(const char *fetchspec, const char *expected_fetchhead)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_remote *remote;
|
|
Packit Service |
20376f |
git_fetch_options fetch_opts = GIT_FETCH_OPTIONS_INIT;
|
|
Packit Service |
20376f |
git_buf fetchhead_buf = GIT_BUF_INIT;
|
|
Packit Service |
20376f |
int equals = 0;
|
|
Packit Service |
20376f |
git_strarray array, *active_refs = NULL;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_remote_lookup(&remote, g_repo, "origin"));
|
|
Packit Service |
20376f |
fetch_opts.download_tags = GIT_REMOTE_DOWNLOAD_TAGS_AUTO;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
if(fetchspec != NULL) {
|
|
Packit Service |
20376f |
array.count = 1;
|
|
Packit Service |
20376f |
array.strings = (char **) &fetchspec;
|
|
Packit Service |
20376f |
active_refs = &array;
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_remote_fetch(remote, active_refs, &fetch_opts, NULL));
|
|
Packit Service |
20376f |
git_remote_free(remote);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_futils_readbuffer(&fetchhead_buf, "./foo/.git/FETCH_HEAD"));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
equals = (strcmp(fetchhead_buf.ptr, expected_fetchhead) == 0);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_buf_free(&fetchhead_buf);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert(equals);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_online_fetchhead__wildcard_spec(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
fetchhead_test_clone();
|
|
Packit Service |
20376f |
fetchhead_test_fetch(NULL, FETCH_HEAD_WILDCARD_DATA2);
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "annotated_tag"));
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "blob"));
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "commit_tree"));
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "nearly-dangling"));
|
|
Packit Service |
20376f |
fetchhead_test_fetch(NULL, FETCH_HEAD_WILDCARD_DATA);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_online_fetchhead__explicit_spec(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
fetchhead_test_clone();
|
|
Packit Service |
20376f |
fetchhead_test_fetch("refs/heads/first-merge:refs/remotes/origin/first-merge", FETCH_HEAD_EXPLICIT_DATA);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_online_fetchhead__no_merges(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_config *config;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
fetchhead_test_clone();
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_config(&config, g_repo));
|
|
Packit Service |
20376f |
cl_git_pass(git_config_delete_entry(config, "branch.master.remote"));
|
|
Packit Service |
20376f |
cl_git_pass(git_config_delete_entry(config, "branch.master.merge"));
|
|
Packit Service |
20376f |
git_config_free(config);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
fetchhead_test_fetch(NULL, FETCH_HEAD_NO_MERGE_DATA2);
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "annotated_tag"));
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "blob"));
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "commit_tree"));
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "nearly-dangling"));
|
|
Packit Service |
20376f |
fetchhead_test_fetch(NULL, FETCH_HEAD_NO_MERGE_DATA);
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "commit_tree"));
|
|
Packit Service |
20376f |
fetchhead_test_fetch(NULL, FETCH_HEAD_NO_MERGE_DATA3);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_online_fetchhead__explicit_dst_refspec_creates_branch(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_reference *ref;
|
|
Packit Service |
20376f |
int refs;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
fetchhead_test_clone();
|
|
Packit Service |
20376f |
refs = count_references();
|
|
Packit Service |
20376f |
fetchhead_test_fetch("refs/heads/first-merge:refs/heads/explicit-refspec", FETCH_HEAD_EXPLICIT_DATA);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_branch_lookup(&ref, g_repo, "explicit-refspec", GIT_BRANCH_ALL));
|
|
Packit Service |
20376f |
cl_assert_equal_i(refs + 1, count_references());
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_reference_free(ref);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_online_fetchhead__empty_dst_refspec_creates_no_branch(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_reference *ref;
|
|
Packit Service |
20376f |
int refs;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
fetchhead_test_clone();
|
|
Packit Service |
20376f |
refs = count_references();
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
fetchhead_test_fetch("refs/heads/first-merge", FETCH_HEAD_EXPLICIT_DATA);
|
|
Packit Service |
20376f |
cl_git_fail(git_branch_lookup(&ref, g_repo, "first-merge", GIT_BRANCH_ALL));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert_equal_i(refs, count_references());
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_online_fetchhead__colon_only_dst_refspec_creates_no_branch(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
int refs;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
fetchhead_test_clone();
|
|
Packit Service |
20376f |
refs = count_references();
|
|
Packit Service |
20376f |
fetchhead_test_fetch("refs/heads/first-merge:", FETCH_HEAD_EXPLICIT_DATA);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert_equal_i(refs, count_references());
|
|
Packit Service |
20376f |
}
|