summaryrefslogtreecommitdiff
path: root/tests-clar/submodule
diff options
context:
space:
mode:
authorBen Straub <bs@github.com>2013-11-14 14:05:52 -0800
committerBen Straub <bs@github.com>2013-11-14 14:05:52 -0800
commit1782038144ef3413831801bb9c2f3038a84ac6f4 (patch)
treef074cc30890a20f5418c10fae1815ca516588a27 /tests-clar/submodule
parent7b947bf5cc59eefa83c28eb5f5fd8434207ebb8b (diff)
downloadlibgit2-1782038144ef3413831801bb9c2f3038a84ac6f4.tar.gz
Rename tests-clar to tests
Diffstat (limited to 'tests-clar/submodule')
-rw-r--r--tests-clar/submodule/lookup.c172
-rw-r--r--tests-clar/submodule/modify.c253
-rw-r--r--tests-clar/submodule/status.c425
-rw-r--r--tests-clar/submodule/submodule_helpers.c127
-rw-r--r--tests-clar/submodule/submodule_helpers.h5
5 files changed, 0 insertions, 982 deletions
diff --git a/tests-clar/submodule/lookup.c b/tests-clar/submodule/lookup.c
deleted file mode 100644
index 5f320e702..000000000
--- a/tests-clar/submodule/lookup.c
+++ /dev/null
@@ -1,172 +0,0 @@
-#include "clar_libgit2.h"
-#include "submodule_helpers.h"
-#include "posix.h"
-#include "git2/sys/repository.h"
-
-static git_repository *g_repo = NULL;
-
-void test_submodule_lookup__initialize(void)
-{
- g_repo = setup_fixture_submod2();
-}
-
-void test_submodule_lookup__simple_lookup(void)
-{
- git_submodule *sm;
-
- /* lookup existing */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_assert(sm);
-
- /* lookup pending change in .gitmodules that is not in HEAD */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_added_and_uncommited"));
- cl_assert(sm);
-
- /* lookup pending change in .gitmodules that is neither in HEAD nor index */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_gitmodules_only"));
- cl_assert(sm);
-
- /* lookup git repo subdir that is not added as submodule */
- cl_assert(git_submodule_lookup(&sm, g_repo, "not-submodule") == GIT_EEXISTS);
-
- /* lookup existing directory that is not a submodule */
- cl_assert(git_submodule_lookup(&sm, g_repo, "just_a_dir") == GIT_ENOTFOUND);
-
- /* lookup existing file that is not a submodule */
- cl_assert(git_submodule_lookup(&sm, g_repo, "just_a_file") == GIT_ENOTFOUND);
-
- /* lookup non-existent item */
- cl_assert(git_submodule_lookup(&sm, g_repo, "no_such_file") == GIT_ENOTFOUND);
-}
-
-void test_submodule_lookup__accessors(void)
-{
- git_submodule *sm;
- const char *oid = "480095882d281ed676fe5b863569520e54a7d5c0";
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_assert(git_submodule_owner(sm) == g_repo);
- cl_assert_equal_s("sm_unchanged", git_submodule_name(sm));
- cl_assert(git__suffixcmp(git_submodule_path(sm), "sm_unchanged") == 0);
- cl_assert(git__suffixcmp(git_submodule_url(sm), "/submod2_target") == 0);
-
- cl_assert(git_oid_streq(git_submodule_index_id(sm), oid) == 0);
- cl_assert(git_oid_streq(git_submodule_head_id(sm), oid) == 0);
- cl_assert(git_oid_streq(git_submodule_wd_id(sm), oid) == 0);
-
- cl_assert(git_submodule_ignore(sm) == GIT_SUBMODULE_IGNORE_NONE);
- cl_assert(git_submodule_update(sm) == GIT_SUBMODULE_UPDATE_CHECKOUT);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_assert_equal_s("sm_changed_head", git_submodule_name(sm));
-
- cl_assert(git_oid_streq(git_submodule_index_id(sm), oid) == 0);
- cl_assert(git_oid_streq(git_submodule_head_id(sm), oid) == 0);
- cl_assert(git_oid_streq(git_submodule_wd_id(sm),
- "3d9386c507f6b093471a3e324085657a3c2b4247") == 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_added_and_uncommited"));
- cl_assert_equal_s("sm_added_and_uncommited", git_submodule_name(sm));
-
- cl_assert(git_oid_streq(git_submodule_index_id(sm), oid) == 0);
- cl_assert(git_submodule_head_id(sm) == NULL);
- cl_assert(git_oid_streq(git_submodule_wd_id(sm), oid) == 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_missing_commits"));
- cl_assert_equal_s("sm_missing_commits", git_submodule_name(sm));
-
- cl_assert(git_oid_streq(git_submodule_index_id(sm), oid) == 0);
- cl_assert(git_oid_streq(git_submodule_head_id(sm), oid) == 0);
- cl_assert(git_oid_streq(git_submodule_wd_id(sm),
- "5e4963595a9774b90524d35a807169049de8ccad") == 0);
-}
-
-typedef struct {
- int count;
-} sm_lookup_data;
-
-static int sm_lookup_cb(git_submodule *sm, const char *name, void *payload)
-{
- sm_lookup_data *data = payload;
- data->count += 1;
- cl_assert_equal_s(git_submodule_name(sm), name);
- return 0;
-}
-
-void test_submodule_lookup__foreach(void)
-{
- sm_lookup_data data;
- memset(&data, 0, sizeof(data));
- cl_git_pass(git_submodule_foreach(g_repo, sm_lookup_cb, &data));
- cl_assert_equal_i(8, data.count);
-}
-
-void test_submodule_lookup__lookup_even_with_unborn_head(void)
-{
- git_reference *head;
- git_submodule *sm;
-
- /* put us on an unborn branch */
- cl_git_pass(git_reference_symbolic_create(
- &head, g_repo, "HEAD", "refs/heads/garbage", 1));
- git_reference_free(head);
-
- /* lookup existing */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_assert(sm);
-
- /* lookup pending change in .gitmodules that is not in HEAD */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_added_and_uncommited"));
- cl_assert(sm);
-
- /* lookup pending change in .gitmodules that is neither in HEAD nor index */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_gitmodules_only"));
- cl_assert(sm);
-
- /* lookup git repo subdir that is not added as submodule */
- cl_assert_equal_i(GIT_EEXISTS, git_submodule_lookup(&sm, g_repo, "not-submodule"));
-
- /* lookup existing directory that is not a submodule */
- cl_assert_equal_i(GIT_ENOTFOUND, git_submodule_lookup(&sm, g_repo, "just_a_dir"));
-
- /* lookup existing file that is not a submodule */
- cl_assert_equal_i(GIT_ENOTFOUND, git_submodule_lookup(&sm, g_repo, "just_a_file"));
-
- /* lookup non-existent item */
- cl_assert_equal_i(GIT_ENOTFOUND, git_submodule_lookup(&sm, g_repo, "no_such_file"));
-}
-
-void test_submodule_lookup__lookup_even_with_missing_index(void)
-{
- git_index *idx;
- git_submodule *sm;
-
- /* give the repo an empty index */
- cl_git_pass(git_index_new(&idx));
- git_repository_set_index(g_repo, idx);
- git_index_free(idx);
-
- /* lookup existing */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_assert(sm);
-
- /* lookup pending change in .gitmodules that is not in HEAD */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_added_and_uncommited"));
- cl_assert(sm);
-
- /* lookup pending change in .gitmodules that is neither in HEAD nor index */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_gitmodules_only"));
- cl_assert(sm);
-
- /* lookup git repo subdir that is not added as submodule */
- cl_assert_equal_i(GIT_EEXISTS, git_submodule_lookup(&sm, g_repo, "not-submodule"));
-
- /* lookup existing directory that is not a submodule */
- cl_assert_equal_i(GIT_ENOTFOUND, git_submodule_lookup(&sm, g_repo, "just_a_dir"));
-
- /* lookup existing file that is not a submodule */
- cl_assert_equal_i(GIT_ENOTFOUND, git_submodule_lookup(&sm, g_repo, "just_a_file"));
-
- /* lookup non-existent item */
- cl_assert_equal_i(GIT_ENOTFOUND, git_submodule_lookup(&sm, g_repo, "no_such_file"));
-}
diff --git a/tests-clar/submodule/modify.c b/tests-clar/submodule/modify.c
deleted file mode 100644
index e326287a6..000000000
--- a/tests-clar/submodule/modify.c
+++ /dev/null
@@ -1,253 +0,0 @@
-#include "clar_libgit2.h"
-#include "posix.h"
-#include "path.h"
-#include "submodule_helpers.h"
-
-static git_repository *g_repo = NULL;
-
-#define SM_LIBGIT2_URL "https://github.com/libgit2/libgit2.git"
-#define SM_LIBGIT2 "sm_libgit2"
-#define SM_LIBGIT2B "sm_libgit2b"
-
-void test_submodule_modify__initialize(void)
-{
- g_repo = setup_fixture_submod2();
-}
-
-void test_submodule_modify__add(void)
-{
- git_submodule *sm;
- git_config *cfg;
- const char *s;
-
- /* re-add existing submodule */
- cl_assert(
- git_submodule_add_setup(NULL, g_repo, "whatever", "sm_unchanged", 1) ==
- GIT_EEXISTS );
-
- /* add a submodule using a gitlink */
-
- cl_git_pass(
- git_submodule_add_setup(&sm, g_repo, SM_LIBGIT2_URL, SM_LIBGIT2, 1)
- );
-
- cl_assert(git_path_isfile("submod2/" SM_LIBGIT2 "/.git"));
-
- cl_assert(git_path_isdir("submod2/.git/modules"));
- cl_assert(git_path_isdir("submod2/.git/modules/" SM_LIBGIT2));
- cl_assert(git_path_isfile("submod2/.git/modules/" SM_LIBGIT2 "/HEAD"));
-
- cl_git_pass(git_repository_config(&cfg, g_repo));
- cl_git_pass(
- git_config_get_string(&s, cfg, "submodule." SM_LIBGIT2 ".url"));
- cl_assert_equal_s(s, SM_LIBGIT2_URL);
- git_config_free(cfg);
-
- /* add a submodule not using a gitlink */
-
- cl_git_pass(
- git_submodule_add_setup(&sm, g_repo, SM_LIBGIT2_URL, SM_LIBGIT2B, 0)
- );
-
- cl_assert(git_path_isdir("submod2/" SM_LIBGIT2B "/.git"));
- cl_assert(git_path_isfile("submod2/" SM_LIBGIT2B "/.git/HEAD"));
- cl_assert(!git_path_exists("submod2/.git/modules/" SM_LIBGIT2B));
-
- cl_git_pass(git_repository_config(&cfg, g_repo));
- cl_git_pass(
- git_config_get_string(&s, cfg, "submodule." SM_LIBGIT2B ".url"));
- cl_assert_equal_s(s, SM_LIBGIT2_URL);
- git_config_free(cfg);
-}
-
-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(&cfg, g_repo));
- cl_git_fail(git_config_get_string(&str, cfg, "submodule.sm_unchanged.url"));
- cl_git_fail(git_config_get_string(&str, cfg, "submodule.sm_changed_head.url"));
- cl_git_fail(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));
-
- git_submodule_reload_all(g_repo);
-
- /* confirm submodule data in config */
- cl_git_pass(git_repository_config(&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);
-}
-
-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(&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 */
- cl_git_pass(git_repository_config(&cfg, g_repo));
- cl_git_pass(git_config_get_string(&str, cfg, "submodule."SM1".url"));
- cl_assert_equal_s(git_submodule_url(sm1), str);
- cl_git_pass(git_config_get_string(&str, cfg, "submodule."SM2".url"));
- cl_assert_equal_s(git_submodule_url(sm2), str);
- cl_git_pass(git_config_get_string(&str, cfg, "submodule."SM3".url"));
- cl_assert_equal_s(git_submodule_url(sm3), str);
- git_config_free(cfg);
-}
-
-void test_submodule_modify__edit_and_save(void)
-{
- git_submodule *sm1, *sm2;
- char *old_url;
- git_submodule_ignore_t old_ignore;
- git_submodule_update_t old_update;
- git_repository *r2;
- int old_fetchrecurse;
-
- cl_git_pass(git_submodule_lookup(&sm1, g_repo, "sm_changed_head"));
-
- old_url = git__strdup(git_submodule_url(sm1));
-
- /* modify properties of submodule */
- cl_git_pass(git_submodule_set_url(sm1, SM_LIBGIT2_URL));
- old_ignore = git_submodule_set_ignore(sm1, GIT_SUBMODULE_IGNORE_UNTRACKED);
- old_update = git_submodule_set_update(sm1, GIT_SUBMODULE_UPDATE_REBASE);
- old_fetchrecurse = git_submodule_set_fetch_recurse_submodules(sm1, 1);
-
- cl_assert_equal_s(SM_LIBGIT2_URL, git_submodule_url(sm1));
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_IGNORE_UNTRACKED, (int)git_submodule_ignore(sm1));
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_UPDATE_REBASE, (int)git_submodule_update(sm1));
- cl_assert_equal_i(1, git_submodule_fetch_recurse_submodules(sm1));
-
- /* revert without saving (and confirm setters return old value) */
- cl_git_pass(git_submodule_set_url(sm1, old_url));
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_IGNORE_UNTRACKED,
- (int)git_submodule_set_ignore(sm1, GIT_SUBMODULE_IGNORE_RESET));
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_UPDATE_REBASE,
- (int)git_submodule_set_update(sm1, GIT_SUBMODULE_UPDATE_RESET));
- cl_assert_equal_i(
- 1, git_submodule_set_fetch_recurse_submodules(sm1, old_fetchrecurse));
-
- /* check that revert was successful */
- cl_assert_equal_s(old_url, git_submodule_url(sm1));
- cl_assert_equal_i((int)old_ignore, (int)git_submodule_ignore(sm1));
- cl_assert_equal_i((int)old_update, (int)git_submodule_update(sm1));
- cl_assert_equal_i(
- old_fetchrecurse, git_submodule_fetch_recurse_submodules(sm1));
-
- /* modify properties of submodule (again) */
- cl_git_pass(git_submodule_set_url(sm1, SM_LIBGIT2_URL));
- git_submodule_set_ignore(sm1, GIT_SUBMODULE_IGNORE_UNTRACKED);
- git_submodule_set_update(sm1, GIT_SUBMODULE_UPDATE_REBASE);
- git_submodule_set_fetch_recurse_submodules(sm1, 1);
-
- /* call save */
- cl_git_pass(git_submodule_save(sm1));
-
- /* attempt to "revert" values */
- git_submodule_set_ignore(sm1, GIT_SUBMODULE_IGNORE_RESET);
- git_submodule_set_update(sm1, GIT_SUBMODULE_UPDATE_RESET);
-
- /* but ignore and update should NOT revert because the RESET
- * should now be the newly saved value...
- */
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_IGNORE_UNTRACKED, (int)git_submodule_ignore(sm1));
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_UPDATE_REBASE, (int)git_submodule_update(sm1));
- cl_assert_equal_i(1, git_submodule_fetch_recurse_submodules(sm1));
-
- /* call reload and check that the new values are loaded */
- cl_git_pass(git_submodule_reload(sm1));
-
- cl_assert_equal_s(SM_LIBGIT2_URL, git_submodule_url(sm1));
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_IGNORE_UNTRACKED, (int)git_submodule_ignore(sm1));
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_UPDATE_REBASE, (int)git_submodule_update(sm1));
- cl_assert_equal_i(1, git_submodule_fetch_recurse_submodules(sm1));
-
- /* open a second copy of the repo and compare submodule */
- cl_git_pass(git_repository_open(&r2, "submod2"));
- cl_git_pass(git_submodule_lookup(&sm2, r2, "sm_changed_head"));
-
- cl_assert_equal_s(SM_LIBGIT2_URL, git_submodule_url(sm2));
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_IGNORE_UNTRACKED, (int)git_submodule_ignore(sm2));
- cl_assert_equal_i(
- (int)GIT_SUBMODULE_UPDATE_REBASE, (int)git_submodule_update(sm2));
- cl_assert_equal_i(1, git_submodule_fetch_recurse_submodules(sm2));
-
- git_repository_free(r2);
- git__free(old_url);
-}
diff --git a/tests-clar/submodule/status.c b/tests-clar/submodule/status.c
deleted file mode 100644
index f5111c84f..000000000
--- a/tests-clar/submodule/status.c
+++ /dev/null
@@ -1,425 +0,0 @@
-#include "clar_libgit2.h"
-#include "posix.h"
-#include "path.h"
-#include "submodule_helpers.h"
-#include "fileops.h"
-#include "iterator.h"
-
-static git_repository *g_repo = NULL;
-
-void test_submodule_status__initialize(void)
-{
- g_repo = setup_fixture_submod2();
-}
-
-void test_submodule_status__cleanup(void)
-{
-}
-
-void test_submodule_status__unchanged(void)
-{
- unsigned int status, expected;
- git_submodule *sm;
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- expected = GIT_SUBMODULE_STATUS_IN_HEAD |
- GIT_SUBMODULE_STATUS_IN_INDEX |
- GIT_SUBMODULE_STATUS_IN_CONFIG |
- GIT_SUBMODULE_STATUS_IN_WD;
-
- cl_assert(status == expected);
-}
-
-/* 4 values of GIT_SUBMODULE_IGNORE to check */
-
-void test_submodule_status__ignore_none(void)
-{
- unsigned int status;
- git_submodule *sm;
- git_buf path = GIT_BUF_INIT;
-
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(g_repo), "sm_unchanged"));
- cl_git_pass(git_futils_rmdir_r(git_buf_cstr(&path), NULL, GIT_RMDIR_REMOVE_FILES));
-
- cl_assert_equal_i(GIT_ENOTFOUND,
- git_submodule_lookup(&sm, g_repo, "just_a_dir"));
- cl_assert_equal_i(GIT_EEXISTS,
- git_submodule_lookup(&sm, g_repo, "not-submodule"));
- cl_assert_equal_i(GIT_EEXISTS,
- git_submodule_lookup(&sm, g_repo, "not"));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_index"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_file"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_untracked_file"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_UNTRACKED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_missing_commits"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_added_and_uncommited"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_ADDED) != 0);
-
- /* removed sm_unchanged for deleted workdir */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_DELETED) != 0);
-
- /* now mkdir sm_unchanged to test uninitialized */
- cl_git_pass(git_futils_mkdir(git_buf_cstr(&path), NULL, 0755, 0));
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_reload(sm));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_UNINITIALIZED) != 0);
-
- /* update sm_changed_head in index */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_git_pass(git_submodule_add_to_index(sm, true));
- /* reload is not needed because add_to_index updates the submodule data */
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_MODIFIED) != 0);
-
- /* remove sm_changed_head from index */
- {
- git_index *index;
- size_t pos;
-
- cl_git_pass(git_repository_index(&index, g_repo));
- cl_assert(!git_index_find(&pos, index, "sm_changed_head"));
- cl_git_pass(git_index_remove(index, "sm_changed_head", 0));
- cl_git_pass(git_index_write(index));
-
- git_index_free(index);
- }
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_git_pass(git_submodule_reload(sm));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_DELETED) != 0);
-
- git_buf_free(&path);
-}
-
-static int set_sm_ignore(git_submodule *sm, const char *name, void *payload)
-{
- git_submodule_ignore_t ignore = *(git_submodule_ignore_t *)payload;
- GIT_UNUSED(name);
- git_submodule_set_ignore(sm, ignore);
- return 0;
-}
-
-void test_submodule_status__ignore_untracked(void)
-{
- unsigned int status;
- git_submodule *sm;
- git_buf path = GIT_BUF_INIT;
- git_submodule_ignore_t ign = GIT_SUBMODULE_IGNORE_UNTRACKED;
-
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(g_repo), "sm_unchanged"));
- cl_git_pass(git_futils_rmdir_r(git_buf_cstr(&path), NULL, GIT_RMDIR_REMOVE_FILES));
-
- cl_git_pass(git_submodule_foreach(g_repo, set_sm_ignore, &ign));
-
- cl_git_fail(git_submodule_lookup(&sm, g_repo, "not-submodule"));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_index"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_file"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_untracked_file"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_missing_commits"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_added_and_uncommited"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_ADDED) != 0);
-
- /* removed sm_unchanged for deleted workdir */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_DELETED) != 0);
-
- /* now mkdir sm_unchanged to test uninitialized */
- cl_git_pass(git_futils_mkdir(git_buf_cstr(&path), NULL, 0755, 0));
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_reload(sm));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_UNINITIALIZED) != 0);
-
- /* update sm_changed_head in index */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_git_pass(git_submodule_add_to_index(sm, true));
- /* reload is not needed because add_to_index updates the submodule data */
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_MODIFIED) != 0);
-
- git_buf_free(&path);
-}
-
-void test_submodule_status__ignore_dirty(void)
-{
- unsigned int status;
- git_submodule *sm;
- git_buf path = GIT_BUF_INIT;
- git_submodule_ignore_t ign = GIT_SUBMODULE_IGNORE_DIRTY;
-
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(g_repo), "sm_unchanged"));
- cl_git_pass(git_futils_rmdir_r(git_buf_cstr(&path), NULL, GIT_RMDIR_REMOVE_FILES));
-
- cl_git_pass(git_submodule_foreach(g_repo, set_sm_ignore, &ign));
-
- cl_assert_equal_i(GIT_ENOTFOUND,
- git_submodule_lookup(&sm, g_repo, "just_a_dir"));
- cl_assert_equal_i(GIT_EEXISTS,
- git_submodule_lookup(&sm, g_repo, "not-submodule"));
- cl_assert_equal_i(GIT_EEXISTS,
- git_submodule_lookup(&sm, g_repo, "not"));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_index"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_file"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_untracked_file"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_missing_commits"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_added_and_uncommited"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_ADDED) != 0);
-
- /* removed sm_unchanged for deleted workdir */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_DELETED) != 0);
-
- /* now mkdir sm_unchanged to test uninitialized */
- cl_git_pass(git_futils_mkdir(git_buf_cstr(&path), NULL, 0755, 0));
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_reload(sm));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_UNINITIALIZED) != 0);
-
- /* update sm_changed_head in index */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_git_pass(git_submodule_add_to_index(sm, true));
- /* reload is not needed because add_to_index updates the submodule data */
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_MODIFIED) != 0);
-
- git_buf_free(&path);
-}
-
-void test_submodule_status__ignore_all(void)
-{
- unsigned int status;
- git_submodule *sm;
- git_buf path = GIT_BUF_INIT;
- git_submodule_ignore_t ign = GIT_SUBMODULE_IGNORE_ALL;
-
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(g_repo), "sm_unchanged"));
- cl_git_pass(git_futils_rmdir_r(git_buf_cstr(&path), NULL, GIT_RMDIR_REMOVE_FILES));
-
- cl_git_pass(git_submodule_foreach(g_repo, set_sm_ignore, &ign));
-
- cl_assert_equal_i(GIT_ENOTFOUND,
- git_submodule_lookup(&sm, g_repo, "just_a_dir"));
- cl_assert_equal_i(GIT_EEXISTS,
- git_submodule_lookup(&sm, g_repo, "not-submodule"));
- cl_assert_equal_i(GIT_EEXISTS,
- git_submodule_lookup(&sm, g_repo, "not"));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_index"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_file"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_untracked_file"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_missing_commits"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_added_and_uncommited"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- /* removed sm_unchanged for deleted workdir */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- /* now mkdir sm_unchanged to test uninitialized */
- cl_git_pass(git_futils_mkdir(git_buf_cstr(&path), NULL, 0755, 0));
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_reload(sm));
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- /* update sm_changed_head in index */
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head"));
- cl_git_pass(git_submodule_add_to_index(sm, true));
- /* reload is not needed because add_to_index updates the submodule data */
- cl_git_pass(git_submodule_status(&status, sm));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- git_buf_free(&path);
-}
-
-typedef struct {
- size_t counter;
- const char **paths;
- int *statuses;
-} submodule_expectations;
-
-static int confirm_submodule_status(
- const char *path, unsigned int status_flags, void *payload)
-{
- submodule_expectations *exp = payload;
-
- while (git__suffixcmp(exp->paths[exp->counter], "/") == 0)
- exp->counter++;
-
- cl_assert_equal_i(exp->statuses[exp->counter], (int)status_flags);
- cl_assert_equal_s(exp->paths[exp->counter++], path);
-
- GIT_UNUSED(status_flags);
-
- return 0;
-}
-
-void test_submodule_status__iterator(void)
-{
- git_iterator *iter;
- const git_index_entry *entry;
- size_t i;
- static const char *expected[] = {
- ".gitmodules",
- "just_a_dir/",
- "just_a_dir/contents",
- "just_a_file",
- "not",
- "not-submodule",
- "README.txt",
- "sm_added_and_uncommited",
- "sm_changed_file",
- "sm_changed_head",
- "sm_changed_index",
- "sm_changed_untracked_file",
- "sm_missing_commits",
- "sm_unchanged",
- NULL
- };
- static int expected_flags[] = {
- GIT_STATUS_INDEX_MODIFIED | GIT_STATUS_WT_MODIFIED, /* ".gitmodules" */
- 0, /* "just_a_dir/" will be skipped */
- GIT_STATUS_CURRENT, /* "just_a_dir/contents" */
- GIT_STATUS_CURRENT, /* "just_a_file" */
- GIT_STATUS_IGNORED, /* "not" (contains .git) */
- GIT_STATUS_IGNORED, /* "not-submodule" (contains .git) */
- GIT_STATUS_CURRENT, /* "README.txt */
- GIT_STATUS_INDEX_NEW, /* "sm_added_and_uncommited" */
- GIT_STATUS_WT_MODIFIED, /* "sm_changed_file" */
- GIT_STATUS_WT_MODIFIED, /* "sm_changed_head" */
- GIT_STATUS_WT_MODIFIED, /* "sm_changed_index" */
- GIT_STATUS_WT_MODIFIED, /* "sm_changed_untracked_file" */
- GIT_STATUS_WT_MODIFIED, /* "sm_missing_commits" */
- GIT_STATUS_CURRENT, /* "sm_unchanged" */
- 0
- };
- submodule_expectations exp = { 0, expected, expected_flags };
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
-
- cl_git_pass(git_iterator_for_workdir(&iter, g_repo,
- GIT_ITERATOR_IGNORE_CASE | GIT_ITERATOR_INCLUDE_TREES, NULL, NULL));
-
- for (i = 0; !git_iterator_advance(&entry, iter); ++i)
- cl_assert_equal_s(expected[i], entry->path);
-
- git_iterator_free(iter);
-
- opts.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED |
- GIT_STATUS_OPT_INCLUDE_UNMODIFIED |
- GIT_STATUS_OPT_INCLUDE_IGNORED |
- GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS |
- GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY;
-
- cl_git_pass(git_status_foreach_ext(
- g_repo, &opts, confirm_submodule_status, &exp));
-}
-
-void test_submodule_status__untracked_dirs_containing_ignored_files(void)
-{
- git_buf path = GIT_BUF_INIT;
- unsigned int status, expected;
- git_submodule *sm;
-
- cl_git_pass(git_buf_joinpath(&path, git_repository_path(g_repo), "modules/sm_unchanged/info/exclude"));
- cl_git_append2file(git_buf_cstr(&path), "\n*.ignored\n");
-
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(g_repo), "sm_unchanged/directory"));
- cl_git_pass(git_futils_mkdir(git_buf_cstr(&path), NULL, 0755, 0));
- cl_git_pass(git_buf_joinpath(&path, git_buf_cstr(&path), "i_am.ignored"));
- cl_git_mkfile(git_buf_cstr(&path), "ignored this file, please\n");
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged"));
- cl_git_pass(git_submodule_status(&status, sm));
-
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- expected = GIT_SUBMODULE_STATUS_IN_HEAD |
- GIT_SUBMODULE_STATUS_IN_INDEX |
- GIT_SUBMODULE_STATUS_IN_CONFIG |
- GIT_SUBMODULE_STATUS_IN_WD;
-
- cl_assert(status == expected);
-
- git_buf_free(&path);
-}
diff --git a/tests-clar/submodule/submodule_helpers.c b/tests-clar/submodule/submodule_helpers.c
deleted file mode 100644
index d5750675c..000000000
--- a/tests-clar/submodule/submodule_helpers.c
+++ /dev/null
@@ -1,127 +0,0 @@
-#include "clar_libgit2.h"
-#include "buffer.h"
-#include "path.h"
-#include "util.h"
-#include "posix.h"
-#include "submodule_helpers.h"
-#include "git2/sys/repository.h"
-
-/* rewrite gitmodules -> .gitmodules
- * rewrite the empty or relative urls inside each module
- * rename the .gitted directory inside any submodule to .git
- */
-void rewrite_gitmodules(const char *workdir)
-{
- git_buf in_f = GIT_BUF_INIT, out_f = GIT_BUF_INIT, path = GIT_BUF_INIT;
- FILE *in, *out;
- char line[256];
-
- cl_git_pass(git_buf_joinpath(&in_f, workdir, "gitmodules"));
- cl_git_pass(git_buf_joinpath(&out_f, workdir, ".gitmodules"));
-
- cl_assert((in = fopen(in_f.ptr, "r")) != NULL);
- cl_assert((out = fopen(out_f.ptr, "w")) != NULL);
-
- while (fgets(line, sizeof(line), in) != NULL) {
- char *scan = line;
-
- while (*scan == ' ' || *scan == '\t') scan++;
-
- /* rename .gitted -> .git in submodule directories */
- if (git__prefixcmp(scan, "path =") == 0) {
- scan += strlen("path =");
- while (*scan == ' ') scan++;
-
- git_buf_joinpath(&path, workdir, scan);
- git_buf_rtrim(&path);
- git_buf_joinpath(&path, path.ptr, ".gitted");
-
- if (!git_buf_oom(&path) && p_access(path.ptr, F_OK) == 0) {
- git_buf_joinpath(&out_f, workdir, scan);
- git_buf_rtrim(&out_f);
- git_buf_joinpath(&out_f, out_f.ptr, ".git");
-
- if (!git_buf_oom(&out_f))
- p_rename(path.ptr, out_f.ptr);
- }
- }
-
- /* copy non-"url =" lines verbatim */
- if (git__prefixcmp(scan, "url =") != 0) {
- fputs(line, out);
- continue;
- }
-
- /* convert relative URLs in "url =" lines */
- scan += strlen("url =");
- while (*scan == ' ') scan++;
-
- if (*scan == '.') {
- git_buf_joinpath(&path, workdir, scan);
- git_buf_rtrim(&path);
- } else if (!*scan || *scan == '\n') {
- git_buf_joinpath(&path, workdir, "../testrepo.git");
- } else {
- fputs(line, out);
- continue;
- }
-
- git_path_prettify(&path, path.ptr, NULL);
- git_buf_putc(&path, '\n');
- cl_assert(!git_buf_oom(&path));
-
- fwrite(line, scan - line, sizeof(char), out);
- fputs(path.ptr, out);
- }
-
- fclose(in);
- fclose(out);
-
- cl_must_pass(p_unlink(in_f.ptr));
-
- git_buf_free(&in_f);
- git_buf_free(&out_f);
- git_buf_free(&path);
-}
-
-static void cleanup_fixture_submodules(void *payload)
-{
- cl_git_sandbox_cleanup(); /* either "submodules" or "submod2" */
-
- if (payload)
- cl_fixture_cleanup(payload);
-}
-
-git_repository *setup_fixture_submodules(void)
-{
- git_repository *repo = cl_git_sandbox_init("submodules");
-
- cl_fixture_sandbox("testrepo.git");
-
- rewrite_gitmodules(git_repository_workdir(repo));
- p_rename("submodules/testrepo/.gitted", "submodules/testrepo/.git");
-
- cl_set_cleanup(cleanup_fixture_submodules, "testrepo.git");
-
- cl_git_pass(git_repository_reinit_filesystem(repo, 1));
-
- return repo;
-}
-
-git_repository *setup_fixture_submod2(void)
-{
- git_repository *repo = cl_git_sandbox_init("submod2");
-
- cl_fixture_sandbox("submod2_target");
- p_rename("submod2_target/.gitted", "submod2_target/.git");
-
- rewrite_gitmodules(git_repository_workdir(repo));
- p_rename("submod2/not-submodule/.gitted", "submod2/not-submodule/.git");
- p_rename("submod2/not/.gitted", "submod2/not/.git");
-
- cl_set_cleanup(cleanup_fixture_submodules, "submod2_target");
-
- cl_git_pass(git_repository_reinit_filesystem(repo, 1));
-
- return repo;
-}
diff --git a/tests-clar/submodule/submodule_helpers.h b/tests-clar/submodule/submodule_helpers.h
deleted file mode 100644
index 610c40720..000000000
--- a/tests-clar/submodule/submodule_helpers.h
+++ /dev/null
@@ -1,5 +0,0 @@
-extern void rewrite_gitmodules(const char *workdir);
-
-/* these will automatically set a cleanup callback */
-extern git_repository *setup_fixture_submodules(void);
-extern git_repository *setup_fixture_submod2(void);