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