fetchhead.c 2.16 KB
Newer Older
1 2
#include "clar_libgit2.h"

3
#include "fileops.h"
4
#include "fetchhead.h"
5
#include "../fetchhead/fetchhead_data.h"
6 7 8 9 10
#include "git2/clone.h"

#define LIVE_REPO_URL "git://github.com/libgit2/TestGitRepository"

static git_repository *g_repo;
11
static git_clone_options g_options;
12

13
void test_online_fetchhead__initialize(void)
14 15
{
	g_repo = NULL;
16 17 18

	memset(&g_options, 0, sizeof(git_clone_options));
	g_options.version = GIT_CLONE_OPTIONS_VERSION;
19 20
}

21
void test_online_fetchhead__cleanup(void)
22
{
23
	if (g_repo) {
24
		git_repository_free(g_repo);
25 26 27
		g_repo = NULL;
	}

28
	cl_fixture_cleanup("./foo");
29 30 31 32
}

static void fetchhead_test_clone(void)
{
33
	cl_git_pass(git_clone(&g_repo, LIVE_REPO_URL, "./foo", &g_options));
34 35 36 37 38 39 40 41 42 43 44
}

static void fetchhead_test_fetch(const char *fetchspec, const char *expected_fetchhead)
{
	git_remote *remote;
	git_buf fetchhead_buf = GIT_BUF_INIT;
	int equals = 0;

	cl_git_pass(git_remote_load(&remote, g_repo, "origin"));
	git_remote_set_autotag(remote, GIT_REMOTE_DOWNLOAD_TAGS_AUTO);

45 46
	if(fetchspec != NULL) {
		git_remote_clear_refspecs(remote);
47
		git_remote_add_fetch(remote, fetchspec);
48
	}
49

Ben Straub committed
50
	cl_git_pass(git_remote_connect(remote, GIT_DIRECTION_FETCH));
51 52
	cl_git_pass(git_remote_download(remote, NULL, NULL));
	cl_git_pass(git_remote_update_tips(remote));
53
	git_remote_disconnect(remote);
54 55
	git_remote_free(remote);

Ben Straub committed
56
	cl_git_pass(git_futils_readbuffer(&fetchhead_buf, "./foo/.git/FETCH_HEAD"));
57 58 59 60 61 62 63 64

	equals = (strcmp(fetchhead_buf.ptr, expected_fetchhead) == 0);

	git_buf_free(&fetchhead_buf);

	cl_assert(equals);
}

65
void test_online_fetchhead__wildcard_spec(void)
66 67 68 69 70
{
	fetchhead_test_clone();
	fetchhead_test_fetch(NULL, FETCH_HEAD_WILDCARD_DATA);
}

71
void test_online_fetchhead__explicit_spec(void)
72 73 74 75 76
{
	fetchhead_test_clone();
	fetchhead_test_fetch("refs/heads/first-merge:refs/remotes/origin/first-merge", FETCH_HEAD_EXPLICIT_DATA);
}

77
void test_online_fetchhead__no_merges(void)
78 79 80 81 82 83
{
	git_config *config;

	fetchhead_test_clone();

	cl_git_pass(git_repository_config(&config, g_repo));
84 85
	cl_git_pass(git_config_delete_entry(config, "branch.master.remote"));
	cl_git_pass(git_config_delete_entry(config, "branch.master.merge"));
86
	git_config_free(config);
87 88 89

	fetchhead_test_fetch(NULL, FETCH_HEAD_NO_MERGE_DATA);
}