void test_status_ignore__adding_internal_ignores(void) { g_repo = cl_git_sandbox_init("empty_standard_repo"); refute_is_ignored("one.txt"); refute_is_ignored("two.bar"); cl_git_pass(git_ignore_add_rule(g_repo, "*.nomatch\n")); refute_is_ignored("one.txt"); refute_is_ignored("two.bar"); cl_git_pass(git_ignore_add_rule(g_repo, "*.txt\n")); assert_is_ignored("one.txt"); refute_is_ignored("two.bar"); cl_git_pass(git_ignore_add_rule(g_repo, "*.bar\n")); assert_is_ignored("one.txt"); assert_is_ignored("two.bar"); cl_git_pass(git_ignore_clear_internal_rules(g_repo)); refute_is_ignored("one.txt"); refute_is_ignored("two.bar"); cl_git_pass(git_ignore_add_rule( g_repo, "multiple\n*.rules\n# comment line\n*.bar\n")); refute_is_ignored("one.txt"); assert_is_ignored("two.bar"); }
void test_status_ignore__internal_ignores_inside_deep_paths(void) { 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)); assert_is_ignored("Debug"); assert_is_ignored("and/Debug"); assert_is_ignored("really/Debug/this/file"); assert_is_ignored("Debug/what/I/say"); refute_is_ignored("and/NoDebug"); refute_is_ignored("NoDebug/this"); refute_is_ignored("please/NoDebug/this"); assert_is_ignored("this/is/deep"); /* pattern containing slash gets FNM_PATHNAME so all slashes must match */ refute_is_ignored("and/this/is/deep"); assert_is_ignored("this/is/deep/too"); /* pattern containing slash gets FNM_PATHNAME so all slashes must match */ refute_is_ignored("but/this/is/deep/and/ignored"); refute_is_ignored("this/is/not/deep"); refute_is_ignored("is/this/not/as/deep"); refute_is_ignored("this/is/deepish"); refute_is_ignored("xthis/is/deep"); }
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) { 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)); assert_is_ignored("one.tmp"); refute_is_ignored("two.bar"); }
void test_stash_save__ignored_directory(void) { cl_git_pass(p_mkdir("stash/ignored_directory", 0777)); cl_git_pass(p_mkdir("stash/ignored_directory/sub", 0777)); cl_git_mkfile("stash/ignored_directory/sub/some_file", "stuff"); assert_status(repo, "ignored_directory/sub/some_file", GIT_STATUS_WT_NEW); cl_git_pass(git_ignore_add_rule(repo, "ignored_directory/")); assert_status(repo, "ignored_directory/sub/some_file", GIT_STATUS_IGNORED); cl_git_pass(git_stash_save(&stash_tip_oid, repo, signature, NULL, GIT_STASH_INCLUDE_UNTRACKED | GIT_STASH_INCLUDE_IGNORED)); cl_assert(!git_path_exists("stash/ignored_directory/sub/some_file")); cl_assert(!git_path_exists("stash/ignored_directory/sub")); cl_assert(!git_path_exists("stash/ignored_directory")); }
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")); }
void test_status_ignore__automatically_ignore_bad_files(void) { g_repo = cl_git_sandbox_init("empty_standard_repo"); assert_is_ignored(".git"); assert_is_ignored("this/file/."); assert_is_ignored("path/../funky"); refute_is_ignored("path/whatever.c"); cl_git_pass(git_ignore_add_rule(g_repo, "*.c\n")); assert_is_ignored(".git"); assert_is_ignored("this/file/."); assert_is_ignored("path/../funky"); assert_is_ignored("path/whatever.c"); cl_git_pass(git_ignore_clear_internal_rules(g_repo)); assert_is_ignored(".git"); assert_is_ignored("this/file/."); assert_is_ignored("path/../funky"); refute_is_ignored("path/whatever.c"); }
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); }
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; }