summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@microsoft.com>2015-02-02 22:18:38 -0500
committerEdward Thomson <ethomson@microsoft.com>2015-02-02 22:46:39 -0500
commit2fbce0bfaca90dd71a2cc10a7fa82088150e04b7 (patch)
tree271bb55a3a7e957c2918ea036a27824cda4c05bd
parent1ac5acdc695b837a921897a9d42acc75649cfd4f (diff)
downloadlibgit2-2fbce0bfaca90dd71a2cc10a7fa82088150e04b7.tar.gz
checkout test: ensure .gitattributes lifecycle
The .gitattributes cache should not reload .gitattributes in the middle of checking out, only between checkout operations. Otherwise, we'll spend all our time stat'ing and read'ing the gitattributes.
-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