diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2014-05-15 09:03:30 +0200 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2014-05-19 14:24:43 +0200 |
commit | b2067248632e8bf88f8be40a18079fab95b68f29 (patch) | |
tree | 78ab843b43dfcf1b9506f73eb667ec6ae9ca2f8a | |
parent | 7851e595ad832b532e6edc6ac5fb0e43db24fc6a (diff) | |
download | libgit2-b2067248632e8bf88f8be40a18079fab95b68f29.tar.gz |
clone: add failing test for a mirror-clone with clone_into
Show a failure to perform a mirror-clone from a repository, both local
and remote.
-rw-r--r-- | tests/network/fetchlocal.c | 26 | ||||
-rw-r--r-- | tests/online/clone.c | 33 |
2 files changed, 59 insertions, 0 deletions
diff --git a/tests/network/fetchlocal.c b/tests/network/fetchlocal.c index 4c39394bb..0d23bef48 100644 --- a/tests/network/fetchlocal.c +++ b/tests/network/fetchlocal.c @@ -86,3 +86,29 @@ void test_network_fetchlocal__partial(void) git_strarray_free(&refnames); git_remote_free(origin); } + +void test_network_fetchlocal__clone_into_mirror(void) +{ + git_buf path = GIT_BUF_INIT; + git_repository *repo; + git_remote *remote; + git_reference *head; + + cl_git_pass(git_repository_init(&repo, "./foo.git", true)); + cl_git_pass(git_remote_create(&remote, repo, "origin", cl_git_fixture_url("testrepo.git"))); + + git_remote_clear_refspecs(remote); + cl_git_pass(git_remote_add_fetch(remote, "+refs/*:refs/*")); + + cl_git_pass(git_clone_into(repo, remote, NULL, NULL, NULL)); + + cl_git_pass(git_reference_lookup(&head, repo, "HEAD")); + cl_assert_equal_i(GIT_REF_SYMBOLIC, git_reference_type(head)); + cl_assert_equal_s("refs/heads/master", git_reference_symbolic_target(head)); + + git_remote_free(remote); + git_reference_free(head); + git_repository_free(repo); + git_buf_free(&path); + cl_fixture_cleanup("./foo.git"); +} diff --git a/tests/online/clone.c b/tests/online/clone.c index 6e0e63950..e269771c0 100644 --- a/tests/online/clone.c +++ b/tests/online/clone.c @@ -164,6 +164,39 @@ void test_online_clone__clone_into(void) git_buf_free(&path); } +void test_online_clone__clone_mirror(void) +{ + git_buf path = GIT_BUF_INIT; + git_remote *remote; + git_reference *head; + git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT; + + bool fetch_progress_cb_was_called = false; + + cl_git_pass(git_repository_init(&g_repo, "./foo.git", true)); + cl_git_pass(git_remote_create(&remote, g_repo, "origin", LIVE_REPO_URL)); + + callbacks.transfer_progress = &fetch_progress; + callbacks.payload = &fetch_progress_cb_was_called; + git_remote_set_callbacks(remote, &callbacks); + + git_remote_clear_refspecs(remote); + cl_git_pass(git_remote_add_fetch(remote, "+refs/*:refs/*")); + + cl_git_pass(git_clone_into(g_repo, remote, NULL, NULL, NULL)); + + cl_git_pass(git_reference_lookup(&head, g_repo, "HEAD")); + cl_assert_equal_i(GIT_REF_SYMBOLIC, git_reference_type(head)); + cl_assert_equal_s("refs/heads/master", git_reference_symbolic_target(head)); + + cl_assert_equal_i(true, fetch_progress_cb_was_called); + + git_remote_free(remote); + git_reference_free(head); + git_buf_free(&path); + cl_fixture_cleanup("./foo.git"); +} + static int update_tips(const char *refname, const git_oid *a, const git_oid *b, void *payload) { int *callcount = (int*)payload; |