void test_status_ignore__subdir_doesnt_match_above(void) { int ignored, icase = 0, error; git_config *cfg; g_repo = cl_git_sandbox_init("empty_standard_repo"); cl_git_pass(git_repository_config_snapshot(&cfg, g_repo)); error = git_config_get_bool(&icase, cfg, "core.ignorecase"); git_config_free(cfg); if (error == GIT_ENOTFOUND) error = 0; cl_git_pass(error); cl_git_pass(p_mkdir("empty_standard_repo/src", 0777)); cl_git_pass(p_mkdir("empty_standard_repo/src/src", 0777)); cl_git_mkfile("empty_standard_repo/src/.gitignore", "src\n"); cl_git_mkfile("empty_standard_repo/.gitignore", ""); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "src/test.txt")); cl_assert_equal_i(0, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "src/src/test.txt")); cl_assert_equal_i(1, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "src/foo/test.txt")); cl_assert_equal_i(0, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "SRC/src/test.txt")); cl_assert_equal_i(icase, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "src/SRC/test.txt")); cl_assert_equal_i(icase, ignored); }
void test_status_ignore__deeper(void) { int ignored; g_repo = cl_git_sandbox_init("empty_standard_repo"); cl_git_mkfile("empty_standard_repo/.gitignore", "*.data\n" "!dont_ignore/*.data\n"); cl_git_pass(p_mkdir("empty_standard_repo/dont_ignore", 0777)); cl_git_mkfile("empty_standard_repo/foo.data", ""); cl_git_mkfile("empty_standard_repo/bar.data", ""); cl_git_mkfile("empty_standard_repo/dont_ignore/foo.data", ""); cl_git_mkfile("empty_standard_repo/dont_ignore/bar.data", ""); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "foo.data")); cl_assert_equal_i(1, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "bar.data")); cl_assert_equal_i(1, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "dont_ignore/foo.data")); cl_assert_equal_i(0, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "dont_ignore/bar.data")); cl_assert_equal_i(0, ignored); }
void test_status_ignore__filename_with_cr(void) { int ignored; g_repo = cl_git_sandbox_init("empty_standard_repo"); cl_git_mkfile("empty_standard_repo/.gitignore", "Icon\r\r\n"); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "Icon\r")); cl_assert_equal_i(1, ignored); cl_git_mkfile("empty_standard_repo/.gitignore", "Ico\rn\n"); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "Ico\rn")); cl_assert_equal_i(1, ignored); cl_git_mkfile("empty_standard_repo/.gitignore", "Ico\rn\r\n"); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "Ico\rn")); cl_assert_equal_i(1, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "Ico\rn\r")); cl_assert_equal_i(0, ignored); cl_git_mkfile("empty_standard_repo/.gitignore", "Ico\rn\r\r\n"); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "Ico\rn\r")); cl_assert_equal_i(1, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "Icon\r")); cl_assert_equal_i(0, ignored); cl_git_mkfile("empty_standard_repo/.gitignore", "Icon\r\n"); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "Icon\r")); cl_assert_equal_i(0, ignored); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "Icon")); cl_assert_equal_i(1, ignored); }
void assert_is_ignored(bool expected, const char *filepath) { int is_ignored; cl_git_pass(git_ignore_path_is_ignored(&is_ignored, g_repo, filepath)); cl_assert_equal_b(expected, is_ignored); }
void test_status_ignore__negate_exact_previous(void) { int ignored; g_repo = cl_git_sandbox_init("empty_standard_repo"); cl_git_mkfile("empty_standard_repo/.gitignore", "*.com\ntags\n!tags/\n.buildpath"); cl_git_mkfile("empty_standard_repo/.buildpath", ""); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, ".buildpath")); cl_assert_equal_i(1, ignored); }
static void assert_is_ignored_( bool expected, const char *filepath, const char *file, int line) { int is_ignored = 0; cl_git_expect( git_ignore_path_is_ignored(&is_ignored, g_repo, filepath), 0, file, line); clar__assert_equal( file, line, "expected != is_ignored", 1, "%d", (int)(expected != 0), (int)(is_ignored != 0)); }
void test_status_ignore__negate_starstar(void) { int ignored; g_repo = cl_git_sandbox_init("empty_standard_repo"); cl_git_mkfile("empty_standard_repo/.gitignore", "code/projects/**/packages/*\n" "!code/projects/**/packages/repositories.config"); cl_git_pass(git_futils_mkdir_r("empty_standard_repo/code/projects/foo/bar/packages", 0777)); cl_git_mkfile("empty_standard_repo/code/projects/foo/bar/packages/repositories.config", ""); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "code/projects/foo/bar/packages/repositories.config")); cl_assert_equal_i(0, ignored); }
void test_checkout_tree__can_remove_ignored(void) { git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT; int ignored = 0; opts.checkout_strategy = GIT_CHECKOUT_SAFE | GIT_CHECKOUT_REMOVE_IGNORED; cl_git_mkfile("testrepo/ignored_file", "as you wish"); cl_git_pass(git_ignore_add_rule(g_repo, "ignored_file\n")); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "ignored_file")); cl_assert_equal_i(1, ignored); cl_assert(git_path_isfile("testrepo/ignored_file")); cl_git_pass(git_checkout_head(g_repo, &opts)); cl_assert(!git_path_isfile("testrepo/ignored_file")); }
static int checkout_tree_with_blob_ignored_in_workdir(int strategy, bool isdir) { git_oid oid; git_object *obj = NULL; git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT; int ignored = 0, error; assert_on_branch(g_repo, "master"); /* do first checkout with FORCE because we don't know if testrepo * base data is clean for a checkout or not */ opts.checkout_strategy = GIT_CHECKOUT_FORCE; cl_git_pass(git_reference_name_to_id(&oid, g_repo, "refs/heads/dir")); cl_git_pass(git_object_lookup(&obj, g_repo, &oid, GIT_OBJ_ANY)); cl_git_pass(git_checkout_tree(g_repo, obj, &opts)); cl_git_pass(git_repository_set_head(g_repo, "refs/heads/dir")); cl_assert(git_path_isfile("testrepo/README")); cl_assert(git_path_isfile("testrepo/branch_file.txt")); cl_assert(git_path_isfile("testrepo/new.txt")); cl_assert(git_path_isfile("testrepo/a/b.txt")); cl_assert(!git_path_isdir("testrepo/ab")); assert_on_branch(g_repo, "dir"); git_object_free(obj); opts.checkout_strategy = strategy; if (isdir) { cl_must_pass(p_mkdir("testrepo/ab", 0777)); cl_must_pass(p_mkdir("testrepo/ab/4.txt", 0777)); cl_git_mkfile("testrepo/ab/4.txt/file1.txt", "as you wish"); cl_git_mkfile("testrepo/ab/4.txt/file2.txt", "foo bar foo"); cl_git_mkfile("testrepo/ab/4.txt/file3.txt", "inky blinky pinky clyde"); cl_assert(git_path_isdir("testrepo/ab/4.txt")); } else { cl_must_pass(p_mkdir("testrepo/ab", 0777)); cl_git_mkfile("testrepo/ab/4.txt", "as you wish"); cl_assert(git_path_isfile("testrepo/ab/4.txt")); } cl_git_pass(git_ignore_add_rule(g_repo, "ab/4.txt\n")); cl_git_pass(git_ignore_path_is_ignored(&ignored, g_repo, "ab/4.txt")); cl_assert_equal_i(1, ignored); cl_git_pass(git_reference_name_to_id(&oid, g_repo, "refs/heads/subtrees")); cl_git_pass(git_object_lookup(&obj, g_repo, &oid, GIT_OBJ_ANY)); error = git_checkout_tree(g_repo, obj, &opts); git_object_free(obj); return error; }