summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/checkout/tree.c50
-rw-r--r--tests/resources/testrepo/.gitted/objects/6f/d5c7dd2ab27b48c493023f794be09861e9045f1
-rw-r--r--tests/resources/testrepo/.gitted/objects/c3/6d8ea75da8cb510fcb0c408c1d7e53f9a99dbebin0 -> 192 bytes
-rw-r--r--tests/resources/testrepo/.gitted/objects/e3/6900c3224db4adf4c7f7a09d4ac80247978a13bin0 -> 59 bytes
-rw-r--r--tests/resources/testrepo/.gitted/refs/heads/ident1
5 files changed, 52 insertions, 0 deletions
diff --git a/tests/checkout/tree.c b/tests/checkout/tree.c
index f37e6d359..42f32a8d9 100644
--- a/tests/checkout/tree.c
+++ b/tests/checkout/tree.c
@@ -1130,3 +1130,53 @@ void test_checkout_tree__can_collect_perfdata(void)
git_object_free(obj);
}
+
+void update_attr_callback(
+ const char *path,
+ size_t completed_steps,
+ size_t total_steps,
+ void *payload)
+{
+ if (path && strcmp(path, "ident1.txt") == 0)
+ cl_git_write2file("testrepo/.gitattributes",
+ "*.txt ident\n", 12, O_RDWR|O_CREAT, 0666);
+}
+
+void test_checkout_tree__caches_attributes_during_checkout(void)
+{
+ git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
+ git_oid oid;
+ git_object *obj = NULL;
+ git_buf ident1 = GIT_BUF_INIT, ident2 = GIT_BUF_INIT;
+ char *ident_paths[] = { "ident1.txt", "ident2.txt" };
+
+ opts.progress_cb = update_attr_callback;
+
+ assert_on_branch(g_repo, "master");
+ opts.checkout_strategy = GIT_CHECKOUT_FORCE;
+ opts.paths.strings = ident_paths;
+ opts.paths.count = 2;
+
+ cl_git_pass(git_reference_name_to_id(&oid, g_repo, "refs/heads/ident"));
+ 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_futils_readbuffer(&ident1, "testrepo/ident1.txt"));
+ cl_git_pass(git_futils_readbuffer(&ident2, "testrepo/ident2.txt"));
+
+ cl_assert_equal_strn(ident1.ptr, "# $Id$", 6);
+ cl_assert_equal_strn(ident2.ptr, "# $Id$", 6);
+
+ cl_git_pass(git_checkout_tree(g_repo, obj, &opts));
+
+ cl_git_pass(git_futils_readbuffer(&ident1, "testrepo/ident1.txt"));
+ cl_git_pass(git_futils_readbuffer(&ident2, "testrepo/ident2.txt"));
+
+ cl_assert_equal_strn(ident1.ptr, "# $Id: ", 7);
+ cl_assert_equal_strn(ident2.ptr, "# $Id: ", 7);
+
+ git_buf_free(&ident1);
+ git_buf_free(&ident2);
+ git_object_free(obj);
+}
diff --git a/tests/resources/testrepo/.gitted/objects/6f/d5c7dd2ab27b48c493023f794be09861e9045f b/tests/resources/testrepo/.gitted/objects/6f/d5c7dd2ab27b48c493023f794be09861e9045f
new file mode 100644
index 000000000..7f0c6fe4e
--- /dev/null
+++ b/tests/resources/testrepo/.gitted/objects/6f/d5c7dd2ab27b48c493023f794be09861e9045f
@@ -0,0 +1 @@
+xA!D}G Mr\m[F11gȢ(GRr3Co"v^hq<7AY{"&$DSg([B!ΡwƳYgl$%Eֲ'\d_w-[k'1hZt B&;:A"m%V \ No newline at end of file
diff --git a/tests/resources/testrepo/.gitted/objects/c3/6d8ea75da8cb510fcb0c408c1d7e53f9a99dbe b/tests/resources/testrepo/.gitted/objects/c3/6d8ea75da8cb510fcb0c408c1d7e53f9a99dbe
new file mode 100644
index 000000000..0975f7fdf
--- /dev/null
+++ b/tests/resources/testrepo/.gitted/objects/c3/6d8ea75da8cb510fcb0c408c1d7e53f9a99dbe
Binary files differ
diff --git a/tests/resources/testrepo/.gitted/objects/e3/6900c3224db4adf4c7f7a09d4ac80247978a13 b/tests/resources/testrepo/.gitted/objects/e3/6900c3224db4adf4c7f7a09d4ac80247978a13
new file mode 100644
index 000000000..e74291fc1
--- /dev/null
+++ b/tests/resources/testrepo/.gitted/objects/e3/6900c3224db4adf4c7f7a09d4ac80247978a13
Binary files differ
diff --git a/tests/resources/testrepo/.gitted/refs/heads/ident b/tests/resources/testrepo/.gitted/refs/heads/ident
new file mode 100644
index 000000000..2cfd880a3
--- /dev/null
+++ b/tests/resources/testrepo/.gitted/refs/heads/ident
@@ -0,0 +1 @@
+6fd5c7dd2ab27b48c493023f794be09861e9045f