diff --git a/tests/checkout/nasty.c b/tests/checkout/nasty.c index c07d9382a..bc25a3b52 100644 --- a/tests/checkout/nasty.c +++ b/tests/checkout/nasty.c @@ -23,7 +23,29 @@ void test_checkout_nasty__cleanup(void) cl_git_sandbox_cleanup(); } -void test_checkout_fails(const char *refname, const char *filename) +static void test_checkout_passes(const char *refname, const char *filename) +{ + git_oid commit_id; + git_commit *commit; + git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT; + git_buf path = GIT_BUF_INIT; + + cl_git_pass(git_buf_joinpath(&path, repo_name, filename)); + + cl_git_pass(git_reference_name_to_id(&commit_id, repo, refname)); + cl_git_pass(git_commit_lookup(&commit, repo, &commit_id)); + + opts.checkout_strategy = GIT_CHECKOUT_FORCE | + GIT_CHECKOUT_DONT_UPDATE_INDEX; + + cl_git_pass(git_checkout_tree(repo, (const git_object *)commit, &opts)); + cl_assert(!git_path_exists(path.ptr)); + + git_commit_free(commit); + git_buf_free(&path); +} + +static void test_checkout_fails(const char *refname, const char *filename) { git_oid commit_id; git_commit *commit; @@ -323,3 +345,19 @@ void test_checkout_nasty__honors_core_protectntfs(void) test_checkout_fails("refs/heads/dot_git_dot", ".git/foobar"); test_checkout_fails("refs/heads/git_tilde1", ".git/foobar"); } + +void test_checkout_nasty__symlink1(void) +{ + test_checkout_passes("refs/heads/symlink1", ".git/foobar"); +} + +void test_checkout_nasty__symlink2(void) +{ + test_checkout_passes("refs/heads/symlink2", ".git/foobar"); +} + +void test_checkout_nasty__symlink3(void) +{ + test_checkout_passes("refs/heads/symlink3", ".git/foobar"); +} + diff --git a/tests/resources/nasty/.gitted/objects/14/e70ab559b4c6a8a6fc9b6f538bd1f3934be725 b/tests/resources/nasty/.gitted/objects/14/e70ab559b4c6a8a6fc9b6f538bd1f3934be725 new file mode 100644 index 000000000..371951aac Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/14/e70ab559b4c6a8a6fc9b6f538bd1f3934be725 differ diff --git a/tests/resources/nasty/.gitted/objects/19/1381ee74dec49c89f99a62d055cb1058ba0de9 b/tests/resources/nasty/.gitted/objects/19/1381ee74dec49c89f99a62d055cb1058ba0de9 new file mode 100644 index 000000000..f1619a22e Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/19/1381ee74dec49c89f99a62d055cb1058ba0de9 differ diff --git a/tests/resources/nasty/.gitted/objects/1b/31d55e0c53efbea6c670ece9057b76b5822eea b/tests/resources/nasty/.gitted/objects/1b/31d55e0c53efbea6c670ece9057b76b5822eea deleted file mode 100644 index 20ede1bab..000000000 Binary files a/tests/resources/nasty/.gitted/objects/1b/31d55e0c53efbea6c670ece9057b76b5822eea and /dev/null differ diff --git a/tests/resources/nasty/.gitted/objects/4d/83272d0d372e1232ddc4ff3260d76fdfa2015a b/tests/resources/nasty/.gitted/objects/4d/83272d0d372e1232ddc4ff3260d76fdfa2015a new file mode 100644 index 000000000..d362f1dce Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/4d/83272d0d372e1232ddc4ff3260d76fdfa2015a differ diff --git a/tests/resources/nasty/.gitted/objects/7b/b1dd08b2c7d73084934954e4196e67004b0279 b/tests/resources/nasty/.gitted/objects/7b/b1dd08b2c7d73084934954e4196e67004b0279 new file mode 100644 index 000000000..e6640e6c7 Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/7b/b1dd08b2c7d73084934954e4196e67004b0279 differ diff --git a/tests/resources/nasty/.gitted/objects/91/cd2c95af92883550b45fcc838013ae7e2954df b/tests/resources/nasty/.gitted/objects/91/cd2c95af92883550b45fcc838013ae7e2954df new file mode 100644 index 000000000..da9d5c467 Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/91/cd2c95af92883550b45fcc838013ae7e2954df differ diff --git a/tests/resources/nasty/.gitted/objects/9d/5898503adc01d763e279ac8fcefbe865b19031 b/tests/resources/nasty/.gitted/objects/9d/5898503adc01d763e279ac8fcefbe865b19031 new file mode 100644 index 000000000..7cb310622 Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/9d/5898503adc01d763e279ac8fcefbe865b19031 differ diff --git a/tests/resources/nasty/.gitted/objects/a0/d89aa95628fcd6b64fd5b23dd56b906b06bfe2 b/tests/resources/nasty/.gitted/objects/a0/d89aa95628fcd6b64fd5b23dd56b906b06bfe2 new file mode 100644 index 000000000..c1de43b2a Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/a0/d89aa95628fcd6b64fd5b23dd56b906b06bfe2 differ diff --git a/tests/resources/nasty/.gitted/objects/a7/8dde970cffbb71d67bef2a74aa72c6621d9819 b/tests/resources/nasty/.gitted/objects/a7/8dde970cffbb71d67bef2a74aa72c6621d9819 new file mode 100644 index 000000000..78c2fe4f8 Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/a7/8dde970cffbb71d67bef2a74aa72c6621d9819 differ diff --git a/tests/resources/nasty/.gitted/objects/ac/84d85a425b2a21fd0ffccacac6c48823fc98c8 b/tests/resources/nasty/.gitted/objects/ac/84d85a425b2a21fd0ffccacac6c48823fc98c8 new file mode 100644 index 000000000..b08e24740 Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/ac/84d85a425b2a21fd0ffccacac6c48823fc98c8 differ diff --git a/tests/resources/nasty/.gitted/objects/bc/e2dabe5766838216d95f199d95aa4fd479a084 b/tests/resources/nasty/.gitted/objects/bc/e2dabe5766838216d95f199d95aa4fd479a084 new file mode 100644 index 000000000..b1eab1005 Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/bc/e2dabe5766838216d95f199d95aa4fd479a084 differ diff --git a/tests/resources/nasty/.gitted/objects/cf/6fcf8cdf7e8d4cda3b11b0ba02d0d5125fbbd7 b/tests/resources/nasty/.gitted/objects/cf/6fcf8cdf7e8d4cda3b11b0ba02d0d5125fbbd7 new file mode 100644 index 000000000..f65e8ff6e Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/cf/6fcf8cdf7e8d4cda3b11b0ba02d0d5125fbbd7 differ diff --git a/tests/resources/nasty/.gitted/objects/e5/1c3fa44fe981ec290c8f47fea736f3ff2af2a6 b/tests/resources/nasty/.gitted/objects/e5/1c3fa44fe981ec290c8f47fea736f3ff2af2a6 new file mode 100644 index 000000000..3d12f3a80 Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/e5/1c3fa44fe981ec290c8f47fea736f3ff2af2a6 differ diff --git a/tests/resources/nasty/.gitted/objects/e8/68b1d6833710021785581a9e11dba8468f3a55 b/tests/resources/nasty/.gitted/objects/e8/68b1d6833710021785581a9e11dba8468f3a55 new file mode 100644 index 000000000..8311ad31b Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/e8/68b1d6833710021785581a9e11dba8468f3a55 differ diff --git a/tests/resources/nasty/.gitted/refs/heads/symlink1 b/tests/resources/nasty/.gitted/refs/heads/symlink1 new file mode 100644 index 000000000..efa2e88b6 Binary files /dev/null and b/tests/resources/nasty/.gitted/refs/heads/symlink1 differ diff --git a/tests/resources/nasty/.gitted/refs/heads/symlink2 b/tests/resources/nasty/.gitted/refs/heads/symlink2 new file mode 100644 index 000000000..e4f3d6067 Binary files /dev/null and b/tests/resources/nasty/.gitted/refs/heads/symlink2 differ diff --git a/tests/resources/nasty/.gitted/refs/heads/symlink3 b/tests/resources/nasty/.gitted/refs/heads/symlink3 new file mode 100644 index 000000000..2b33e4ff7 Binary files /dev/null and b/tests/resources/nasty/.gitted/refs/heads/symlink3 differ