summaryrefslogtreecommitdiff
path: root/tests/submodule/status.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/submodule/status.c')
-rw-r--r--tests/submodule/status.c354
1 files changed, 0 insertions, 354 deletions
diff --git a/tests/submodule/status.c b/tests/submodule/status.c
deleted file mode 100644
index 06595cc9a..000000000
--- a/tests/submodule/status.c
+++ /dev/null
@@ -1,354 +0,0 @@
-#include "clar_libgit2.h"
-#include "posix.h"
-#include "path.h"
-#include "submodule_helpers.h"
-#include "futils.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 = get_submodule_status(g_repo, "sm_unchanged");
- unsigned int expected =
- GIT_SUBMODULE_STATUS_IN_HEAD |
- GIT_SUBMODULE_STATUS_IN_INDEX |
- GIT_SUBMODULE_STATUS_IN_CONFIG |
- GIT_SUBMODULE_STATUS_IN_WD;
-
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
- cl_assert(expected == status);
-}
-
-static void rm_submodule(const char *name)
-{
- git_buf path = GIT_BUF_INIT;
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(g_repo), name));
- cl_git_pass(git_futils_rmdir_r(path.ptr, NULL, GIT_RMDIR_REMOVE_FILES));
- git_buf_dispose(&path);
-}
-
-static void add_submodule_to_index(const char *name)
-{
- git_submodule *sm;
- cl_git_pass(git_submodule_lookup(&sm, g_repo, name));
- cl_git_pass(git_submodule_add_to_index(sm, true));
- git_submodule_free(sm);
-}
-
-static void rm_submodule_from_index(const char *name)
-{
- git_index *index;
- size_t pos;
-
- cl_git_pass(git_repository_index(&index, g_repo));
- cl_assert(!git_index_find(&pos, index, name));
- cl_git_pass(git_index_remove(index, name, 0));
- cl_git_pass(git_index_write(index));
- git_index_free(index);
-}
-
-/* 4 values of GIT_SUBMODULE_IGNORE to check */
-
-void test_submodule_status__ignore_none(void)
-{
- unsigned int status;
-
- rm_submodule("sm_unchanged");
-
- refute_submodule_exists(g_repo, "just_a_dir", GIT_ENOTFOUND);
- refute_submodule_exists(g_repo, "not-submodule", GIT_EEXISTS);
- refute_submodule_exists(g_repo, "not", GIT_EEXISTS);
-
- status = get_submodule_status(g_repo, "sm_changed_index");
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED) != 0);
-
- status = get_submodule_status(g_repo, "sm_changed_head");
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- status = get_submodule_status(g_repo, "sm_changed_file");
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_WD_MODIFIED) != 0);
-
- status = get_submodule_status(g_repo, "sm_changed_untracked_file");
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_UNTRACKED) != 0);
-
- status = get_submodule_status(g_repo, "sm_missing_commits");
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- status = get_submodule_status(g_repo, "sm_added_and_uncommited");
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_ADDED) != 0);
-
- /* removed sm_unchanged for deleted workdir */
- status = get_submodule_status(g_repo, "sm_unchanged");
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_DELETED) != 0);
-
- /* now mkdir sm_unchanged to test uninitialized */
- cl_git_pass(git_futils_mkdir_relative("sm_unchanged", "submod2", 0755, 0, NULL));
- status = get_submodule_status(g_repo, "sm_unchanged");
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_UNINITIALIZED) != 0);
-
- /* update sm_changed_head in index */
- add_submodule_to_index("sm_changed_head");
- status = get_submodule_status(g_repo, "sm_changed_head");
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_MODIFIED) != 0);
-
- /* remove sm_changed_head from index */
- rm_submodule_from_index("sm_changed_head");
- status = get_submodule_status(g_repo, "sm_changed_head");
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_DELETED) != 0);
-}
-
-void test_submodule_status__ignore_untracked(void)
-{
- unsigned int status;
- git_submodule_ignore_t ign = GIT_SUBMODULE_IGNORE_UNTRACKED;
-
- rm_submodule("sm_unchanged");
-
- refute_submodule_exists(g_repo, "just_a_dir", GIT_ENOTFOUND);
- refute_submodule_exists(g_repo, "not-submodule", GIT_EEXISTS);
- refute_submodule_exists(g_repo, "not", GIT_EEXISTS);
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_index", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_head", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_file", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_untracked_file", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_missing_commits", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_added_and_uncommited", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_ADDED) != 0);
-
- /* removed sm_unchanged for deleted workdir */
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_unchanged", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_DELETED) != 0);
-
- /* now mkdir sm_unchanged to test uninitialized */
- cl_git_pass(git_futils_mkdir_relative("sm_unchanged", "submod2", 0755, 0, NULL));
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_unchanged", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_UNINITIALIZED) != 0);
-
- /* update sm_changed_head in index */
- add_submodule_to_index("sm_changed_head");
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_head", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_MODIFIED) != 0);
-}
-
-void test_submodule_status__ignore_dirty(void)
-{
- unsigned int status;
- git_submodule_ignore_t ign = GIT_SUBMODULE_IGNORE_DIRTY;
-
- rm_submodule("sm_unchanged");
-
- refute_submodule_exists(g_repo, "just_a_dir", GIT_ENOTFOUND);
- refute_submodule_exists(g_repo, "not-submodule", GIT_EEXISTS);
- refute_submodule_exists(g_repo, "not", GIT_EEXISTS);
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_index", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_head", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_file", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_untracked_file", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_missing_commits", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_MODIFIED) != 0);
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_added_and_uncommited", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_ADDED) != 0);
-
- /* removed sm_unchanged for deleted workdir */
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_unchanged", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_DELETED) != 0);
-
- /* now mkdir sm_unchanged to test uninitialized */
- cl_git_pass(git_futils_mkdir_relative("sm_unchanged", "submod2", 0755, 0, NULL));
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_unchanged", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_WD_UNINITIALIZED) != 0);
-
- /* update sm_changed_head in index */
- add_submodule_to_index("sm_changed_head");
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_head", ign));
- cl_assert((status & GIT_SUBMODULE_STATUS_INDEX_MODIFIED) != 0);
-}
-
-void test_submodule_status__ignore_all(void)
-{
- unsigned int status;
- git_submodule_ignore_t ign = GIT_SUBMODULE_IGNORE_ALL;
-
- rm_submodule("sm_unchanged");
-
- refute_submodule_exists(g_repo, "just_a_dir", GIT_ENOTFOUND);
- refute_submodule_exists(g_repo, "not-submodule", GIT_EEXISTS);
- refute_submodule_exists(g_repo, "not", GIT_EEXISTS);
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_index", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_head", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_file", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_untracked_file", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_missing_commits", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_added_and_uncommited", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- /* removed sm_unchanged for deleted workdir */
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_unchanged", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- /* now mkdir sm_unchanged to test uninitialized */
- cl_git_pass(git_futils_mkdir_relative("sm_unchanged", "submod2", 0755, 0, NULL));
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_unchanged", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-
- /* update sm_changed_head in index */
- add_submodule_to_index("sm_changed_head");
- cl_git_pass(git_submodule_status(&status, g_repo,"sm_changed_head", ign));
- cl_assert(GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status));
-}
-
-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 (exp->statuses[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;
- git_iterator_options iter_opts = GIT_ITERATOR_OPTIONS_INIT;
- const git_index_entry *entry;
- size_t i;
- static const char *expected[] = {
- ".gitmodules",
- "just_a_dir/",
- "just_a_dir/contents",
- "just_a_file",
- "not-submodule/",
- "not-submodule/README.txt",
- "not/",
- "not/README.txt",
- "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" */
- -1, /* "just_a_dir/" will be skipped */
- GIT_STATUS_CURRENT, /* "just_a_dir/contents" */
- GIT_STATUS_CURRENT, /* "just_a_file" */
- GIT_STATUS_WT_NEW, /* "not-submodule/" untracked item */
- -1, /* "not-submodule/README.txt" */
- GIT_STATUS_WT_NEW, /* "not/" untracked item */
- -1, /* "not/README.txt" */
- 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;
- git_index *index;
-
- iter_opts.flags = GIT_ITERATOR_IGNORE_CASE | GIT_ITERATOR_INCLUDE_TREES;
-
- cl_git_pass(git_repository_index(&index, g_repo));
- cl_git_pass(git_iterator_for_workdir(&iter, g_repo, index, NULL, &iter_opts));
-
- for (i = 0; !git_iterator_advance(&entry, iter); ++i)
- cl_assert_equal_s(expected[i], entry->path);
-
- git_iterator_free(iter);
- git_index_free(index);
-
- 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)
-{
- unsigned int status, expected;
-
- cl_git_append2file(
- "submod2/.git/modules/sm_unchanged/info/exclude", "\n*.ignored\n");
-
- cl_git_pass(
- git_futils_mkdir_relative("sm_unchanged/directory", "submod2", 0755, 0, NULL));
- cl_git_mkfile(
- "submod2/sm_unchanged/directory/i_am.ignored",
- "ignore this file, please\n");
-
- status = get_submodule_status(g_repo, "sm_unchanged");
- 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);
-}