summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2015-05-13 09:07:15 -0400
committerEdward Thomson <ethomson@edwardthomson.com>2015-05-13 09:07:15 -0400
commit6cd9219385cb8e5dd76e00924ddc87a8bcaa5f43 (patch)
tree927200ebd7ed4483adc21d383b3b406915826c90
parenta3ff28e9d14806a57c28d5835891634496febc94 (diff)
parent1e44ea97f6c07598c1086e65e80458144c766a6e (diff)
downloadlibgit2-6cd9219385cb8e5dd76e00924ddc87a8bcaa5f43.tar.gz
Merge pull request #3115 from libgit2/cmn/clone-submodule
submodule: add test initialising and cloning a repo
-rw-r--r--tests/clone/nonetwork.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/clone/nonetwork.c b/tests/clone/nonetwork.c
index fec6aff2e..44a503818 100644
--- a/tests/clone/nonetwork.c
+++ b/tests/clone/nonetwork.c
@@ -1,6 +1,8 @@
#include "clar_libgit2.h"
#include "git2/clone.h"
+#include "git2/sys/commit.h"
+#include "../submodule/submodule_helpers.h"
#include "remote.h"
#include "fileops.h"
#include "repository.h"
@@ -347,3 +349,56 @@ void test_clone_nonetwork__clone_from_empty_sets_upstream(void)
git_repository_free(repo);
cl_fixture_cleanup("./repowithunborn");
}
+
+static int just_return_origin(git_remote **out, git_repository *repo, const char *name, const char *url, void *payload)
+{
+ GIT_UNUSED(url); GIT_UNUSED(payload);
+
+ return git_remote_lookup(out, repo, name);
+}
+
+static int just_return_repo(git_repository **out, const char *path, int bare, void *payload)
+{
+ git_submodule *sm = payload;
+
+ GIT_UNUSED(path); GIT_UNUSED(bare);
+
+ return git_submodule_open(out, sm);
+}
+
+void test_clone_nonetwork__clone_submodule(void)
+{
+ git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
+ git_index *index;
+ git_oid tree_id, commit_id;
+ git_submodule *sm;
+ git_signature *sig;
+ git_repository *sm_repo;
+
+ cl_git_pass(git_repository_init(&g_repo, "willaddsubmodule", false));
+
+
+ /* Create the submodule structure, clone into it and finalize */
+ cl_git_pass(git_submodule_add_setup(&sm, g_repo, cl_fixture("testrepo.git"), "testrepo", true));
+
+ clone_opts.repository_cb = just_return_repo;
+ clone_opts.repository_cb_payload = sm;
+ clone_opts.remote_cb = just_return_origin;
+ clone_opts.remote_cb_payload = sm;
+ cl_git_pass(git_clone(&sm_repo, cl_fixture("testrepo.git"), "testrepo", &clone_opts));
+ cl_git_pass(git_submodule_add_finalize(sm));
+ git_repository_free(sm_repo);
+ git_submodule_free(sm);
+
+ cl_git_pass(git_repository_index(&index, g_repo));
+ cl_git_pass(git_index_write_tree(&tree_id, index));
+ git_index_free(index);
+
+ cl_git_pass(git_signature_now(&sig, "Submoduler", "submoduler@local"));
+ cl_git_pass(git_commit_create_from_ids(&commit_id, g_repo, "HEAD", sig, sig, NULL, "A submodule\n",
+ &tree_id, 0, NULL));
+
+ git_signature_free(sig);
+
+ assert_submodule_exists(g_repo, "testrepo");
+}