summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVicent Marti <vicent@github.com>2014-05-19 15:00:50 +0200
committerVicent Marti <vicent@github.com>2014-05-19 15:00:50 +0200
commit124a45ead39cde1e1119666357d4611821bedf63 (patch)
tree260607db2969f8693be6e0bdfd300010bbdca42a /tests
parent52b597b66e051e362b98c10492a51c4601b45985 (diff)
parent32332fccc9f1e316bcecf3ab5133331315e31871 (diff)
downloadlibgit2-124a45ead39cde1e1119666357d4611821bedf63.tar.gz
Merge pull request #2354 from libgit2/cmn/clone-into-mirror
Allow mirror-clone via `git_clone_into()`
Diffstat (limited to 'tests')
-rw-r--r--tests/network/fetchlocal.c26
-rw-r--r--tests/online/clone.c33
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;