summaryrefslogtreecommitdiff
path: root/tests-clar/submodule/status.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests-clar/submodule/status.c')
-rw-r--r--tests-clar/submodule/status.c414
1 files changed, 0 insertions, 414 deletions
diff --git a/tests-clar/submodule/status.c b/tests-clar/submodule/status.c
deleted file mode 100644
index 68110bdd5..000000000
--- a/tests-clar/submodule/status.c
+++ /dev/null
@@ -1,414 +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 = cl_git_sandbox_init("submod2");
-
- cl_fixture_sandbox("submod2_target");
- p_rename("submod2_target/.gitted", "submod2_target/.git");
-
- /* must create submod2_target before rewrite so prettify will work */
- rewrite_gitmodules(git_repository_workdir(g_repo));
- p_rename("submod2/not-submodule/.gitted", "submod2/not-submodule/.git");
- p_rename("submod2/not/.gitted", "submod2/not/.git");
-}
-
-void test_submodule_status__cleanup(void)
-{
- cl_git_sandbox_cleanup();
- cl_fixture_cleanup("submod2_target");
-}
-
-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;
-} 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_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
- };
- submodule_expectations exp = { 0, expected };
- 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_RECURSE_UNTRACKED_DIRS;
-
- 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);
-}