void test_status_worktree__at_head_parent(void) { git_repository *repo = cl_git_sandbox_init("empty_standard_repo"); git_status_options opts = GIT_STATUS_OPTIONS_INIT; git_status_list *statuslist; git_tree *parent_tree; const git_status_entry *status; cl_git_mkfile("empty_standard_repo/file1", "ping"); stage_and_commit(repo, "file1"); cl_git_pass(git_repository_head_tree(&parent_tree, repo)); cl_git_mkfile("empty_standard_repo/file2", "pong"); stage_and_commit(repo, "file2"); cl_git_rewritefile("empty_standard_repo/file2", "pyng"); opts.show = GIT_STATUS_SHOW_INDEX_AND_WORKDIR; opts.baseline = parent_tree; cl_git_pass(git_status_list_new(&statuslist, repo, &opts)); cl_assert_equal_sz(1, git_status_list_entrycount(statuslist)); status = git_status_byindex(statuslist, 0); cl_assert(status != NULL); cl_assert_equal_s("file2", status->index_to_workdir->old_file.path); cl_assert_equal_i(GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_NEW, status->status); git_tree_free(parent_tree); git_status_list_free(statuslist); }
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__within_subdir(void) { status_entry_counts counts; git_repository *repo = cl_git_sandbox_init("status"); git_status_options opts = GIT_STATUS_OPTIONS_INIT; char *paths[] = { "zzz_new_dir" }; git_strarray pathsArray; /* first alter the contents of the worktree */ cl_git_mkfile("status/.new_file", "dummy"); cl_git_pass(git_futils_mkdir_r("status/zzz_new_dir", 0777)); cl_git_mkfile("status/zzz_new_dir/new_file", "dummy"); cl_git_mkfile("status/zzz_new_file", "dummy"); cl_git_mkfile("status/wut", "dummy"); stage_and_commit(repo, "zzz_new_dir/new_file"); /* 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; counts.debug = true; opts.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED | GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS | GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH; pathsArray.count = 1; pathsArray.strings = paths; opts.pathspec = pathsArray; // We committed zzz_new_dir/new_file above. It shouldn't be reported. cl_git_pass( git_status_foreach_ext(repo, &opts, cb_status__normal, &counts) ); cl_assert_equal_i(0, counts.entry_count); cl_assert_equal_i(0, counts.wrong_status_flags_count); cl_assert_equal_i(0, counts.wrong_sorted_path); }