summaryrefslogtreecommitdiff
path: root/tests-clar/status
diff options
context:
space:
mode:
Diffstat (limited to 'tests-clar/status')
-rw-r--r--tests-clar/status/ignore.c582
-rw-r--r--tests-clar/status/renames.c557
-rw-r--r--tests-clar/status/single.c45
-rw-r--r--tests-clar/status/status_data.h326
-rw-r--r--tests-clar/status/status_helpers.c101
-rw-r--r--tests-clar/status/status_helpers.h39
-rw-r--r--tests-clar/status/submodules.c223
-rw-r--r--tests-clar/status/worktree.c875
-rw-r--r--tests-clar/status/worktree_init.c341
9 files changed, 0 insertions, 3089 deletions
diff --git a/tests-clar/status/ignore.c b/tests-clar/status/ignore.c
deleted file mode 100644
index acdc8fb58..000000000
--- a/tests-clar/status/ignore.c
+++ /dev/null
@@ -1,582 +0,0 @@
-#include "clar_libgit2.h"
-#include "fileops.h"
-#include "git2/attr.h"
-#include "ignore.h"
-#include "attr.h"
-#include "status_helpers.h"
-
-static git_repository *g_repo = NULL;
-
-void test_status_ignore__initialize(void)
-{
-}
-
-void test_status_ignore__cleanup(void)
-{
- cl_git_sandbox_cleanup();
-}
-
-void test_status_ignore__0(void)
-{
- struct {
- const char *path;
- int expected;
- } test_cases[] = {
- /* pattern "ign" from .gitignore */
- { "file", 0 },
- { "ign", 1 },
- { "sub", 0 },
- { "sub/file", 0 },
- { "sub/ign", 1 },
- { "sub/ign/file", 1 },
- { "sub/ign/sub", 1 },
- { "sub/ign/sub/file", 1 },
- { "sub/sub", 0 },
- { "sub/sub/file", 0 },
- { "sub/sub/ign", 1 },
- { "sub/sub/sub", 0 },
- /* pattern "dir/" from .gitignore */
- { "dir", 1 },
- { "dir/", 1 },
- { "sub/dir", 1 },
- { "sub/dir/", 1 },
- { "sub/dir/file", 1 }, /* contained in ignored parent */
- { "sub/sub/dir", 0 }, /* dir is not actually a dir, but a file */
- { NULL, 0 }
- }, *one_test;
-
- g_repo = cl_git_sandbox_init("attr");
-
- for (one_test = test_cases; one_test->path != NULL; one_test++) {
- int ignored;
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, one_test->path));
- cl_assert_(ignored == one_test->expected, one_test->path);
- }
-
- /* confirm that ignore files were cached */
- cl_assert(git_attr_cache__is_cached(g_repo, 0, ".git/info/exclude"));
- cl_assert(git_attr_cache__is_cached(g_repo, 0, ".gitignore"));
-}
-
-
-void test_status_ignore__1(void)
-{
- int ignored;
-
- g_repo = cl_git_sandbox_init("attr");
-
- cl_git_rewritefile("attr/.gitignore", "/*.txt\n/dir/\n");
- git_attr_cache_flush(g_repo);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "root_test4.txt"));
- cl_assert(ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "sub/subdir_test2.txt"));
- cl_assert(!ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "dir"));
- cl_assert(ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "dir/"));
- cl_assert(ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "sub/dir"));
- cl_assert(!ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "sub/dir/"));
- cl_assert(!ignored);
-}
-
-
-void test_status_ignore__empty_repo_with_gitignore_rewrite(void)
-{
- status_entry_single st;
- int ignored;
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_mkfile(
- "empty_standard_repo/look-ma.txt", "I'm going to be ignored!");
-
- memset(&st, 0, sizeof(st));
- cl_git_pass(git_status_foreach(g_repo, cb_status__single, &st));
- cl_assert(st.count == 1);
- cl_assert(st.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_file(&st.status, g_repo, "look-ma.txt"));
- cl_assert(st.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "look-ma.txt"));
- cl_assert(!ignored);
-
- cl_git_rewritefile("empty_standard_repo/.gitignore", "*.nomatch\n");
-
- memset(&st, 0, sizeof(st));
- cl_git_pass(git_status_foreach(g_repo, cb_status__single, &st));
- cl_assert(st.count == 2);
- cl_assert(st.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_file(&st.status, g_repo, "look-ma.txt"));
- cl_assert(st.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "look-ma.txt"));
- cl_assert(!ignored);
-
- cl_git_rewritefile("empty_standard_repo/.gitignore", "*.txt\n");
-
- memset(&st, 0, sizeof(st));
- cl_git_pass(git_status_foreach(g_repo, cb_status__single, &st));
- cl_assert(st.count == 2);
- cl_assert(st.status == GIT_STATUS_IGNORED);
-
- cl_git_pass(git_status_file(&st.status, g_repo, "look-ma.txt"));
- cl_assert(st.status == GIT_STATUS_IGNORED);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "look-ma.txt"));
- cl_assert(ignored);
-}
-
-void test_status_ignore__ignore_pattern_contains_space(void)
-{
- unsigned int flags;
- const mode_t mode = 0777;
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
- cl_git_rewritefile("empty_standard_repo/.gitignore", "foo bar.txt\n");
-
- cl_git_mkfile(
- "empty_standard_repo/foo bar.txt", "I'm going to be ignored!");
-
- cl_git_pass(git_status_file(&flags, g_repo, "foo bar.txt"));
- cl_assert(flags == GIT_STATUS_IGNORED);
-
- cl_git_pass(git_futils_mkdir_r("empty_standard_repo/foo", NULL, mode));
- cl_git_mkfile("empty_standard_repo/foo/look-ma.txt", "I'm not going to be ignored!");
-
- cl_git_pass(git_status_file(&flags, g_repo, "foo/look-ma.txt"));
- cl_assert(flags == GIT_STATUS_WT_NEW);
-}
-
-void test_status_ignore__ignore_pattern_ignorecase(void)
-{
- unsigned int flags;
- bool ignore_case;
- git_index *index;
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
- cl_git_rewritefile("empty_standard_repo/.gitignore", "a.txt\n");
-
- cl_git_mkfile("empty_standard_repo/A.txt", "Differs in case");
-
- cl_git_pass(git_repository_index(&index, g_repo));
- ignore_case = (git_index_caps(index) & GIT_INDEXCAP_IGNORE_CASE) != 0;
- git_index_free(index);
-
- cl_git_pass(git_status_file(&flags, g_repo, "A.txt"));
- cl_assert(flags == ignore_case ? GIT_STATUS_IGNORED : GIT_STATUS_WT_NEW);
-}
-
-void test_status_ignore__subdirectories(void)
-{
- status_entry_single st;
- int ignored;
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_mkfile(
- "empty_standard_repo/ignore_me", "I'm going to be ignored!");
-
- cl_git_rewritefile("empty_standard_repo/.gitignore", "ignore_me\n");
-
- memset(&st, 0, sizeof(st));
- cl_git_pass(git_status_foreach(g_repo, cb_status__single, &st));
- cl_assert_equal_i(2, st.count);
- cl_assert(st.status == GIT_STATUS_IGNORED);
-
- cl_git_pass(git_status_file(&st.status, g_repo, "ignore_me"));
- cl_assert(st.status == GIT_STATUS_IGNORED);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "ignore_me"));
- cl_assert(ignored);
-
- /* I've changed libgit2 so that the behavior here now differs from
- * core git but seems to make more sense. In core git, the following
- * items are skipped completed, even if --ignored is passed to status.
- * It you mirror these steps and run "git status -uall --ignored" then
- * you will not see "test/ignore_me/" in the results.
- *
- * However, we had a couple reports of this as a bug, plus there is a
- * similar circumstance where we were differing for core git when you
- * used a rooted path for an ignore, so I changed this behavior.
- */
- cl_git_pass(git_futils_mkdir_r(
- "empty_standard_repo/test/ignore_me", NULL, 0775));
- cl_git_mkfile(
- "empty_standard_repo/test/ignore_me/file", "I'm going to be ignored!");
- cl_git_mkfile(
- "empty_standard_repo/test/ignore_me/file2", "Me, too!");
-
- memset(&st, 0, sizeof(st));
- cl_git_pass(git_status_foreach(g_repo, cb_status__single, &st));
- cl_assert_equal_i(3, st.count);
-
- cl_git_pass(git_status_file(&st.status, g_repo, "test/ignore_me/file"));
- cl_assert(st.status == GIT_STATUS_IGNORED);
-
- cl_git_pass(
- git_status_should_ignore(&ignored, g_repo, "test/ignore_me/file"));
- cl_assert(ignored);
-}
-
-void test_status_ignore__subdirectories_recursion(void)
-{
- /* Let's try again with recursing into ignored dirs turned on */
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- status_entry_counts counts;
- static const char *paths_r[] = {
- ".gitignore",
- "ignore_also/file",
- "ignore_me",
- "test/ignore_me/and_me/file",
- "test/ignore_me/file",
- "test/ignore_me/file2",
- };
- static const unsigned int statuses_r[] = {
- GIT_STATUS_WT_NEW,
- GIT_STATUS_IGNORED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_IGNORED,
- };
- static const char *paths_nr[] = {
- ".gitignore",
- "ignore_also/",
- "ignore_me",
- "test/ignore_me/",
- };
- static const unsigned int statuses_nr[] = {
- GIT_STATUS_WT_NEW,
- GIT_STATUS_IGNORED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_IGNORED,
- };
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_rewritefile("empty_standard_repo/.gitignore", "ignore_me\n/ignore_also\n");
-
- cl_git_mkfile(
- "empty_standard_repo/ignore_me", "I'm going to be ignored!");
- cl_git_pass(git_futils_mkdir_r(
- "empty_standard_repo/test/ignore_me", NULL, 0775));
- cl_git_mkfile(
- "empty_standard_repo/test/ignore_me/file", "I'm going to be ignored!");
- cl_git_mkfile(
- "empty_standard_repo/test/ignore_me/file2", "Me, too!");
- cl_git_pass(git_futils_mkdir_r(
- "empty_standard_repo/test/ignore_me/and_me", NULL, 0775));
- cl_git_mkfile(
- "empty_standard_repo/test/ignore_me/and_me/file", "Deeply ignored");
- cl_git_pass(git_futils_mkdir_r(
- "empty_standard_repo/ignore_also", NULL, 0775));
- cl_git_mkfile(
- "empty_standard_repo/ignore_also/file", "I'm going to be ignored!");
-
- memset(&counts, 0x0, sizeof(status_entry_counts));
- counts.expected_entry_count = 6;
- counts.expected_paths = paths_r;
- counts.expected_statuses = statuses_r;
-
- opts.flags = GIT_STATUS_OPT_DEFAULTS | GIT_STATUS_OPT_RECURSE_IGNORED_DIRS;
-
- cl_git_pass(git_status_foreach_ext(
- g_repo, &opts, cb_status__normal, &counts));
-
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-
-
- memset(&counts, 0x0, sizeof(status_entry_counts));
- counts.expected_entry_count = 4;
- counts.expected_paths = paths_nr;
- counts.expected_statuses = statuses_nr;
-
- opts.flags = GIT_STATUS_OPT_DEFAULTS;
-
- cl_git_pass(git_status_foreach_ext(
- g_repo, &opts, cb_status__normal, &counts));
-
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-}
-
-void test_status_ignore__adding_internal_ignores(void)
-{
- int ignored;
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "one.txt"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "two.bar"));
- cl_assert(!ignored);
-
- cl_git_pass(git_ignore_add_rule(g_repo, "*.nomatch\n"));
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "one.txt"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "two.bar"));
- cl_assert(!ignored);
-
- cl_git_pass(git_ignore_add_rule(g_repo, "*.txt\n"));
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "one.txt"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "two.bar"));
- cl_assert(!ignored);
-
- cl_git_pass(git_ignore_add_rule(g_repo, "*.bar\n"));
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "one.txt"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "two.bar"));
- cl_assert(ignored);
-
- cl_git_pass(git_ignore_clear_internal_rules(g_repo));
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "one.txt"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "two.bar"));
- cl_assert(!ignored);
-
- cl_git_pass(git_ignore_add_rule(
- g_repo, "multiple\n*.rules\n# comment line\n*.bar\n"));
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "one.txt"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "two.bar"));
- cl_assert(ignored);
-}
-
-void test_status_ignore__add_internal_as_first_thing(void)
-{
- int ignored;
- const char *add_me = "\n#################\n## Eclipse\n#################\n\n*.pydevproject\n.project\n.metadata\nbin/\ntmp/\n*.tmp\n\n";
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_pass(git_ignore_add_rule(g_repo, add_me));
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "one.tmp"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "two.bar"));
- cl_assert(!ignored);
-}
-
-void test_status_ignore__internal_ignores_inside_deep_paths(void)
-{
- int ignored;
- const char *add_me = "Debug\nthis/is/deep\npatterned*/dir\n";
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_pass(git_ignore_add_rule(g_repo, add_me));
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "Debug"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "and/Debug"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "really/Debug/this/file"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "Debug/what/I/say"));
- cl_assert(ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "and/NoDebug"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "NoDebug/this"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "please/NoDebug/this"));
- cl_assert(!ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "this/is/deep"));
- cl_assert(ignored);
- /* pattern containing slash gets FNM_PATHNAME so all slashes must match */
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "and/this/is/deep"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "this/is/deep/too"));
- cl_assert(ignored);
- /* pattern containing slash gets FNM_PATHNAME so all slashes must match */
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "but/this/is/deep/and/ignored"));
- cl_assert(!ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "this/is/not/deep"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "is/this/not/as/deep"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "this/is/deepish"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "xthis/is/deep"));
- cl_assert(!ignored);
-}
-
-void test_status_ignore__automatically_ignore_bad_files(void)
-{
- int ignored;
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, ".git"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "this/file/."));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "path/../funky"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "path/whatever.c"));
- cl_assert(!ignored);
-
- cl_git_pass(git_ignore_add_rule(g_repo, "*.c\n"));
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, ".git"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "this/file/."));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "path/../funky"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "path/whatever.c"));
- cl_assert(ignored);
-
- cl_git_pass(git_ignore_clear_internal_rules(g_repo));
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, ".git"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "this/file/."));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "path/../funky"));
- cl_assert(ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "path/whatever.c"));
- cl_assert(!ignored);
-}
-
-void test_status_ignore__filenames_with_special_prefixes_do_not_interfere_with_status_retrieval(void)
-{
- status_entry_single st;
- char *test_cases[] = {
- "!file",
- "#blah",
- "[blah]",
- "[attr]",
- "[attr]blah",
- NULL
- };
- int i;
-
- for (i = 0; *(test_cases + i) != NULL; i++) {
- git_buf file = GIT_BUF_INIT;
- char *file_name = *(test_cases + i);
- git_repository *repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_pass(git_buf_joinpath(&file, "empty_standard_repo", file_name));
- cl_git_mkfile(git_buf_cstr(&file), "Please don't ignore me!");
-
- memset(&st, 0, sizeof(st));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &st));
- cl_assert(st.count == 1);
- cl_assert(st.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_file(&st.status, repo, file_name));
- cl_assert(st.status == GIT_STATUS_WT_NEW);
-
- cl_git_sandbox_cleanup();
- git_buf_free(&file);
- }
-}
-
-void test_status_ignore__issue_1766_negated_ignores(void)
-{
- int ignored = 0;
- unsigned int status;
-
- g_repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_pass(git_futils_mkdir_r(
- "empty_standard_repo/a", NULL, 0775));
- cl_git_mkfile(
- "empty_standard_repo/a/.gitignore", "*\n!.gitignore\n");
- cl_git_mkfile(
- "empty_standard_repo/a/ignoreme", "I should be ignored\n");
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "a/.gitignore"));
- cl_assert(!ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "a/ignoreme"));
- cl_assert(ignored);
-
- cl_git_pass(git_futils_mkdir_r(
- "empty_standard_repo/b", NULL, 0775));
- cl_git_mkfile(
- "empty_standard_repo/b/.gitignore", "*\n!.gitignore\n");
- cl_git_mkfile(
- "empty_standard_repo/b/ignoreme", "I should be ignored\n");
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "b/.gitignore"));
- cl_assert(!ignored);
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "b/ignoreme"));
- cl_assert(ignored);
-
- /* shouldn't have changed results from first couple either */
-
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "a/.gitignore"));
- cl_assert(!ignored);
- cl_git_pass(git_status_should_ignore(&ignored, g_repo, "a/ignoreme"));
- cl_assert(ignored);
-
- /* status should find the two ignore files and nothing else */
-
- cl_git_pass(git_status_file(&status, g_repo, "a/.gitignore"));
- cl_assert_equal_i(GIT_STATUS_WT_NEW, (int)status);
-
- cl_git_pass(git_status_file(&status, g_repo, "a/ignoreme"));
- cl_assert_equal_i(GIT_STATUS_IGNORED, (int)status);
-
- cl_git_pass(git_status_file(&status, g_repo, "b/.gitignore"));
- cl_assert_equal_i(GIT_STATUS_WT_NEW, (int)status);
-
- cl_git_pass(git_status_file(&status, g_repo, "b/ignoreme"));
- cl_assert_equal_i(GIT_STATUS_IGNORED, (int)status);
-
- {
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- status_entry_counts counts;
- static const char *paths[] = {
- "a/.gitignore",
- "a/ignoreme",
- "b/.gitignore",
- "b/ignoreme",
- };
- static const unsigned int statuses[] = {
- GIT_STATUS_WT_NEW,
- GIT_STATUS_IGNORED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_IGNORED,
- };
-
- memset(&counts, 0x0, sizeof(status_entry_counts));
- counts.expected_entry_count = 4;
- counts.expected_paths = paths;
- counts.expected_statuses = statuses;
-
- opts.flags = GIT_STATUS_OPT_DEFAULTS;
-
- cl_git_pass(git_status_foreach_ext(
- g_repo, &opts, cb_status__normal, &counts));
-
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
- }
-}
-
diff --git a/tests-clar/status/renames.c b/tests-clar/status/renames.c
deleted file mode 100644
index 16fd02676..000000000
--- a/tests-clar/status/renames.c
+++ /dev/null
@@ -1,557 +0,0 @@
-#include "clar_libgit2.h"
-#include "buffer.h"
-#include "path.h"
-#include "posix.h"
-#include "status_helpers.h"
-#include "util.h"
-#include "status.h"
-
-static git_repository *g_repo = NULL;
-
-void test_status_renames__initialize(void)
-{
- g_repo = cl_git_sandbox_init("renames");
-
- cl_repo_set_bool(g_repo, "core.autocrlf", false);
-}
-
-void test_status_renames__cleanup(void)
-{
- cl_git_sandbox_cleanup();
-}
-
-static void rename_file(git_repository *repo, const char *oldname, const char *newname)
-{
- git_buf oldpath = GIT_BUF_INIT, newpath = GIT_BUF_INIT;
-
- git_buf_joinpath(&oldpath, git_repository_workdir(repo), oldname);
- git_buf_joinpath(&newpath, git_repository_workdir(repo), newname);
-
- cl_git_pass(p_rename(oldpath.ptr, newpath.ptr));
-
- git_buf_free(&oldpath);
- git_buf_free(&newpath);
-}
-
-static void rename_and_edit_file(git_repository *repo, const char *oldname, const char *newname)
-{
- git_buf oldpath = GIT_BUF_INIT, newpath = GIT_BUF_INIT;
-
- git_buf_joinpath(&oldpath, git_repository_workdir(repo), oldname);
- git_buf_joinpath(&newpath, git_repository_workdir(repo), newname);
-
- cl_git_pass(p_rename(oldpath.ptr, newpath.ptr));
- cl_git_append2file(newpath.ptr, "Added at the end to keep similarity!");
-
- git_buf_free(&oldpath);
- git_buf_free(&newpath);
-}
-
-struct status_entry {
- git_status_t status;
- const char *oldname;
- const char *newname;
-};
-
-static void test_status(
- git_status_list *status_list,
- struct status_entry *expected_list,
- size_t expected_len)
-{
- const git_status_entry *actual;
- const struct status_entry *expected;
- const char *oldname, *newname;
- size_t i;
-
- cl_assert_equal_sz(expected_len, git_status_list_entrycount(status_list));
-
- for (i = 0; i < expected_len; i++) {
- actual = git_status_byindex(status_list, i);
- expected = &expected_list[i];
-
- oldname = actual->head_to_index ? actual->head_to_index->old_file.path :
- actual->index_to_workdir ? actual->index_to_workdir->old_file.path : NULL;
-
- newname = actual->index_to_workdir ? actual->index_to_workdir->new_file.path :
- actual->head_to_index ? actual->head_to_index->new_file.path : NULL;
-
- cl_assert_equal_i_fmt(expected->status, actual->status, "%04x");
-
- if (oldname)
- cl_assert(git__strcmp(oldname, expected->oldname) == 0);
- else
- cl_assert(expected->oldname == NULL);
-
- if (newname)
- cl_assert(git__strcmp(newname, expected->newname) == 0);
- else
- cl_assert(expected->newname == NULL);
- }
-}
-
-void test_status_renames__head2index_one(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_INDEX_RENAMED, "ikeepsix.txt", "newname.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
-
- cl_git_pass(git_repository_index(&index, g_repo));
-
- rename_file(g_repo, "ikeepsix.txt", "newname.txt");
-
- cl_git_pass(git_index_remove_bypath(index, "ikeepsix.txt"));
- cl_git_pass(git_index_add_bypath(index, "newname.txt"));
- cl_git_pass(git_index_write(index));
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 1);
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-void test_status_renames__head2index_two(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_INDEX_MODIFIED,
- "sixserving.txt", "aaa.txt" },
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_INDEX_MODIFIED,
- "untimely.txt", "bbb.txt" },
- { GIT_STATUS_INDEX_RENAMED, "songof7cities.txt", "ccc.txt" },
- { GIT_STATUS_INDEX_RENAMED, "ikeepsix.txt", "ddd.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
-
- cl_git_pass(git_repository_index(&index, g_repo));
-
- rename_file(g_repo, "ikeepsix.txt", "ddd.txt");
- rename_and_edit_file(g_repo, "sixserving.txt", "aaa.txt");
- rename_file(g_repo, "songof7cities.txt", "ccc.txt");
- rename_and_edit_file(g_repo, "untimely.txt", "bbb.txt");
-
- cl_git_pass(git_index_remove_bypath(index, "ikeepsix.txt"));
- cl_git_pass(git_index_remove_bypath(index, "sixserving.txt"));
- cl_git_pass(git_index_remove_bypath(index, "songof7cities.txt"));
- cl_git_pass(git_index_remove_bypath(index, "untimely.txt"));
- cl_git_pass(git_index_add_bypath(index, "ddd.txt"));
- cl_git_pass(git_index_add_bypath(index, "aaa.txt"));
- cl_git_pass(git_index_add_bypath(index, "ccc.txt"));
- cl_git_pass(git_index_add_bypath(index, "bbb.txt"));
- cl_git_pass(git_index_write(index));
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 4);
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-void test_status_renames__head2index_no_rename_from_rewrite(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_INDEX_MODIFIED, "ikeepsix.txt", "ikeepsix.txt" },
- { GIT_STATUS_INDEX_MODIFIED, "sixserving.txt", "sixserving.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
-
- cl_git_pass(git_repository_index(&index, g_repo));
-
- rename_file(g_repo, "ikeepsix.txt", "_temp_.txt");
- rename_file(g_repo, "sixserving.txt", "ikeepsix.txt");
- rename_file(g_repo, "_temp_.txt", "sixserving.txt");
-
- cl_git_pass(git_index_add_bypath(index, "ikeepsix.txt"));
- cl_git_pass(git_index_add_bypath(index, "sixserving.txt"));
- cl_git_pass(git_index_write(index));
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 2);
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-void test_status_renames__head2index_rename_from_rewrite(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_INDEX_RENAMED, "sixserving.txt", "ikeepsix.txt" },
- { GIT_STATUS_INDEX_RENAMED, "ikeepsix.txt", "sixserving.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
- opts.flags |= GIT_STATUS_OPT_RENAMES_FROM_REWRITES;
-
- cl_git_pass(git_repository_index(&index, g_repo));
-
- rename_file(g_repo, "ikeepsix.txt", "_temp_.txt");
- rename_file(g_repo, "sixserving.txt", "ikeepsix.txt");
- rename_file(g_repo, "_temp_.txt", "sixserving.txt");
-
- cl_git_pass(git_index_add_bypath(index, "ikeepsix.txt"));
- cl_git_pass(git_index_add_bypath(index, "sixserving.txt"));
- cl_git_pass(git_index_write(index));
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 2);
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-void test_status_renames__index2workdir_one(void)
-{
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_WT_RENAMED, "ikeepsix.txt", "newname.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_INCLUDE_UNTRACKED;
- opts.flags |= GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR;
-
- rename_file(g_repo, "ikeepsix.txt", "newname.txt");
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 1);
- git_status_list_free(statuslist);
-}
-
-void test_status_renames__index2workdir_two(void)
-{
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_WT_RENAMED | GIT_STATUS_WT_MODIFIED,
- "sixserving.txt", "aaa.txt" },
- { GIT_STATUS_WT_RENAMED | GIT_STATUS_WT_MODIFIED,
- "untimely.txt", "bbb.txt" },
- { GIT_STATUS_WT_RENAMED, "songof7cities.txt", "ccc.txt" },
- { GIT_STATUS_WT_RENAMED, "ikeepsix.txt", "ddd.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_INCLUDE_UNTRACKED;
- opts.flags |= GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR;
-
- rename_file(g_repo, "ikeepsix.txt", "ddd.txt");
- rename_and_edit_file(g_repo, "sixserving.txt", "aaa.txt");
- rename_file(g_repo, "songof7cities.txt", "ccc.txt");
- rename_and_edit_file(g_repo, "untimely.txt", "bbb.txt");
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 4);
- git_status_list_free(statuslist);
-}
-
-void test_status_renames__index2workdir_rename_from_rewrite(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_WT_RENAMED, "sixserving.txt", "ikeepsix.txt" },
- { GIT_STATUS_WT_RENAMED, "ikeepsix.txt", "sixserving.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR;
- opts.flags |= GIT_STATUS_OPT_RENAMES_FROM_REWRITES;
-
- cl_git_pass(git_repository_index(&index, g_repo));
-
- rename_file(g_repo, "ikeepsix.txt", "_temp_.txt");
- rename_file(g_repo, "sixserving.txt", "ikeepsix.txt");
- rename_file(g_repo, "_temp_.txt", "sixserving.txt");
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 2);
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-void test_status_renames__both_one(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_WT_RENAMED,
- "ikeepsix.txt", "newname-workdir.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_INCLUDE_UNTRACKED;
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
- opts.flags |= GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR;
-
- cl_git_pass(git_repository_index(&index, g_repo));
-
- rename_file(g_repo, "ikeepsix.txt", "newname-index.txt");
-
- cl_git_pass(git_index_remove_bypath(index, "ikeepsix.txt"));
- cl_git_pass(git_index_add_bypath(index, "newname-index.txt"));
- cl_git_pass(git_index_write(index));
-
- rename_file(g_repo, "newname-index.txt", "newname-workdir.txt");
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 1);
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-void test_status_renames__both_two(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_INDEX_MODIFIED |
- GIT_STATUS_WT_RENAMED | GIT_STATUS_WT_MODIFIED,
- "ikeepsix.txt", "ikeepsix-both.txt" },
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_INDEX_MODIFIED,
- "sixserving.txt", "sixserving-index.txt" },
- { GIT_STATUS_WT_RENAMED | GIT_STATUS_WT_MODIFIED,
- "songof7cities.txt", "songof7cities-workdir.txt" },
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_WT_RENAMED,
- "untimely.txt", "untimely-both.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_INCLUDE_UNTRACKED;
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
- opts.flags |= GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR;
-
- cl_git_pass(git_repository_index(&index, g_repo));
-
- rename_and_edit_file(g_repo, "ikeepsix.txt", "ikeepsix-index.txt");
- rename_and_edit_file(g_repo, "sixserving.txt", "sixserving-index.txt");
- rename_file(g_repo, "untimely.txt", "untimely-index.txt");
-
- cl_git_pass(git_index_remove_bypath(index, "ikeepsix.txt"));
- cl_git_pass(git_index_remove_bypath(index, "sixserving.txt"));
- cl_git_pass(git_index_remove_bypath(index, "untimely.txt"));
- cl_git_pass(git_index_add_bypath(index, "ikeepsix-index.txt"));
- cl_git_pass(git_index_add_bypath(index, "sixserving-index.txt"));
- cl_git_pass(git_index_add_bypath(index, "untimely-index.txt"));
- cl_git_pass(git_index_write(index));
-
- rename_and_edit_file(g_repo, "ikeepsix-index.txt", "ikeepsix-both.txt");
- rename_and_edit_file(g_repo, "songof7cities.txt", "songof7cities-workdir.txt");
- rename_file(g_repo, "untimely-index.txt", "untimely-both.txt");
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 4);
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-
-void test_status_renames__both_rename_from_rewrite(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_WT_RENAMED,
- "songof7cities.txt", "ikeepsix.txt" },
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_WT_RENAMED,
- "ikeepsix.txt", "sixserving.txt" },
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_WT_RENAMED,
- "sixserving.txt", "songof7cities.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_INCLUDE_UNTRACKED;
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
- opts.flags |= GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR;
- opts.flags |= GIT_STATUS_OPT_RENAMES_FROM_REWRITES;
-
- cl_git_pass(git_repository_index(&index, g_repo));
-
- rename_file(g_repo, "ikeepsix.txt", "_temp_.txt");
- rename_file(g_repo, "sixserving.txt", "ikeepsix.txt");
- rename_file(g_repo, "songof7cities.txt", "sixserving.txt");
- rename_file(g_repo, "_temp_.txt", "songof7cities.txt");
-
- cl_git_pass(git_index_add_bypath(index, "ikeepsix.txt"));
- cl_git_pass(git_index_add_bypath(index, "sixserving.txt"));
- cl_git_pass(git_index_add_bypath(index, "songof7cities.txt"));
- cl_git_pass(git_index_write(index));
-
- rename_file(g_repo, "songof7cities.txt", "_temp_.txt");
- rename_file(g_repo, "ikeepsix.txt", "songof7cities.txt");
- rename_file(g_repo, "sixserving.txt", "ikeepsix.txt");
- rename_file(g_repo, "_temp_.txt", "sixserving.txt");
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 3);
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-void test_status_renames__rewrites_only_for_renames(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- struct status_entry expected[] = {
- { GIT_STATUS_WT_MODIFIED, "ikeepsix.txt", "ikeepsix.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_INCLUDE_UNTRACKED;
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
- opts.flags |= GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR;
- opts.flags |= GIT_STATUS_OPT_RENAMES_FROM_REWRITES;
-
- cl_git_pass(git_repository_index(&index, g_repo));
-
- cl_git_rewritefile("renames/ikeepsix.txt",
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n" \
- "This is enough content for the file to be rewritten.\n");
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
- test_status(statuslist, expected, 1);
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-void test_status_renames__both_casechange_one(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- int index_caps;
- struct status_entry expected_icase[] = {
- { GIT_STATUS_INDEX_RENAMED,
- "ikeepsix.txt", "IKeepSix.txt" },
- };
- struct status_entry expected_case[] = {
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_WT_RENAMED,
- "ikeepsix.txt", "IKEEPSIX.txt" },
- };
-
- opts.flags |= GIT_STATUS_OPT_INCLUDE_UNTRACKED;
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
- opts.flags |= GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR;
-
- cl_git_pass(git_repository_index(&index, g_repo));
- index_caps = git_index_caps(index);
-
- rename_file(g_repo, "ikeepsix.txt", "IKeepSix.txt");
-
- cl_git_pass(git_index_remove_bypath(index, "ikeepsix.txt"));
- cl_git_pass(git_index_add_bypath(index, "IKeepSix.txt"));
- cl_git_pass(git_index_write(index));
-
- /* on a case-insensitive file system, this change won't matter.
- * on a case-sensitive one, it will.
- */
- rename_file(g_repo, "IKeepSix.txt", "IKEEPSIX.txt");
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
-
- test_status(statuslist, (index_caps & GIT_INDEXCAP_IGNORE_CASE) ?
- expected_icase : expected_case, 1);
-
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
-
-void test_status_renames__both_casechange_two(void)
-{
- git_index *index;
- git_status_list *statuslist;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- int index_caps;
- struct status_entry expected_icase[] = {
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_INDEX_MODIFIED |
- GIT_STATUS_WT_MODIFIED,
- "ikeepsix.txt", "IKeepSix.txt" },
- { GIT_STATUS_INDEX_MODIFIED,
- "sixserving.txt", "sixserving.txt" },
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_WT_MODIFIED,
- "songof7cities.txt", "songof7.txt" },
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_WT_RENAMED,
- "untimely.txt", "untimeliest.txt" }
- };
- struct status_entry expected_case[] = {
- { GIT_STATUS_INDEX_RENAMED |
- GIT_STATUS_WT_MODIFIED | GIT_STATUS_WT_RENAMED,
- "songof7cities.txt", "SONGOF7.txt" },
- { GIT_STATUS_INDEX_MODIFIED | GIT_STATUS_WT_RENAMED,
- "sixserving.txt", "SixServing.txt" },
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_INDEX_MODIFIED |
- GIT_STATUS_WT_RENAMED | GIT_STATUS_WT_MODIFIED,
- "ikeepsix.txt", "ikeepsix.txt" },
- { GIT_STATUS_INDEX_RENAMED | GIT_STATUS_WT_RENAMED,
- "untimely.txt", "untimeliest.txt" }
- };
-
- opts.flags |= GIT_STATUS_OPT_INCLUDE_UNTRACKED;
- opts.flags |= GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX;
- opts.flags |= GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR;
-
- cl_git_pass(git_repository_index(&index, g_repo));
- index_caps = git_index_caps(index);
-
- rename_and_edit_file(g_repo, "ikeepsix.txt", "IKeepSix.txt");
- rename_and_edit_file(g_repo, "sixserving.txt", "sixserving.txt");
- rename_file(g_repo, "songof7cities.txt", "songof7.txt");
- rename_file(g_repo, "untimely.txt", "untimelier.txt");
-
- cl_git_pass(git_index_remove_bypath(index, "ikeepsix.txt"));
- cl_git_pass(git_index_remove_bypath(index, "sixserving.txt"));
- cl_git_pass(git_index_remove_bypath(index, "songof7cities.txt"));
- cl_git_pass(git_index_remove_bypath(index, "untimely.txt"));
- cl_git_pass(git_index_add_bypath(index, "IKeepSix.txt"));
- cl_git_pass(git_index_add_bypath(index, "sixserving.txt"));
- cl_git_pass(git_index_add_bypath(index, "songof7.txt"));
- cl_git_pass(git_index_add_bypath(index, "untimelier.txt"));
- cl_git_pass(git_index_write(index));
-
- rename_and_edit_file(g_repo, "IKeepSix.txt", "ikeepsix.txt");
- rename_file(g_repo, "sixserving.txt", "SixServing.txt");
- rename_and_edit_file(g_repo, "songof7.txt", "SONGOF7.txt");
- rename_file(g_repo, "untimelier.txt", "untimeliest.txt");
-
- cl_git_pass(git_status_list_new(&statuslist, g_repo, &opts));
-
- test_status(statuslist, (index_caps & GIT_INDEXCAP_IGNORE_CASE) ?
- expected_icase : expected_case, 4);
-
- git_status_list_free(statuslist);
-
- git_index_free(index);
-}
diff --git a/tests-clar/status/single.c b/tests-clar/status/single.c
deleted file mode 100644
index 292c9120a..000000000
--- a/tests-clar/status/single.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "clar_libgit2.h"
-#include "posix.h"
-
-static void
-cleanup__remove_file(void *_file)
-{
- cl_must_pass(p_unlink((char *)_file));
-}
-
-/* test retrieving OID from a file apart from the ODB */
-void test_status_single__hash_single_file(void)
-{
- static const char file_name[] = "new_file";
- static const char file_contents[] = "new_file\n";
- static const char file_hash[] = "d4fa8600b4f37d7516bef4816ae2c64dbf029e3a";
-
- git_oid expected_id, actual_id;
-
- /* initialization */
- git_oid_fromstr(&expected_id, file_hash);
- cl_git_mkfile(file_name, file_contents);
- cl_set_cleanup(&cleanup__remove_file, (void *)file_name);
-
- cl_git_pass(git_odb_hashfile(&actual_id, file_name, GIT_OBJ_BLOB));
- cl_assert(git_oid_cmp(&expected_id, &actual_id) == 0);
-}
-
-/* test retrieving OID from an empty file apart from the ODB */
-void test_status_single__hash_single_empty_file(void)
-{
- static const char file_name[] = "new_empty_file";
- static const char file_contents[] = "";
- static const char file_hash[] = "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391";
-
- git_oid expected_id, actual_id;
-
- /* initialization */
- git_oid_fromstr(&expected_id, file_hash);
- cl_git_mkfile(file_name, file_contents);
- cl_set_cleanup(&cleanup__remove_file, (void *)file_name);
-
- cl_git_pass(git_odb_hashfile(&actual_id, file_name, GIT_OBJ_BLOB));
- cl_assert(git_oid_cmp(&expected_id, &actual_id) == 0);
-}
-
diff --git a/tests-clar/status/status_data.h b/tests-clar/status/status_data.h
deleted file mode 100644
index 8ad4235fd..000000000
--- a/tests-clar/status/status_data.h
+++ /dev/null
@@ -1,326 +0,0 @@
-#include "status_helpers.h"
-
-// A utf-8 string with 83 characters, but 249 bytes.
-static const char *longname = "\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97";
-
-
-/* entries for a plain copy of tests/resources/status */
-
-static const char *entry_paths0[] = {
- "file_deleted",
- "ignored_file",
- "modified_file",
- "new_file",
- "staged_changes",
- "staged_changes_file_deleted",
- "staged_changes_modified_file",
- "staged_delete_file_deleted",
- "staged_delete_modified_file",
- "staged_new_file",
- "staged_new_file_deleted_file",
- "staged_new_file_modified_file",
-
- "subdir/deleted_file",
- "subdir/modified_file",
- "subdir/new_file",
-
- "\xe8\xbf\x99",
-};
-
-static const unsigned int entry_statuses0[] = {
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_INDEX_MODIFIED | GIT_STATUS_WT_DELETED,
- GIT_STATUS_INDEX_MODIFIED | GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_INDEX_DELETED | GIT_STATUS_WT_NEW,
- GIT_STATUS_INDEX_NEW,
- GIT_STATUS_INDEX_NEW | GIT_STATUS_WT_DELETED,
- GIT_STATUS_INDEX_NEW | GIT_STATUS_WT_MODIFIED,
-
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW,
-
- GIT_STATUS_WT_NEW,
-};
-
-static const int entry_count0 = 16;
-
-/* entries for a copy of tests/resources/status with all content
- * deleted from the working directory
- */
-
-static const char *entry_paths2[] = {
- "current_file",
- "file_deleted",
- "modified_file",
- "staged_changes",
- "staged_changes_file_deleted",
- "staged_changes_modified_file",
- "staged_delete_file_deleted",
- "staged_delete_modified_file",
- "staged_new_file",
- "staged_new_file_deleted_file",
- "staged_new_file_modified_file",
- "subdir.txt",
- "subdir/current_file",
- "subdir/deleted_file",
- "subdir/modified_file",
-};
-
-static const unsigned int entry_statuses2[] = {
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
-};
-
-static const int entry_count2 = 15;
-
-/* entries for a copy of tests/resources/status with some mods */
-
-static const char *entry_paths3_icase[] = {
- ".HEADER",
- "42-is-not-prime.sigh",
- "current_file",
- "current_file/",
- "file_deleted",
- "ignored_file",
- "modified_file",
- "new_file",
- "README.md",
- "staged_changes",
- "staged_changes_file_deleted",
- "staged_changes_modified_file",
- "staged_delete_file_deleted",
- "staged_delete_modified_file",
- "staged_new_file",
- "staged_new_file_deleted_file",
- "staged_new_file_modified_file",
- "subdir",
- "subdir/current_file",
- "subdir/deleted_file",
- "subdir/modified_file",
- "\xe8\xbf\x99",
-};
-
-static const unsigned int entry_statuses3_icase[] = {
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_WT_NEW | GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_NEW,
-};
-
-static const char *entry_paths3[] = {
- ".HEADER",
- "42-is-not-prime.sigh",
- "README.md",
- "current_file",
- "current_file/",
- "file_deleted",
- "ignored_file",
- "modified_file",
- "new_file",
- "staged_changes",
- "staged_changes_file_deleted",
- "staged_changes_modified_file",
- "staged_delete_file_deleted",
- "staged_delete_modified_file",
- "staged_new_file",
- "staged_new_file_deleted_file",
- "staged_new_file_modified_file",
- "subdir",
- "subdir/current_file",
- "subdir/deleted_file",
- "subdir/modified_file",
- "\xe8\xbf\x99",
-};
-
-static const unsigned int entry_statuses3[] = {
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_WT_NEW | GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_NEW,
-};
-
-static const int entry_count3 = 22;
-
-
-/* entries for a copy of tests/resources/status with some mods
- * and different options to the status call
- */
-
-static const char *entry_paths4[] = {
- ".new_file",
- "current_file",
- "current_file/current_file",
- "current_file/modified_file",
- "current_file/new_file",
- "file_deleted",
- "modified_file",
- "new_file",
- "staged_changes",
- "staged_changes_file_deleted",
- "staged_changes_modified_file",
- "staged_delete_file_deleted",
- "staged_delete_modified_file",
- "staged_new_file",
- "staged_new_file_deleted_file",
- "staged_new_file_modified_file",
- "subdir",
- "subdir/current_file",
- "subdir/deleted_file",
- "subdir/modified_file",
- "zzz_new_dir/new_file",
- "zzz_new_file",
- "\xe8\xbf\x99",
-};
-
-static const unsigned int entry_statuses4[] = {
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_WT_NEW | GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_NEW,
-};
-
-static const int entry_count4 = 23;
-
-
-/* entries for a copy of tests/resources/status with options
- * passed to the status call in order to only get the differences
- * between the HEAD and the index (changes to be committed)
- */
-
-static const char *entry_paths5[] = {
- "staged_changes",
- "staged_changes_file_deleted",
- "staged_changes_modified_file",
- "staged_delete_file_deleted",
- "staged_delete_modified_file",
- "staged_new_file",
- "staged_new_file_deleted_file",
- "staged_new_file_modified_file",
-};
-
-static const unsigned int entry_statuses5[] = {
- GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_INDEX_NEW,
- GIT_STATUS_INDEX_NEW,
- GIT_STATUS_INDEX_NEW,
-};
-
-static const int entry_count5 = 8;
-
-
-/* entries for a copy of tests/resources/status with options
- * passed to the status call in order to only get the differences
- * between the workdir and the index (changes not staged, untracked files)
- */
-
-static const char *entry_paths6[] = {
- "file_deleted",
- "ignored_file",
- "modified_file",
- "new_file",
- "staged_changes_file_deleted",
- "staged_changes_modified_file",
- "staged_delete_modified_file",
- "staged_new_file_deleted_file",
- "staged_new_file_modified_file",
- "subdir/deleted_file",
- "subdir/modified_file",
- "subdir/new_file",
- "\xe8\xbf\x99",
-};
-
-static const unsigned int entry_statuses6[] = {
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_WT_NEW,
-};
-
-static const int entry_count6 = 13;
diff --git a/tests-clar/status/status_helpers.c b/tests-clar/status/status_helpers.c
deleted file mode 100644
index 902b65c4f..000000000
--- a/tests-clar/status/status_helpers.c
+++ /dev/null
@@ -1,101 +0,0 @@
-#include "clar_libgit2.h"
-#include "status_helpers.h"
-
-int cb_status__normal(
- const char *path, unsigned int status_flags, void *payload)
-{
- status_entry_counts *counts = payload;
-
- if (counts->debug)
- cb_status__print(path, status_flags, NULL);
-
- if (counts->entry_count >= counts->expected_entry_count) {
- counts->wrong_status_flags_count++;
- goto exit;
- }
-
- if (strcmp(path, counts->expected_paths[counts->entry_count])) {
- counts->wrong_sorted_path++;
- goto exit;
- }
-
- if (status_flags != counts->expected_statuses[counts->entry_count])
- counts->wrong_status_flags_count++;
-
-exit:
- counts->entry_count++;
- return 0;
-}
-
-int cb_status__count(const char *p, unsigned int s, void *payload)
-{
- volatile int *count = (int *)payload;
-
- GIT_UNUSED(p);
- GIT_UNUSED(s);
-
- (*count)++;
-
- return 0;
-}
-
-int cb_status__single(const char *p, unsigned int s, void *payload)
-{
- status_entry_single *data = (status_entry_single *)payload;
-
- if (data->debug)
- fprintf(stderr, "%02d: %s (%04x)\n", data->count, p, s);
-
- data->count++;
- data->status = s;
-
- return 0;
-}
-
-int cb_status__print(
- const char *path, unsigned int status_flags, void *payload)
-{
- char istatus = ' ', wstatus = ' ';
- int icount = 0, wcount = 0;
-
- if (status_flags & GIT_STATUS_INDEX_NEW) {
- istatus = 'A'; icount++;
- }
- if (status_flags & GIT_STATUS_INDEX_MODIFIED) {
- istatus = 'M'; icount++;
- }
- if (status_flags & GIT_STATUS_INDEX_DELETED) {
- istatus = 'D'; icount++;
- }
- if (status_flags & GIT_STATUS_INDEX_RENAMED) {
- istatus = 'R'; icount++;
- }
- if (status_flags & GIT_STATUS_INDEX_TYPECHANGE) {
- istatus = 'T'; icount++;
- }
-
- if (status_flags & GIT_STATUS_WT_NEW) {
- wstatus = 'A'; wcount++;
- }
- if (status_flags & GIT_STATUS_WT_MODIFIED) {
- wstatus = 'M'; wcount++;
- }
- if (status_flags & GIT_STATUS_WT_DELETED) {
- wstatus = 'D'; wcount++;
- }
- if (status_flags & GIT_STATUS_WT_TYPECHANGE) {
- wstatus = 'T'; wcount++;
- }
- if (status_flags & GIT_STATUS_IGNORED) {
- wstatus = 'I'; wcount++;
- }
-
- fprintf(stderr, "%c%c %s (%d/%d%s)\n",
- istatus, wstatus, path, icount, wcount,
- (icount > 1 || wcount > 1) ? " INVALID COMBO" : "");
-
- if (payload)
- *((int *)payload) += 1;
-
- return 0;
-}
diff --git a/tests-clar/status/status_helpers.h b/tests-clar/status/status_helpers.h
deleted file mode 100644
index f1f009e02..000000000
--- a/tests-clar/status/status_helpers.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef INCLUDE_cl_status_helpers_h__
-#define INCLUDE_cl_status_helpers_h__
-
-typedef struct {
- int wrong_status_flags_count;
- int wrong_sorted_path;
- int entry_count;
- const unsigned int* expected_statuses;
- const char** expected_paths;
- int expected_entry_count;
- bool debug;
-} status_entry_counts;
-
-/* cb_status__normal takes payload of "status_entry_counts *" */
-
-extern int cb_status__normal(
- const char *path, unsigned int status_flags, void *payload);
-
-
-/* cb_status__count takes payload of "int *" */
-
-extern int cb_status__count(const char *p, unsigned int s, void *payload);
-
-
-typedef struct {
- int count;
- unsigned int status;
- bool debug;
-} status_entry_single;
-
-/* cb_status__single takes payload of "status_entry_single *" */
-
-extern int cb_status__single(const char *p, unsigned int s, void *payload);
-
-/* cb_status__print takes optional payload of "int *" */
-
-extern int cb_status__print(const char *p, unsigned int s, void *payload);
-
-#endif
diff --git a/tests-clar/status/submodules.c b/tests-clar/status/submodules.c
deleted file mode 100644
index ef2888f7d..000000000
--- a/tests-clar/status/submodules.c
+++ /dev/null
@@ -1,223 +0,0 @@
-#include "clar_libgit2.h"
-#include "buffer.h"
-#include "path.h"
-#include "posix.h"
-#include "status_helpers.h"
-#include "../submodule/submodule_helpers.h"
-
-static git_repository *g_repo = NULL;
-
-void test_status_submodules__initialize(void)
-{
-}
-
-void test_status_submodules__cleanup(void)
-{
-}
-
-void test_status_submodules__api(void)
-{
- git_submodule *sm;
-
- g_repo = setup_fixture_submodules();
-
- cl_assert(git_submodule_lookup(NULL, g_repo, "nonexistent") == GIT_ENOTFOUND);
-
- cl_assert(git_submodule_lookup(NULL, g_repo, "modified") == GIT_ENOTFOUND);
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "testrepo"));
- cl_assert(sm != NULL);
- cl_assert_equal_s("testrepo", git_submodule_name(sm));
- cl_assert_equal_s("testrepo", git_submodule_path(sm));
-}
-
-void test_status_submodules__0(void)
-{
- int counts = 0;
-
- g_repo = setup_fixture_submodules();
-
- cl_assert(git_path_isdir("submodules/.git"));
- cl_assert(git_path_isdir("submodules/testrepo/.git"));
- cl_assert(git_path_isfile("submodules/.gitmodules"));
-
- cl_git_pass(
- git_status_foreach(g_repo, cb_status__count, &counts)
- );
-
- cl_assert_equal_i(6, counts);
-}
-
-static const char *expected_files[] = {
- ".gitmodules",
- "added",
- "deleted",
- "ignored",
- "modified",
- "untracked"
-};
-
-static unsigned int expected_status[] = {
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_INDEX_NEW,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW
-};
-
-static int cb_status__match(const char *p, unsigned int s, void *payload)
-{
- status_entry_counts *counts = payload;
- int idx = counts->entry_count++;
-
- cl_assert_equal_s(counts->expected_paths[idx], p);
- cl_assert(counts->expected_statuses[idx] == s);
-
- return 0;
-}
-
-void test_status_submodules__1(void)
-{
- status_entry_counts counts;
-
- g_repo = setup_fixture_submodules();
-
- cl_assert(git_path_isdir("submodules/.git"));
- cl_assert(git_path_isdir("submodules/testrepo/.git"));
- cl_assert(git_path_isfile("submodules/.gitmodules"));
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_paths = expected_files;
- counts.expected_statuses = expected_status;
-
- cl_git_pass(
- git_status_foreach(g_repo, cb_status__match, &counts)
- );
-
- cl_assert_equal_i(6, counts.entry_count);
-}
-
-void test_status_submodules__single_file(void)
-{
- unsigned int status = 0;
- g_repo = setup_fixture_submodules();
- cl_git_pass( git_status_file(&status, g_repo, "testrepo") );
- cl_assert(!status);
-}
-
-void test_status_submodules__moved_head(void)
-{
- git_submodule *sm;
- git_repository *smrepo;
- git_oid oid;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- status_entry_counts counts;
- static const char *expected_files_with_sub[] = {
- ".gitmodules",
- "added",
- "deleted",
- "ignored",
- "modified",
- "testrepo",
- "untracked"
- };
- static unsigned int expected_status_with_sub[] = {
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_INDEX_NEW,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW
- };
-
- g_repo = setup_fixture_submodules();
-
- cl_git_pass(git_submodule_lookup(&sm, g_repo, "testrepo"));
- cl_git_pass(git_submodule_open(&smrepo, sm));
-
- /* move submodule HEAD to c47800c7266a2be04c571c04d5a6614691ea99bd */
- cl_git_pass(
- git_oid_fromstr(&oid, "c47800c7266a2be04c571c04d5a6614691ea99bd"));
- cl_git_pass(git_repository_set_head_detached(smrepo, &oid));
-
- /* first do a normal status, which should now include the submodule */
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_paths = expected_files_with_sub;
- counts.expected_statuses = expected_status_with_sub;
-
- opts.flags = GIT_STATUS_OPT_DEFAULTS;
-
- cl_git_pass(
- git_status_foreach_ext(g_repo, &opts, cb_status__match, &counts));
- cl_assert_equal_i(7, counts.entry_count);
-
- /* try again with EXCLUDE_SUBMODULES which should skip it */
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_paths = expected_files;
- counts.expected_statuses = expected_status;
-
- opts.flags = GIT_STATUS_OPT_DEFAULTS | GIT_STATUS_OPT_EXCLUDE_SUBMODULES;
-
- cl_git_pass(
- git_status_foreach_ext(g_repo, &opts, cb_status__match, &counts));
- cl_assert_equal_i(6, counts.entry_count);
-
- git_repository_free(smrepo);
-}
-
-void test_status_submodules__dirty_workdir_only(void)
-{
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- status_entry_counts counts;
- static const char *expected_files_with_sub[] = {
- ".gitmodules",
- "added",
- "deleted",
- "ignored",
- "modified",
- "testrepo",
- "untracked"
- };
- static unsigned int expected_status_with_sub[] = {
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_INDEX_NEW,
- GIT_STATUS_INDEX_DELETED,
- GIT_STATUS_IGNORED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW
- };
-
- g_repo = setup_fixture_submodules();
-
- cl_git_rewritefile("submodules/testrepo/README", "heyheyhey");
- cl_git_mkfile("submodules/testrepo/all_new.txt", "never seen before");
-
- /* first do a normal status, which should now include the submodule */
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_paths = expected_files_with_sub;
- counts.expected_statuses = expected_status_with_sub;
-
- opts.flags = GIT_STATUS_OPT_DEFAULTS;
-
- cl_git_pass(
- git_status_foreach_ext(g_repo, &opts, cb_status__match, &counts));
- cl_assert_equal_i(7, counts.entry_count);
-
- /* try again with EXCLUDE_SUBMODULES which should skip it */
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_paths = expected_files;
- counts.expected_statuses = expected_status;
-
- opts.flags = GIT_STATUS_OPT_DEFAULTS | GIT_STATUS_OPT_EXCLUDE_SUBMODULES;
-
- cl_git_pass(
- git_status_foreach_ext(g_repo, &opts, cb_status__match, &counts));
- cl_assert_equal_i(6, counts.entry_count);
-}
diff --git a/tests-clar/status/worktree.c b/tests-clar/status/worktree.c
deleted file mode 100644
index 34be6d34c..000000000
--- a/tests-clar/status/worktree.c
+++ /dev/null
@@ -1,875 +0,0 @@
-#include "clar_libgit2.h"
-#include "fileops.h"
-#include "ignore.h"
-#include "status_data.h"
-#include "posix.h"
-#include "util.h"
-#include "path.h"
-
-/**
- * Cleanup
- *
- * This will be called once after each test finishes, even
- * if the test failed
- */
-void test_status_worktree__cleanup(void)
-{
- cl_git_sandbox_cleanup();
-}
-
-/**
- * Tests - Status determination on a working tree
- */
-/* this test is equivalent to t18-status.c:statuscb0 */
-void test_status_worktree__whole_repository(void)
-{
- status_entry_counts counts;
- git_repository *repo = cl_git_sandbox_init("status");
-
- memset(&counts, 0x0, sizeof(status_entry_counts));
- counts.expected_entry_count = entry_count0;
- counts.expected_paths = entry_paths0;
- counts.expected_statuses = entry_statuses0;
-
- cl_git_pass(
- git_status_foreach(repo, cb_status__normal, &counts)
- );
-
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-}
-
-void assert_show(const int entry_counts, const char *entry_paths[],
- const unsigned int entry_statuses[], git_status_show_t show)
-{
- status_entry_counts counts;
- git_repository *repo = cl_git_sandbox_init("status");
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
-
- memset(&counts, 0x0, sizeof(status_entry_counts));
- counts.expected_entry_count = entry_counts;
- counts.expected_paths = entry_paths;
- counts.expected_statuses = entry_statuses;
-
- opts.flags = GIT_STATUS_OPT_DEFAULTS;
- opts.show = show;
-
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__normal, &counts)
- );
-
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-}
-
-void test_status_worktree__show_index_and_workdir(void)
-{
- assert_show(entry_count0, entry_paths0, entry_statuses0,
- GIT_STATUS_SHOW_INDEX_AND_WORKDIR);
-}
-
-void test_status_worktree__show_index_only(void)
-{
- assert_show(entry_count5, entry_paths5, entry_statuses5,
- GIT_STATUS_SHOW_INDEX_ONLY);
-}
-
-void test_status_worktree__show_workdir_only(void)
-{
- assert_show(entry_count6, entry_paths6, entry_statuses6,
- GIT_STATUS_SHOW_WORKDIR_ONLY);
-}
-
-/* this test is equivalent to t18-status.c:statuscb1 */
-void test_status_worktree__empty_repository(void)
-{
- int count = 0;
- git_repository *repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_pass(git_status_foreach(repo, cb_status__count, &count));
-
- cl_assert_equal_i(0, count);
-}
-
-static int remove_file_cb(void *data, git_buf *file)
-{
- const char *filename = git_buf_cstr(file);
-
- GIT_UNUSED(data);
-
- if (git__suffixcmp(filename, ".git") == 0)
- return 0;
-
- if (git_path_isdir(filename))
- cl_git_pass(git_futils_rmdir_r(filename, NULL, GIT_RMDIR_REMOVE_FILES));
- else
- cl_git_pass(p_unlink(git_buf_cstr(file)));
-
- return 0;
-}
-
-/* this test is equivalent to t18-status.c:statuscb2 */
-void test_status_worktree__purged_worktree(void)
-{
- status_entry_counts counts;
- git_repository *repo = cl_git_sandbox_init("status");
- git_buf workdir = GIT_BUF_INIT;
-
- /* first purge the contents of the worktree */
- cl_git_pass(git_buf_sets(&workdir, git_repository_workdir(repo)));
- cl_git_pass(git_path_direach(&workdir, 0, remove_file_cb, NULL));
- git_buf_free(&workdir);
-
- /* now get status */
- memset(&counts, 0x0, sizeof(status_entry_counts));
- counts.expected_entry_count = entry_count2;
- counts.expected_paths = entry_paths2;
- counts.expected_statuses = entry_statuses2;
-
- cl_git_pass(
- git_status_foreach(repo, cb_status__normal, &counts)
- );
-
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-}
-
-/* this test is similar to t18-status.c:statuscb3 */
-void test_status_worktree__swap_subdir_and_file(void)
-{
- status_entry_counts counts;
- git_repository *repo = cl_git_sandbox_init("status");
- git_index *index;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- bool ignore_case;
-
- cl_git_pass(git_repository_index(&index, repo));
- ignore_case = (git_index_caps(index) & GIT_INDEXCAP_IGNORE_CASE) != 0;
- git_index_free(index);
-
- /* first alter the contents of the worktree */
- cl_git_pass(p_rename("status/current_file", "status/swap"));
- cl_git_pass(p_rename("status/subdir", "status/current_file"));
- cl_git_pass(p_rename("status/swap", "status/subdir"));
-
- cl_git_mkfile("status/.HEADER", "dummy");
- cl_git_mkfile("status/42-is-not-prime.sigh", "dummy");
- cl_git_mkfile("status/README.md", "dummy");
-
- /* now get status */
- memset(&counts, 0x0, sizeof(status_entry_counts));
- counts.expected_entry_count = entry_count3;
- counts.expected_paths = ignore_case ? entry_paths3_icase : entry_paths3;
- counts.expected_statuses = ignore_case ? entry_statuses3_icase : entry_statuses3;
-
- opts.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED |
- GIT_STATUS_OPT_INCLUDE_IGNORED;
-
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__normal, &counts)
- );
-
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-}
-
-void test_status_worktree__swap_subdir_with_recurse_and_pathspec(void)
-{
- status_entry_counts counts;
- git_repository *repo = cl_git_sandbox_init("status");
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
-
- /* first alter the contents of the worktree */
- cl_git_pass(p_rename("status/current_file", "status/swap"));
- cl_git_pass(p_rename("status/subdir", "status/current_file"));
- cl_git_pass(p_rename("status/swap", "status/subdir"));
- cl_git_mkfile("status/.new_file", "dummy");
- cl_git_pass(git_futils_mkdir_r("status/zzz_new_dir", NULL, 0777));
- cl_git_mkfile("status/zzz_new_dir/new_file", "dummy");
- cl_git_mkfile("status/zzz_new_file", "dummy");
-
- /* now get status */
- memset(&counts, 0x0, sizeof(status_entry_counts));
- counts.expected_entry_count = entry_count4;
- counts.expected_paths = entry_paths4;
- counts.expected_statuses = entry_statuses4;
-
- opts.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED |
- GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS;
- /* TODO: set pathspec to "current_file" eventually */
-
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__normal, &counts)
- );
-
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-}
-
-/* this test is equivalent to t18-status.c:singlestatus0 */
-void test_status_worktree__single_file(void)
-{
- int i;
- unsigned int status_flags;
- git_repository *repo = cl_git_sandbox_init("status");
-
- for (i = 0; i < (int)entry_count0; i++) {
- cl_git_pass(
- git_status_file(&status_flags, repo, entry_paths0[i])
- );
- cl_assert(entry_statuses0[i] == status_flags);
- }
-}
-
-/* this test is equivalent to t18-status.c:singlestatus1 */
-void test_status_worktree__single_nonexistent_file(void)
-{
- int error;
- unsigned int status_flags;
- git_repository *repo = cl_git_sandbox_init("status");
-
- error = git_status_file(&status_flags, repo, "nonexistent");
- cl_git_fail(error);
- cl_assert(error == GIT_ENOTFOUND);
-}
-
-/* this test is equivalent to t18-status.c:singlestatus2 */
-void test_status_worktree__single_nonexistent_file_empty_repo(void)
-{
- int error;
- unsigned int status_flags;
- git_repository *repo = cl_git_sandbox_init("empty_standard_repo");
-
- error = git_status_file(&status_flags, repo, "nonexistent");
- cl_git_fail(error);
- cl_assert(error == GIT_ENOTFOUND);
-}
-
-/* this test is equivalent to t18-status.c:singlestatus3 */
-void test_status_worktree__single_file_empty_repo(void)
-{
- unsigned int status_flags;
- git_repository *repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_mkfile("empty_standard_repo/new_file", "new_file\n");
-
- cl_git_pass(git_status_file(&status_flags, repo, "new_file"));
- cl_assert(status_flags == GIT_STATUS_WT_NEW);
-}
-
-/* this test is equivalent to t18-status.c:singlestatus4 */
-void test_status_worktree__single_folder(void)
-{
- int error;
- unsigned int status_flags;
- git_repository *repo = cl_git_sandbox_init("status");
-
- error = git_status_file(&status_flags, repo, "subdir");
- cl_git_fail(error);
- cl_assert(error != GIT_ENOTFOUND);
-}
-
-
-void test_status_worktree__ignores(void)
-{
- int i, ignored;
- git_repository *repo = cl_git_sandbox_init("status");
-
- for (i = 0; i < (int)entry_count0; i++) {
- cl_git_pass(
- git_status_should_ignore(&ignored, repo, entry_paths0[i])
- );
- cl_assert(ignored == (entry_statuses0[i] == GIT_STATUS_IGNORED));
- }
-
- cl_git_pass(
- git_status_should_ignore(&ignored, repo, "nonexistent_file")
- );
- cl_assert(!ignored);
-
- cl_git_pass(
- git_status_should_ignore(&ignored, repo, "ignored_nonexistent_file")
- );
- cl_assert(ignored);
-}
-
-static int cb_status__check_592(const char *p, unsigned int s, void *payload)
-{
- if (s != GIT_STATUS_WT_DELETED ||
- (payload != NULL && strcmp(p, (const char *)payload) != 0))
- return -1;
-
- return 0;
-}
-
-void test_status_worktree__issue_592(void)
-{
- git_repository *repo;
- git_buf path = GIT_BUF_INIT;
-
- repo = cl_git_sandbox_init("issue_592");
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(repo), "l.txt"));
- cl_git_pass(p_unlink(git_buf_cstr(&path)));
- cl_assert(!git_path_exists("issue_592/l.txt"));
-
- cl_git_pass(git_status_foreach(repo, cb_status__check_592, "l.txt"));
-
- git_buf_free(&path);
-}
-
-void test_status_worktree__issue_592_2(void)
-{
- git_repository *repo;
- git_buf path = GIT_BUF_INIT;
-
- repo = cl_git_sandbox_init("issue_592");
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(repo), "c/a.txt"));
- cl_git_pass(p_unlink(git_buf_cstr(&path)));
- cl_assert(!git_path_exists("issue_592/c/a.txt"));
-
- cl_git_pass(git_status_foreach(repo, cb_status__check_592, "c/a.txt"));
-
- git_buf_free(&path);
-}
-
-void test_status_worktree__issue_592_3(void)
-{
- git_repository *repo;
- git_buf path = GIT_BUF_INIT;
-
- repo = cl_git_sandbox_init("issue_592");
-
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(repo), "c"));
- cl_git_pass(git_futils_rmdir_r(git_buf_cstr(&path), NULL, GIT_RMDIR_REMOVE_FILES));
- cl_assert(!git_path_exists("issue_592/c/a.txt"));
-
- cl_git_pass(git_status_foreach(repo, cb_status__check_592, "c/a.txt"));
-
- git_buf_free(&path);
-}
-
-void test_status_worktree__issue_592_4(void)
-{
- git_repository *repo;
- git_buf path = GIT_BUF_INIT;
-
- repo = cl_git_sandbox_init("issue_592");
-
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(repo), "t/b.txt"));
- cl_git_pass(p_unlink(git_buf_cstr(&path)));
-
- cl_git_pass(git_status_foreach(repo, cb_status__check_592, "t/b.txt"));
-
- git_buf_free(&path);
-}
-
-void test_status_worktree__issue_592_5(void)
-{
- git_repository *repo;
- git_buf path = GIT_BUF_INIT;
-
- repo = cl_git_sandbox_init("issue_592");
-
- cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(repo), "t"));
- cl_git_pass(git_futils_rmdir_r(git_buf_cstr(&path), NULL, GIT_RMDIR_REMOVE_FILES));
- cl_git_pass(p_mkdir(git_buf_cstr(&path), 0777));
-
- cl_git_pass(git_status_foreach(repo, cb_status__check_592, NULL));
-
- git_buf_free(&path);
-}
-
-void test_status_worktree__issue_592_ignores_0(void)
-{
- int count = 0;
- status_entry_single st;
- git_repository *repo = cl_git_sandbox_init("issue_592");
-
- cl_git_pass(git_status_foreach(repo, cb_status__count, &count));
- cl_assert_equal_i(0, count);
-
- cl_git_rewritefile("issue_592/.gitignore",
- ".gitignore\n*.txt\nc/\n[tT]*/\n");
-
- cl_git_pass(git_status_foreach(repo, cb_status__count, &count));
- cl_assert_equal_i(1, count);
-
- /* This is a situation where the behavior of libgit2 is
- * different from core git. Core git will show ignored.txt
- * in the list of ignored files, even though the directory
- * "t" is ignored and the file is untracked because we have
- * the explicit "*.txt" ignore rule. Libgit2 just excludes
- * all untracked files that are contained within ignored
- * directories without explicitly listing them.
- */
- cl_git_rewritefile("issue_592/t/ignored.txt", "ping");
-
- memset(&st, 0, sizeof(st));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &st));
- cl_assert_equal_i(1, st.count);
- cl_assert(st.status == GIT_STATUS_IGNORED);
-
- cl_git_rewritefile("issue_592/c/ignored_by_dir", "ping");
-
- memset(&st, 0, sizeof(st));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &st));
- cl_assert_equal_i(1, st.count);
- cl_assert(st.status == GIT_STATUS_IGNORED);
-
- cl_git_rewritefile("issue_592/t/ignored_by_dir_pattern", "ping");
-
- memset(&st, 0, sizeof(st));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &st));
- cl_assert_equal_i(1, st.count);
- cl_assert(st.status == GIT_STATUS_IGNORED);
-}
-
-void test_status_worktree__issue_592_ignored_dirs_with_tracked_content(void)
-{
- int count = 0;
- git_repository *repo = cl_git_sandbox_init("issue_592b");
-
- cl_git_pass(git_status_foreach(repo, cb_status__count, &count));
- cl_assert_equal_i(1, count);
-
- /* if we are really mimicking core git, then only ignored1.txt
- * at the top level will show up in the ignores list here.
- * everything else will be unmodified or skipped completely.
- */
-}
-
-void test_status_worktree__conflict_with_diff3(void)
-{
- git_repository *repo = cl_git_sandbox_init("status");
- git_index *index;
- unsigned int status;
- git_index_entry ancestor_entry, our_entry, their_entry;
-
- memset(&ancestor_entry, 0x0, sizeof(git_index_entry));
- memset(&our_entry, 0x0, sizeof(git_index_entry));
- memset(&their_entry, 0x0, sizeof(git_index_entry));
-
- ancestor_entry.path = "modified_file";
- git_oid_fromstr(&ancestor_entry.oid,
- "452e4244b5d083ddf0460acf1ecc74db9dcfa11a");
-
- our_entry.path = "modified_file";
- git_oid_fromstr(&our_entry.oid,
- "452e4244b5d083ddf0460acf1ecc74db9dcfa11a");
-
- their_entry.path = "modified_file";
- git_oid_fromstr(&their_entry.oid,
- "452e4244b5d083ddf0460acf1ecc74db9dcfa11a");
-
- cl_git_pass(git_status_file(&status, repo, "modified_file"));
- cl_assert_equal_i(GIT_STATUS_WT_MODIFIED, status);
-
- cl_git_pass(git_repository_index(&index, repo));
- cl_git_pass(git_index_remove(index, "modified_file", 0));
- cl_git_pass(git_index_conflict_add(
- index, &ancestor_entry, &our_entry, &their_entry));
- cl_git_pass(git_index_write(index));
- git_index_free(index);
-
- cl_git_pass(git_status_file(&status, repo, "modified_file"));
-
- cl_assert_equal_i(GIT_STATUS_INDEX_DELETED | GIT_STATUS_WT_NEW, status);
-}
-
-static const char *filemode_paths[] = {
- "exec_off",
- "exec_off2on_staged",
- "exec_off2on_workdir",
- "exec_off_untracked",
- "exec_on",
- "exec_on2off_staged",
- "exec_on2off_workdir",
- "exec_on_untracked",
-};
-
-static unsigned int filemode_statuses[] = {
- GIT_STATUS_CURRENT,
- GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW,
- GIT_STATUS_CURRENT,
- GIT_STATUS_INDEX_MODIFIED,
- GIT_STATUS_WT_MODIFIED,
- GIT_STATUS_WT_NEW
-};
-
-static const int filemode_count = 8;
-
-void test_status_worktree__filemode_changes(void)
-{
- git_repository *repo = cl_git_sandbox_init("filemodes");
- status_entry_counts counts;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
-
- /* overwrite stored filemode with platform appropriate value */
- if (cl_is_chmod_supported())
- cl_repo_set_bool(repo, "core.filemode", true);
- else {
- int i;
-
- cl_repo_set_bool(repo, "core.filemode", false);
-
- /* won't trust filesystem mode diffs, so these will appear unchanged */
- for (i = 0; i < filemode_count; ++i)
- if (filemode_statuses[i] == GIT_STATUS_WT_MODIFIED)
- filemode_statuses[i] = GIT_STATUS_CURRENT;
- }
-
- opts.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED |
- GIT_STATUS_OPT_INCLUDE_IGNORED |
- GIT_STATUS_OPT_INCLUDE_UNMODIFIED;
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_entry_count = filemode_count;
- counts.expected_paths = filemode_paths;
- counts.expected_statuses = filemode_statuses;
-
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__normal, &counts)
- );
-
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-}
-
-static int cb_status__interrupt(const char *p, unsigned int s, void *payload)
-{
- volatile int *count = (int *)payload;
-
- GIT_UNUSED(p);
- GIT_UNUSED(s);
-
- (*count)++;
-
- return (*count == 8);
-}
-
-void test_status_worktree__interruptable_foreach(void)
-{
- int count = 0;
- git_repository *repo = cl_git_sandbox_init("status");
-
- cl_assert_equal_i(
- GIT_EUSER, git_status_foreach(repo, cb_status__interrupt, &count)
- );
-
- cl_assert_equal_i(8, count);
-}
-
-void test_status_worktree__line_endings_dont_count_as_changes_with_autocrlf(void)
-{
- git_repository *repo = cl_git_sandbox_init("status");
- unsigned int status;
-
- cl_repo_set_bool(repo, "core.autocrlf", true);
-
- cl_git_rewritefile("status/current_file", "current_file\r\n");
-
- cl_git_pass(git_status_file(&status, repo, "current_file"));
-
- cl_assert_equal_i(GIT_STATUS_CURRENT, status);
-}
-
-void test_status_worktree__line_endings_dont_count_as_changes_with_autocrlf_issue_1397(void)
-{
- git_repository *repo = cl_git_sandbox_init("issue_1397");
- unsigned int status;
-
- cl_repo_set_bool(repo, "core.autocrlf", true);
-
- cl_git_pass(git_status_file(&status, repo, "crlf_file.txt"));
-
- cl_assert_equal_i(GIT_STATUS_CURRENT, status);
-}
-
-void test_status_worktree__conflicted_item(void)
-{
- git_repository *repo = cl_git_sandbox_init("status");
- git_index *index;
- unsigned int status;
- git_index_entry ancestor_entry, our_entry, their_entry;
-
- memset(&ancestor_entry, 0x0, sizeof(git_index_entry));
- memset(&our_entry, 0x0, sizeof(git_index_entry));
- memset(&their_entry, 0x0, sizeof(git_index_entry));
-
- ancestor_entry.path = "modified_file";
- git_oid_fromstr(&ancestor_entry.oid,
- "452e4244b5d083ddf0460acf1ecc74db9dcfa11a");
-
- our_entry.path = "modified_file";
- git_oid_fromstr(&our_entry.oid,
- "452e4244b5d083ddf0460acf1ecc74db9dcfa11a");
-
- their_entry.path = "modified_file";
- git_oid_fromstr(&their_entry.oid,
- "452e4244b5d083ddf0460acf1ecc74db9dcfa11a");
-
- cl_git_pass(git_status_file(&status, repo, "modified_file"));
- cl_assert_equal_i(GIT_STATUS_WT_MODIFIED, status);
-
- cl_git_pass(git_repository_index(&index, repo));
- cl_git_pass(git_index_conflict_add(index, &ancestor_entry,
- &our_entry, &their_entry));
-
- cl_git_pass(git_status_file(&status, repo, "modified_file"));
- cl_assert_equal_i(GIT_STATUS_WT_MODIFIED, status);
-
- git_index_free(index);
-}
-
-static void stage_and_commit(git_repository *repo, const char *path)
-{
- git_index *index;
-
- cl_git_pass(git_repository_index(&index, repo));
- cl_git_pass(git_index_add_bypath(index, path));
- cl_repo_commit_from_index(NULL, repo, NULL, 1323847743, "Initial commit\n");
- git_index_free(index);
-}
-
-static void assert_ignore_case(
- bool should_ignore_case,
- int expected_lower_cased_file_status,
- int expected_camel_cased_file_status)
-{
- unsigned int status;
- git_buf lower_case_path = GIT_BUF_INIT, camel_case_path = GIT_BUF_INIT;
- git_repository *repo, *repo2;
-
- repo = cl_git_sandbox_init("empty_standard_repo");
- cl_git_remove_placeholders(git_repository_path(repo), "dummy-marker.txt");
-
- cl_repo_set_bool(repo, "core.ignorecase", should_ignore_case);
-
- cl_git_pass(git_buf_joinpath(&lower_case_path,
- git_repository_workdir(repo), "plop"));
-
- cl_git_mkfile(git_buf_cstr(&lower_case_path), "");
-
- stage_and_commit(repo, "plop");
-
- cl_git_pass(git_repository_open(&repo2, "./empty_standard_repo"));
-
- cl_git_pass(git_status_file(&status, repo2, "plop"));
- cl_assert_equal_i(GIT_STATUS_CURRENT, status);
-
- cl_git_pass(git_buf_joinpath(&camel_case_path,
- git_repository_workdir(repo), "Plop"));
-
- cl_git_pass(p_rename(git_buf_cstr(&lower_case_path), git_buf_cstr(&camel_case_path)));
-
- cl_git_pass(git_status_file(&status, repo2, "plop"));
- cl_assert_equal_i(expected_lower_cased_file_status, status);
-
- cl_git_pass(git_status_file(&status, repo2, "Plop"));
- cl_assert_equal_i(expected_camel_cased_file_status, status);
-
- git_repository_free(repo2);
- git_buf_free(&lower_case_path);
- git_buf_free(&camel_case_path);
-}
-
-void test_status_worktree__file_status_honors_core_ignorecase_true(void)
-{
- assert_ignore_case(true, GIT_STATUS_CURRENT, GIT_STATUS_CURRENT);
-}
-
-void test_status_worktree__file_status_honors_core_ignorecase_false(void)
-{
- assert_ignore_case(false, GIT_STATUS_WT_DELETED, GIT_STATUS_WT_NEW);
-}
-
-void test_status_worktree__file_status_honors_case_ignorecase_regarding_untracked_files(void)
-{
- git_repository *repo = cl_git_sandbox_init("status");
- unsigned int status;
- git_index *index;
-
- cl_repo_set_bool(repo, "core.ignorecase", false);
-
- repo = cl_git_sandbox_reopen();
-
- /* Actually returns GIT_STATUS_IGNORED on Windows */
- cl_git_fail_with(git_status_file(&status, repo, "NEW_FILE"), GIT_ENOTFOUND);
-
- cl_git_pass(git_repository_index(&index, repo));
-
- cl_git_pass(git_index_add_bypath(index, "new_file"));
- cl_git_pass(git_index_write(index));
- git_index_free(index);
-
- /* Actually returns GIT_STATUS_IGNORED on Windows */
- cl_git_fail_with(git_status_file(&status, repo, "NEW_FILE"), GIT_ENOTFOUND);
-}
-
-void test_status_worktree__simple_delete(void)
-{
- git_repository *repo = cl_git_sandbox_init("renames");
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- int count;
-
- opts.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED |
- GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH |
- GIT_STATUS_OPT_EXCLUDE_SUBMODULES |
- GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS;
-
- count = 0;
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__count, &count) );
- cl_assert_equal_i(0, count);
-
- cl_must_pass(p_unlink("renames/untimely.txt"));
-
- count = 0;
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__count, &count) );
- cl_assert_equal_i(1, count);
-}
-
-void test_status_worktree__simple_delete_indexed(void)
-{
- git_repository *repo = cl_git_sandbox_init("renames");
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- git_status_list *status;
-
- opts.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED |
- GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH |
- GIT_STATUS_OPT_EXCLUDE_SUBMODULES |
- GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS;
-
- cl_git_pass(git_status_list_new(&status, repo, &opts));
- cl_assert_equal_sz(0, git_status_list_entrycount(status));
- git_status_list_free(status);
-
- cl_must_pass(p_unlink("renames/untimely.txt"));
-
- cl_git_pass(git_status_list_new(&status, repo, &opts));
- cl_assert_equal_sz(1, git_status_list_entrycount(status));
- cl_assert_equal_i(
- GIT_STATUS_WT_DELETED, git_status_byindex(status, 0)->status);
- git_status_list_free(status);
-}
-
-static const char *icase_paths[] = { "B", "c", "g", "H" };
-static unsigned int icase_statuses[] = {
- GIT_STATUS_WT_MODIFIED, GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_MODIFIED, GIT_STATUS_WT_DELETED,
-};
-
-static const char *case_paths[] = { "B", "H", "c", "g" };
-static unsigned int case_statuses[] = {
- GIT_STATUS_WT_MODIFIED, GIT_STATUS_WT_DELETED,
- GIT_STATUS_WT_DELETED, GIT_STATUS_WT_MODIFIED,
-};
-
-void test_status_worktree__sorting_by_case(void)
-{
- git_repository *repo = cl_git_sandbox_init("icase");
- git_index *index;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- bool native_ignore_case;
- status_entry_counts counts;
-
- cl_git_pass(git_repository_index(&index, repo));
- native_ignore_case =
- (git_index_caps(index) & GIT_INDEXCAP_IGNORE_CASE) != 0;
- git_index_free(index);
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_entry_count = 0;
- counts.expected_paths = NULL;
- counts.expected_statuses = NULL;
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__normal, &counts));
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-
- cl_git_rewritefile("icase/B", "new stuff");
- cl_must_pass(p_unlink("icase/c"));
- cl_git_rewritefile("icase/g", "new stuff");
- cl_must_pass(p_unlink("icase/H"));
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_entry_count = 4;
- if (native_ignore_case) {
- counts.expected_paths = icase_paths;
- counts.expected_statuses = icase_statuses;
- } else {
- counts.expected_paths = case_paths;
- counts.expected_statuses = case_statuses;
- }
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__normal, &counts));
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-
- opts.flags = GIT_STATUS_OPT_SORT_CASE_SENSITIVELY;
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_entry_count = 4;
- counts.expected_paths = case_paths;
- counts.expected_statuses = case_statuses;
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__normal, &counts));
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-
- opts.flags = GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY;
-
- memset(&counts, 0, sizeof(counts));
- counts.expected_entry_count = 4;
- counts.expected_paths = icase_paths;
- counts.expected_statuses = icase_statuses;
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__normal, &counts));
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-}
-
-void test_status_worktree__long_filenames(void)
-{
- char path[260*4+1];
- const char *expected_paths[] = {path};
- const unsigned int expected_statuses[] = {GIT_STATUS_WT_NEW};
-
- git_repository *repo = cl_git_sandbox_init("empty_standard_repo");
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- status_entry_counts counts = {0};
-
- // Create directory with amazingly long filename
- sprintf(path, "empty_standard_repo/%s", longname);
- cl_git_pass(git_futils_mkdir_r(path, NULL, 0777));
- sprintf(path, "empty_standard_repo/%s/foo", longname);
- cl_git_mkfile(path, "dummy");
-
- sprintf(path, "%s/foo", longname);
- counts.expected_entry_count = 1;
- counts.expected_paths = expected_paths;
- counts.expected_statuses = expected_statuses;
-
- opts.show = GIT_STATUS_SHOW_WORKDIR_ONLY;
- opts.flags = GIT_STATUS_OPT_DEFAULTS;
-
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__normal, &counts) );
- cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
- cl_assert_equal_i(0, counts.wrong_status_flags_count);
- cl_assert_equal_i(0, counts.wrong_sorted_path);
-}
-
diff --git a/tests-clar/status/worktree_init.c b/tests-clar/status/worktree_init.c
deleted file mode 100644
index 296c27c86..000000000
--- a/tests-clar/status/worktree_init.c
+++ /dev/null
@@ -1,341 +0,0 @@
-#include "clar_libgit2.h"
-#include "git2/sys/repository.h"
-
-#include "fileops.h"
-#include "ignore.h"
-#include "status_helpers.h"
-#include "posix.h"
-#include "util.h"
-#include "path.h"
-
-static void cleanup_new_repo(void *path)
-{
- cl_fixture_cleanup((char *)path);
-}
-
-void test_status_worktree_init__cannot_retrieve_the_status_of_a_bare_repository(void)
-{
- git_repository *repo;
- unsigned int status = 0;
-
- cl_git_pass(git_repository_open(&repo, cl_fixture("testrepo.git")));
- cl_assert_equal_i(GIT_EBAREREPO, git_status_file(&status, repo, "dummy"));
- git_repository_free(repo);
-}
-
-void test_status_worktree_init__first_commit_in_progress(void)
-{
- git_repository *repo;
- git_index *index;
- status_entry_single result;
-
- cl_set_cleanup(&cleanup_new_repo, "getting_started");
-
- cl_git_pass(git_repository_init(&repo, "getting_started", 0));
- cl_git_mkfile("getting_started/testfile.txt", "content\n");
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(1, result.count);
- cl_assert(result.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_repository_index(&index, repo));
- cl_git_pass(git_index_add_bypath(index, "testfile.txt"));
- cl_git_pass(git_index_write(index));
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(1, result.count);
- cl_assert(result.status == GIT_STATUS_INDEX_NEW);
-
- git_index_free(index);
- git_repository_free(repo);
-}
-
-
-
-void test_status_worktree_init__status_file_without_index_or_workdir(void)
-{
- git_repository *repo;
- unsigned int status = 0;
- git_index *index;
-
- cl_git_pass(p_mkdir("wd", 0777));
-
- cl_git_pass(git_repository_open(&repo, cl_fixture("testrepo.git")));
- cl_git_pass(git_repository_set_workdir(repo, "wd", false));
-
- cl_git_pass(git_index_open(&index, "empty-index"));
- cl_assert_equal_i(0, (int)git_index_entrycount(index));
- git_repository_set_index(repo, index);
-
- cl_git_pass(git_status_file(&status, repo, "branch_file.txt"));
-
- cl_assert_equal_i(GIT_STATUS_INDEX_DELETED, status);
-
- git_repository_free(repo);
- git_index_free(index);
- cl_git_pass(p_rmdir("wd"));
-}
-
-static void fill_index_wth_head_entries(git_repository *repo, git_index *index)
-{
- git_oid oid;
- git_commit *commit;
- git_tree *tree;
-
- cl_git_pass(git_reference_name_to_id(&oid, repo, "HEAD"));
- cl_git_pass(git_commit_lookup(&commit, repo, &oid));
- cl_git_pass(git_commit_tree(&tree, commit));
-
- cl_git_pass(git_index_read_tree(index, tree));
- cl_git_pass(git_index_write(index));
-
- git_tree_free(tree);
- git_commit_free(commit);
-}
-
-void test_status_worktree_init__status_file_with_clean_index_and_empty_workdir(void)
-{
- git_repository *repo;
- unsigned int status = 0;
- git_index *index;
-
- cl_git_pass(p_mkdir("wd", 0777));
-
- cl_git_pass(git_repository_open(&repo, cl_fixture("testrepo.git")));
- cl_git_pass(git_repository_set_workdir(repo, "wd", false));
-
- cl_git_pass(git_index_open(&index, "my-index"));
- fill_index_wth_head_entries(repo, index);
-
- git_repository_set_index(repo, index);
-
- cl_git_pass(git_status_file(&status, repo, "branch_file.txt"));
-
- cl_assert_equal_i(GIT_STATUS_WT_DELETED, status);
-
- git_repository_free(repo);
- git_index_free(index);
- cl_git_pass(p_rmdir("wd"));
- cl_git_pass(p_unlink("my-index"));
-}
-
-void test_status_worktree_init__bracket_in_filename(void)
-{
- git_repository *repo;
- git_index *index;
- status_entry_single result;
- unsigned int status_flags;
- int error;
-
- #define FILE_WITH_BRACKET "LICENSE[1].md"
- #define FILE_WITHOUT_BRACKET "LICENSE1.md"
-
- cl_set_cleanup(&cleanup_new_repo, "with_bracket");
-
- cl_git_pass(git_repository_init(&repo, "with_bracket", 0));
- cl_git_mkfile("with_bracket/" FILE_WITH_BRACKET, "I have a bracket in my name\n");
-
- /* file is new to working directory */
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(1, result.count);
- cl_assert(result.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_file(&status_flags, repo, FILE_WITH_BRACKET));
- cl_assert(status_flags == GIT_STATUS_WT_NEW);
-
- /* ignore the file */
-
- cl_git_rewritefile("with_bracket/.gitignore", "*.md\n.gitignore\n");
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(2, result.count);
- cl_assert(result.status == GIT_STATUS_IGNORED);
-
- cl_git_pass(git_status_file(&status_flags, repo, FILE_WITH_BRACKET));
- cl_assert(status_flags == GIT_STATUS_IGNORED);
-
- /* don't ignore the file */
-
- cl_git_rewritefile("with_bracket/.gitignore", ".gitignore\n");
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(2, result.count);
- cl_assert(result.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_file(&status_flags, repo, FILE_WITH_BRACKET));
- cl_assert(status_flags == GIT_STATUS_WT_NEW);
-
- /* add the file to the index */
-
- cl_git_pass(git_repository_index(&index, repo));
- cl_git_pass(git_index_add_bypath(index, FILE_WITH_BRACKET));
- cl_git_pass(git_index_write(index));
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(2, result.count);
- cl_assert(result.status == GIT_STATUS_INDEX_NEW);
-
- cl_git_pass(git_status_file(&status_flags, repo, FILE_WITH_BRACKET));
- cl_assert(status_flags == GIT_STATUS_INDEX_NEW);
-
- /* Create file without bracket */
-
- cl_git_mkfile("with_bracket/" FILE_WITHOUT_BRACKET, "I have no bracket in my name!\n");
-
- cl_git_pass(git_status_file(&status_flags, repo, FILE_WITHOUT_BRACKET));
- cl_assert(status_flags == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_file(&status_flags, repo, "LICENSE\\[1\\].md"));
- cl_assert(status_flags == GIT_STATUS_INDEX_NEW);
-
- error = git_status_file(&status_flags, repo, FILE_WITH_BRACKET);
- cl_git_fail(error);
- cl_assert_equal_i(GIT_EAMBIGUOUS, error);
-
- git_index_free(index);
- git_repository_free(repo);
-}
-
-void test_status_worktree_init__space_in_filename(void)
-{
- git_repository *repo;
- git_index *index;
- status_entry_single result;
- unsigned int status_flags;
-
-#define FILE_WITH_SPACE "LICENSE - copy.md"
-
- cl_set_cleanup(&cleanup_new_repo, "with_space");
- cl_git_pass(git_repository_init(&repo, "with_space", 0));
- cl_git_mkfile("with_space/" FILE_WITH_SPACE, "I have a space in my name\n");
-
- /* file is new to working directory */
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(1, result.count);
- cl_assert(result.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_file(&status_flags, repo, FILE_WITH_SPACE));
- cl_assert(status_flags == GIT_STATUS_WT_NEW);
-
- /* ignore the file */
-
- cl_git_rewritefile("with_space/.gitignore", "*.md\n.gitignore\n");
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(2, result.count);
- cl_assert(result.status == GIT_STATUS_IGNORED);
-
- cl_git_pass(git_status_file(&status_flags, repo, FILE_WITH_SPACE));
- cl_assert(status_flags == GIT_STATUS_IGNORED);
-
- /* don't ignore the file */
-
- cl_git_rewritefile("with_space/.gitignore", ".gitignore\n");
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(2, result.count);
- cl_assert(result.status == GIT_STATUS_WT_NEW);
-
- cl_git_pass(git_status_file(&status_flags, repo, FILE_WITH_SPACE));
- cl_assert(status_flags == GIT_STATUS_WT_NEW);
-
- /* add the file to the index */
-
- cl_git_pass(git_repository_index(&index, repo));
- cl_git_pass(git_index_add_bypath(index, FILE_WITH_SPACE));
- cl_git_pass(git_index_write(index));
-
- memset(&result, 0, sizeof(result));
- cl_git_pass(git_status_foreach(repo, cb_status__single, &result));
- cl_assert_equal_i(2, result.count);
- cl_assert(result.status == GIT_STATUS_INDEX_NEW);
-
- cl_git_pass(git_status_file(&status_flags, repo, FILE_WITH_SPACE));
- cl_assert(status_flags == GIT_STATUS_INDEX_NEW);
-
- git_index_free(index);
- git_repository_free(repo);
-}
-
-static int cb_status__expected_path(const char *p, unsigned int s, void *payload)
-{
- const char *expected_path = (const char *)payload;
-
- GIT_UNUSED(s);
-
- if (payload == NULL)
- cl_fail("Unexpected path");
-
- cl_assert_equal_s(expected_path, p);
-
- return 0;
-}
-
-void test_status_worktree_init__disable_pathspec_match(void)
-{
- git_repository *repo;
- git_status_options opts = GIT_STATUS_OPTIONS_INIT;
- char *file_with_bracket = "LICENSE[1].md",
- *imaginary_file_with_bracket = "LICENSE[1-2].md";
-
- cl_set_cleanup(&cleanup_new_repo, "pathspec");
- cl_git_pass(git_repository_init(&repo, "pathspec", 0));
- cl_git_mkfile("pathspec/LICENSE[1].md", "screaming bracket\n");
- cl_git_mkfile("pathspec/LICENSE1.md", "no bracket\n");
-
- opts.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED |
- GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH;
- opts.pathspec.count = 1;
- opts.pathspec.strings = &file_with_bracket;
-
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__expected_path,
- file_with_bracket)
- );
-
- /* Test passing a pathspec matching files in the workdir. */
- /* Must not match because pathspecs are disabled. */
- opts.pathspec.strings = &imaginary_file_with_bracket;
- cl_git_pass(
- git_status_foreach_ext(repo, &opts, cb_status__expected_path, NULL)
- );
-
- git_repository_free(repo);
-}
-
-void test_status_worktree_init__new_staged_file_must_handle_crlf(void)
-{
- git_repository *repo;
- git_index *index;
- unsigned int status;
-
- cl_set_cleanup(&cleanup_new_repo, "getting_started");
- cl_git_pass(git_repository_init(&repo, "getting_started", 0));
-
- /* Ensure that repo has core.autocrlf=true */
- cl_repo_set_bool(repo, "core.autocrlf", true);
-
- cl_git_mkfile("getting_started/testfile.txt", "content\r\n"); /* Content with CRLF */
-
- cl_git_pass(git_repository_index(&index, repo));
- cl_git_pass(git_index_add_bypath(index, "testfile.txt"));
- cl_git_pass(git_index_write(index));
-
- cl_git_pass(git_status_file(&status, repo, "testfile.txt"));
- cl_assert_equal_i(GIT_STATUS_INDEX_NEW, status);
-
- git_index_free(index);
- git_repository_free(repo);
-}
-