summaryrefslogtreecommitdiff
path: root/tests/submodule/modify.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/submodule/modify.c')
-rw-r--r--tests/submodule/modify.c233
1 files changed, 0 insertions, 233 deletions
diff --git a/tests/submodule/modify.c b/tests/submodule/modify.c
deleted file mode 100644
index 654f677e6..000000000
--- a/tests/submodule/modify.c
+++ /dev/null
@@ -1,233 +0,0 @@
-#include "clar_libgit2.h"
-#include "posix.h"
-#include "path.h"
-#include "submodule_helpers.h"
-#include "config/config_helpers.h"
-
-static git_repository *g_repo = NULL;
-
-#define SM_LIBGIT2_URL "https://github.com/libgit2/libgit2.git"
-#define SM_LIBGIT2_BRANCH "github-branch"
-#define SM_LIBGIT2 "sm_libgit2"
-
-void test_submodule_modify__initialize(void)
-{
- g_repo = setup_fixture_submod2();
-}
-
-static int delete_one_config(const git_config_entry *entry, void *payload)
-{
- git_config *cfg = payload;
- return git_config_delete_entry(cfg, entry->name);
-}
-
-static int init_one_submodule(
- git_submodule *sm, const char *name, void *payload)
-{
- GIT_UNUSED(name);
- GIT_UNUSED(payload);
- return git_submodule_init(sm, false);
-}
-
-void test_submodule_modify__init(void)
-{
- git_config *cfg;
- const char *str;
-
- /* erase submodule data from .git/config */
- cl_git_pass(git_repository_config(&cfg, g_repo));
- cl_git_pass(
- git_config_foreach_match(cfg, "submodule\\..*", delete_one_config, cfg));
- git_config_free(cfg);
-
- /* confirm no submodule data in config */
- cl_git_pass(git_repository_config_snapshot(&cfg, g_repo));
- cl_git_fail_with(GIT_ENOTFOUND, git_config_get_string(&str, cfg, "submodule.sm_unchanged.url"));
- cl_git_fail_with(GIT_ENOTFOUND, git_config_get_string(&str, cfg, "submodule.sm_changed_head.url"));
- cl_git_fail_with(GIT_ENOTFOUND, git_config_get_string(&str, cfg, "submodule.sm_added_and_uncommited.url"));
- git_config_free(cfg);
-
- /* call init and see that settings are copied */
- cl_git_pass(git_submodule_foreach(g_repo, init_one_submodule, NULL));
-
- /* confirm submodule data in config */
- cl_git_pass(git_repository_config_snapshot(&cfg, g_repo));
- cl_git_pass(git_config_get_string(&str, cfg, "submodule.sm_unchanged.url"));
- cl_assert(git__suffixcmp(str, "/submod2_target") == 0);
- cl_git_pass(git_config_get_string(&str, cfg, "submodule.sm_changed_head.url"));
- cl_assert(git__suffixcmp(str, "/submod2_target") == 0);
- cl_git_pass(git_config_get_string(&str, cfg, "submodule.sm_added_and_uncommited.url"));
- cl_assert(git__suffixcmp(str, "/submod2_target") == 0);
- git_config_free(cfg);
-}
-
-static int sync_one_submodule(
- git_submodule *sm, const char *name, void *payload)
-{
- GIT_UNUSED(name);
- GIT_UNUSED(payload);
- return git_submodule_sync(sm);
-}
-
-static void assert_submodule_url_is_synced(
- git_submodule *sm, const char *parent_key, const char *child_key)
-{
- git_repository *smrepo;
-
- assert_config_entry_value(g_repo, parent_key, git_submodule_url(sm));
-
- cl_git_pass(git_submodule_open(&smrepo, sm));
- assert_config_entry_value(smrepo, child_key, git_submodule_url(sm));
- git_repository_free(smrepo);
-}
-
-void test_submodule_modify__sync(void)
-{
- git_submodule *sm1, *sm2, *sm3;
- git_config *cfg;
- const char *str;
-
-#define SM1 "sm_unchanged"
-#define SM2 "sm_changed_head"
-#define SM3 "sm_added_and_uncommited"
-
- /* look up some submodules */
- cl_git_pass(git_submodule_lookup(&sm1, g_repo, SM1));
- cl_git_pass(git_submodule_lookup(&sm2, g_repo, SM2));
- cl_git_pass(git_submodule_lookup(&sm3, g_repo, SM3));
-
- /* At this point, the .git/config URLs for the submodules have
- * not be rewritten with the absolute paths (although the
- * .gitmodules have. Let's confirm that they DO NOT match
- * yet, then we can do a sync to make them match...
- */
-
- /* check submodule info does not match before sync */
- cl_git_pass(git_repository_config_snapshot(&cfg, g_repo));
- cl_git_pass(git_config_get_string(&str, cfg, "submodule."SM1".url"));
- cl_assert(strcmp(git_submodule_url(sm1), str) != 0);
- cl_git_pass(git_config_get_string(&str, cfg, "submodule."SM2".url"));
- cl_assert(strcmp(git_submodule_url(sm2), str) != 0);
- cl_git_pass(git_config_get_string(&str, cfg, "submodule."SM3".url"));
- cl_assert(strcmp(git_submodule_url(sm3), str) != 0);
- git_config_free(cfg);
-
- /* sync all the submodules */
- cl_git_pass(git_submodule_foreach(g_repo, sync_one_submodule, NULL));
-
- /* check that submodule config is updated */
- assert_submodule_url_is_synced(
- sm1, "submodule."SM1".url", "remote.origin.url");
- assert_submodule_url_is_synced(
- sm2, "submodule."SM2".url", "remote.origin.url");
- assert_submodule_url_is_synced(
- sm3, "submodule."SM3".url", "remote.origin.url");
-
- git_submodule_free(sm1);
- git_submodule_free(sm2);
- git_submodule_free(sm3);
-}
-
-void assert_ignore_change(git_submodule_ignore_t ignore)
-{
- git_submodule *sm;
-
- cl_git_pass(git_submodule_set_ignore(g_repo, "sm_changed_head", ignore));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_assert_equal_i(ignore, git_submodule_ignore(sm));
- git_submodule_free(sm);
-}
-
-void test_submodule_modify__set_ignore(void)
-{
- assert_ignore_change(GIT_SUBMODULE_IGNORE_UNTRACKED);
- assert_ignore_change(GIT_SUBMODULE_IGNORE_NONE);
- assert_ignore_change(GIT_SUBMODULE_IGNORE_ALL);
-}
-
-void assert_update_change(git_submodule_update_t update)
-{
- git_submodule *sm;
-
- cl_git_pass(git_submodule_set_update(g_repo, "sm_changed_head", update));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_assert_equal_i(update, git_submodule_update_strategy(sm));
- git_submodule_free(sm);
-}
-
-void test_submodule_modify__set_update(void)
-{
- assert_update_change(GIT_SUBMODULE_UPDATE_REBASE);
- assert_update_change(GIT_SUBMODULE_UPDATE_NONE);
- assert_update_change(GIT_SUBMODULE_UPDATE_CHECKOUT);
-}
-
-void assert_recurse_change(git_submodule_recurse_t recurse)
-{
- git_submodule *sm;
-
- cl_git_pass(git_submodule_set_fetch_recurse_submodules(g_repo, "sm_changed_head", recurse));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_assert_equal_i(recurse, git_submodule_fetch_recurse_submodules(sm));
- git_submodule_free(sm);
-}
-
-void test_submodule_modify__set_fetch_recurse_submodules(void)
-{
- assert_recurse_change(GIT_SUBMODULE_RECURSE_YES);
- assert_recurse_change(GIT_SUBMODULE_RECURSE_NO);
- assert_recurse_change(GIT_SUBMODULE_RECURSE_ONDEMAND);
-}
-
-void test_submodule_modify__set_branch(void)
-{
- git_submodule *sm;
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_assert(git_submodule_branch(sm) == NULL);
- git_submodule_free(sm);
-
- cl_git_pass(git_submodule_set_branch(g_repo, "sm_changed_head", SM_LIBGIT2_BRANCH));
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_assert_equal_s(SM_LIBGIT2_BRANCH, git_submodule_branch(sm));
- git_submodule_free(sm);
-
- cl_git_pass(git_submodule_set_branch(g_repo, "sm_changed_head", NULL));
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_assert(git_submodule_branch(sm) == NULL);
- git_submodule_free(sm);
-}
-
-void test_submodule_modify__set_url(void)
-{
- git_submodule *sm;
-
- cl_git_pass(git_submodule_set_url(g_repo, "sm_changed_head", SM_LIBGIT2_URL));
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_assert_equal_s(SM_LIBGIT2_URL, git_submodule_url(sm));
- git_submodule_free(sm);
-}
-
-void test_submodule_modify__set_relative_url(void)
-{
- git_buf path = GIT_BUF_INIT;
- git_repository *repo;
- git_submodule *sm;
-
- cl_git_pass(git_submodule_set_url(g_repo, SM1, "../relative-url"));
- cl_git_pass(git_submodule_lookup(&sm, g_repo, SM1));
- cl_git_pass(git_submodule_sync(sm));
- cl_git_pass(git_submodule_open(&repo, sm));
-
- cl_git_pass(git_buf_joinpath(&path, clar_sandbox_path(), "relative-url"));
-
- assert_config_entry_value(g_repo, "submodule."SM1".url", path.ptr);
- assert_config_entry_value(repo, "remote.origin.url", path.ptr);
-
- git_repository_free(repo);
- git_submodule_free(sm);
- git_buf_dispose(&path);
-}