From 1e44ea97f6c07598c1086e65e80458144c766a6e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Tue, 12 May 2015 11:13:41 +0200 Subject: [PATCH] submodule: add test initialising and cloning a repo We have a few tests checking each step, but we do not yet have a test which tests the documented workflow for creating a submodule, namely `setup_add` followed by cloning into it, followed by `add_finalize`. Add such a test to protect against regressions in this workflow. --- tests/clone/nonetwork.c | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tests/clone/nonetwork.c b/tests/clone/nonetwork.c index e4794fc14..c4401a2a1 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"); +} -- 2.39.5