summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Lapalme <lapfelix@users.noreply.github.com>2020-02-02 01:00:15 -0500
committerEdward Thomson <ethomson@edwardthomson.com>2020-05-10 23:47:20 +0100
commit24bd12c4f91f841b70bd65252aa25b221bf63eb5 (patch)
tree99a4812d81eed89724ac1a2e61062b26889790aa
parent02d27f61737b2f77967e6f5beeb3a2ace629d9c4 (diff)
downloadlibgit2-24bd12c4f91f841b70bd65252aa25b221bf63eb5.tar.gz
Create test case demonstrating checkout bug w/ pathspec match disabled
-rw-r--r--tests/checkout/index.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/checkout/index.c b/tests/checkout/index.c
index a76c471e8..1a93d3591 100644
--- a/tests/checkout/index.c
+++ b/tests/checkout/index.c
@@ -89,6 +89,65 @@ void test_checkout_index__can_remove_untracked_files(void)
cl_assert_equal_i(false, git_path_isdir("./testrepo/dir"));
}
+void test_checkout_index__can_disable_pathspec_match(void)
+{
+ static git_index *index;
+ git_oid commit_id;
+ git_checkout_options g_opts = GIT_CHECKOUT_OPTIONS_INIT;
+ git_object *g_object;
+
+ char *files_to_checkout[] = { "test11.txt", "test12.txt"};
+ size_t files_to_checkout_size = 2;
+
+ /* reset to beginning of history (i.e. just a README file) */
+ g_opts.checkout_strategy =
+ GIT_CHECKOUT_FORCE | GIT_CHECKOUT_REMOVE_UNTRACKED;
+
+ cl_git_pass(git_revparse_single(&g_object, g_repo, "8496071c1b46c854b31185ea97743be6a8774479"));
+ cl_git_pass(git_checkout_tree(g_repo, g_object, &g_opts));
+ cl_git_pass(
+ git_repository_set_head_detached(g_repo, git_object_id(g_object)));
+ git_object_free(g_object);
+ g_object = NULL;
+
+ cl_git_pass(git_repository_index(&index, g_repo));
+
+ /* We create 4 files and commit them */
+ cl_git_mkfile("testrepo/test9.txt", "original\n");
+ cl_git_mkfile("testrepo/test10.txt", "original\n");
+ cl_git_mkfile("testrepo/test11.txt", "original\n");
+ cl_git_mkfile("testrepo/test12.txt", "original\n");
+
+ cl_git_pass(git_index_add_bypath(index, "test9.txt"));
+ cl_git_pass(git_index_add_bypath(index, "test10.txt"));
+ cl_git_pass(git_index_add_bypath(index, "test11.txt"));
+ cl_git_pass(git_index_add_bypath(index, "test12.txt"));
+ cl_git_pass(git_index_write(index));
+
+ cl_repo_commit_from_index(&commit_id, g_repo, NULL, 0, "commit our test files");
+
+ /* We modify the content of all 4 of our files */
+ cl_git_rewritefile("testrepo/test9.txt", "modified\n");
+ cl_git_rewritefile("testrepo/test10.txt", "modified\n");
+ cl_git_rewritefile("testrepo/test11.txt", "modified\n");
+ cl_git_rewritefile("testrepo/test12.txt", "modified\n");
+
+ /* We checkout only test10.txt and test11.txt */
+ g_opts.checkout_strategy =
+ GIT_CHECKOUT_FORCE | GIT_CHECKOUT_REMOVE_UNTRACKED |
+ GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH;
+ g_opts.paths.strings = files_to_checkout;
+ g_opts.paths.count = files_to_checkout_size;
+ cl_git_pass(git_checkout_index(g_repo, NULL, &g_opts));
+
+ /* The only files that have been reverted to their original content
+ should be test10.txt and test11.txt */
+ check_file_contents("testrepo/test9.txt", "modified\n");
+ check_file_contents("testrepo/test10.txt", "original\n");
+ check_file_contents("testrepo/test11.txt", "original\n");
+ check_file_contents("testrepo/test12.txt", "modified\n");
+}
+
void test_checkout_index__honor_the_specified_pathspecs(void)
{
git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;