diff --git a/tests/diff/drivers.c b/tests/diff/drivers.c
index 119132149..1cbf9e211 100644
--- a/tests/diff/drivers.c
+++ b/tests/diff/drivers.c
@@ -176,70 +176,73 @@ void test_diff_drivers__long_lines(void)
void test_diff_drivers__builtins(void)
{
- git_index *idx;
git_diff *diff;
git_patch *patch;
- git_buf actual = GIT_BUF_INIT;
+ git_buf file = GIT_BUF_INIT, actual = GIT_BUF_INIT, expected = GIT_BUF_INIT;
git_diff_options opts = GIT_DIFF_OPTIONS_INIT;
- const char *base =
- "\n
\n"
- " \n \n - item 1.1
\n - item 1.2
\n - item 1.3
\n - item 1.4
\n - item 1.5
\n - item 1.6
\n - item 1.7
\n - item 1.8
\n - item 1.9
\n
\n
\n"
- " \n \n - item 2.1
\n - item 2.2
\n - item 2.3
\n - item 2.4
\n - item 2.5
\n - item 2.6
\n - item 2.7
\n - item 2.8
\n
\n
\n"
- " \n \n - item 3.1
\n - item 3.2
\n - item 3.3
\n - item 3.4
\n - item 3.5
\n - item 3.6
\n - item 3.7
\n - item 3.8
\n
\n
\n"
- "\n";
- const char *modified =
- "\n\n"
- " \n \n - item 1.1
\n - item 1.2 changed
\n - item 1.3 changed
\n - item 1.4
\n - item 1.5
\n - item 1.6
\n - item 1.7
\n - item 1.8
\n - item 1.9
\n - item 1.10 added
\n
\n
\n"
- " \n \n - item 2.1
\n - item 2.2
\n - item 2.3
\n - item 2.4
\n - item 2.5
\n - item 2.6
\n - item 2.7 changed
\n - item 2.7.1 added
\n - item 2.8
\n
\n
\n"
- " \n \n - item 3.1
\n - item 3.2
\n - item 3.3
\n - item 3.4
\n - item 3.5
\n - item 3.6
\n
\n
\n"
- "\n";
- const char *expected_nodriver =
- "diff --git a/file.html b/file.html\nindex 97b34db..c7dbed3 100644\n--- a/file.html\n+++ b/file.html\n@@ -5,4 +5,4 @@\n item 1.1\n- item 1.2\n- item 1.3\n+ item 1.2 changed\n+ item 1.3 changed\n item 1.4\n@@ -13,2 +13,3 @@\n item 1.9\n+ item 1.10 added\n \n@@ -23,3 +24,4 @@\n item 2.6\n- item 2.7\n+ item 2.7 changed\n+ item 2.7.1 added\n item 2.8\n@@ -35,4 +37,2 @@\n item 3.6\n- item 3.7\n- item 3.8\n \n";
- const char *expected_driver =
- "diff --git a/file.html b/file.html\nindex 97b34db..c7dbed3 100644\n--- a/file.html\n+++ b/file.html\n@@ -5,4 +5,4 @@ \n
item 1.1\n- item 1.2\n- item 1.3\n+ item 1.2 changed\n+ item 1.3 changed\n item 1.4\n@@ -13,2 +13,3 @@ \n
item 1.9\n+ item 1.10 added\n \n@@ -23,3 +24,4 @@ \n
item 2.6\n- item 2.7\n+ item 2.7 changed\n+ item 2.7.1 added\n item 2.8\n@@ -35,4 +37,2 @@ \n
item 3.6\n- item 3.7\n- item 3.8\n \n";
+ int i;
+ static const char *files[] = {
+ "html",
+ NULL
+ };
- g_repo = cl_git_sandbox_init("empty_standard_repo");
-
- cl_git_mkfile("empty_standard_repo/file.html", base);
- cl_git_pass(git_repository_index(&idx, g_repo));
- cl_git_pass(git_index_add_bypath(idx, "file.html"));
- cl_git_pass(git_index_write(idx));
- git_index_free(idx);
-
- cl_git_rewritefile("empty_standard_repo/file.html", modified);
-
- /* do diff with no special driver */
+ g_repo = cl_git_sandbox_init("userdiff");
opts.interhunk_lines = 1;
opts.context_lines = 1;
+ opts.pathspec.count = 1;
- cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts));
- cl_assert_equal_sz(1, git_diff_num_deltas(diff));
- cl_git_pass(git_patch_from_diff(&patch, diff, 0));
- cl_git_pass(git_patch_to_buf(&actual, patch));
+ for (i = 0; files[i]; ++i) {
+ git_buf_sets(&file, "files/file.");
+ git_buf_puts(&file, files[i]);
+ opts.pathspec.strings = &file.ptr;
- overwrite_filemode(expected_nodriver, &actual);
+ /* do diff with no special driver */
- cl_assert_equal_s(expected_nodriver, actual.ptr);
+ cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts));
+ cl_assert_equal_sz(1, git_diff_num_deltas(diff));
+ cl_git_pass(git_patch_from_diff(&patch, diff, 0));
+ cl_git_pass(git_patch_to_buf(&actual, patch));
+ git_buf_sets(&expected, "userdiff/expected/nodriver/diff.");
+ git_buf_puts(&expected, files[i]);
+ cl_git_pass(git_futils_readbuffer(&expected, expected.ptr));
+
+ overwrite_filemode(expected.ptr, &actual);
+
+ cl_assert_equal_s(expected.ptr, actual.ptr);
+
+ git_buf_clear(&actual);
+ git_patch_free(patch);
+ git_diff_free(diff);
+
+ /* do diff with driver */
+
+ {
+ FILE *fp = fopen("userdiff/.gitattributes", "w");
+ fprintf(fp, "*.%s diff=%s\n", files[i], files[i]);
+ fclose(fp);
+ }
+
+ cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts));
+ cl_assert_equal_sz(1, git_diff_num_deltas(diff));
+ cl_git_pass(git_patch_from_diff(&patch, diff, 0));
+ cl_git_pass(git_patch_to_buf(&actual, patch));
+
+ git_buf_sets(&expected, "userdiff/expected/driver/diff.");
+ git_buf_puts(&expected, files[i]);
+ cl_git_pass(git_futils_readbuffer(&expected, expected.ptr));
+
+ overwrite_filemode(expected.ptr, &actual);
+
+ cl_assert_equal_s(expected.ptr, actual.ptr);
+
+ git_buf_clear(&actual);
+ git_patch_free(patch);
+ git_diff_free(diff);
+ }
+
+ git_buf_free(&file);
git_buf_free(&actual);
- git_patch_free(patch);
- git_diff_free(diff);
-
- /* do diff with HTML driver */
-
- cl_git_mkfile("empty_standard_repo/.gitattributes", "*.html diff=html\n");
-
- cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts));
- cl_assert_equal_sz(1, git_diff_num_deltas(diff));
- cl_git_pass(git_patch_from_diff(&patch, diff, 0));
- cl_git_pass(git_patch_to_buf(&actual, patch));
-
- overwrite_filemode(expected_driver, &actual);
-
- cl_assert_equal_s(expected_driver, actual.ptr);
-
- git_buf_free(&actual);
- git_patch_free(patch);
- git_diff_free(diff);
+ git_buf_free(&expected);
}
diff --git a/tests/resources/userdiff/.gitted/HEAD b/tests/resources/userdiff/.gitted/HEAD
new file mode 100644
index 000000000..cb089cd89
Binary files /dev/null and b/tests/resources/userdiff/.gitted/HEAD differ
diff --git a/tests/resources/userdiff/.gitted/config b/tests/resources/userdiff/.gitted/config
new file mode 100644
index 000000000..6c9406b7d
Binary files /dev/null and b/tests/resources/userdiff/.gitted/config differ
diff --git a/tests/resources/userdiff/.gitted/description b/tests/resources/userdiff/.gitted/description
new file mode 100644
index 000000000..498b267a8
Binary files /dev/null and b/tests/resources/userdiff/.gitted/description differ
diff --git a/tests/resources/userdiff/.gitted/index b/tests/resources/userdiff/.gitted/index
new file mode 100644
index 000000000..9372411cd
Binary files /dev/null and b/tests/resources/userdiff/.gitted/index differ
diff --git a/tests/resources/userdiff/.gitted/objects/05/d669073b39d36847315e3a5b4512cf4cba4546 b/tests/resources/userdiff/.gitted/objects/05/d669073b39d36847315e3a5b4512cf4cba4546
new file mode 100644
index 000000000..3a9d75cc1
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/05/d669073b39d36847315e3a5b4512cf4cba4546 differ
diff --git a/tests/resources/userdiff/.gitted/objects/20/ab776b6ff3169fa0e5eff65df30d45187d22ba b/tests/resources/userdiff/.gitted/objects/20/ab776b6ff3169fa0e5eff65df30d45187d22ba
new file mode 100644
index 000000000..3d57061ce
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/20/ab776b6ff3169fa0e5eff65df30d45187d22ba differ
diff --git a/tests/resources/userdiff/.gitted/objects/23/20e2f1e4d9e6201a8e15949a0c10a533fa51cd b/tests/resources/userdiff/.gitted/objects/23/20e2f1e4d9e6201a8e15949a0c10a533fa51cd
new file mode 100644
index 000000000..6dbcafed4
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/23/20e2f1e4d9e6201a8e15949a0c10a533fa51cd differ
diff --git a/tests/resources/userdiff/.gitted/objects/2e/a4b8a16d737c180dfdd2b119dec9501592326c b/tests/resources/userdiff/.gitted/objects/2e/a4b8a16d737c180dfdd2b119dec9501592326c
new file mode 100644
index 000000000..e7d2fba41
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/2e/a4b8a16d737c180dfdd2b119dec9501592326c differ
diff --git a/tests/resources/userdiff/.gitted/objects/49/c0ff897b2b07a2ea0ed073e62a9dcd02704ba0 b/tests/resources/userdiff/.gitted/objects/49/c0ff897b2b07a2ea0ed073e62a9dcd02704ba0
new file mode 100644
index 000000000..49d59c11d
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/49/c0ff897b2b07a2ea0ed073e62a9dcd02704ba0 differ
diff --git a/tests/resources/userdiff/.gitted/objects/50/346bde7428a29c9845470a14d87b1634293d48 b/tests/resources/userdiff/.gitted/objects/50/346bde7428a29c9845470a14d87b1634293d48
new file mode 100644
index 000000000..9de1b3598
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/50/346bde7428a29c9845470a14d87b1634293d48 differ
diff --git a/tests/resources/userdiff/.gitted/objects/5a/428e7dcffb41b65984517f1e6b8547babc8dff b/tests/resources/userdiff/.gitted/objects/5a/428e7dcffb41b65984517f1e6b8547babc8dff
new file mode 100644
index 000000000..143a1cecf
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/5a/428e7dcffb41b65984517f1e6b8547babc8dff differ
diff --git a/tests/resources/userdiff/.gitted/objects/87/2d19663f32459389597b52beec6457c1dc971f b/tests/resources/userdiff/.gitted/objects/87/2d19663f32459389597b52beec6457c1dc971f
new file mode 100644
index 000000000..415f40a66
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/87/2d19663f32459389597b52beec6457c1dc971f differ
diff --git a/tests/resources/userdiff/.gitted/objects/9d/b1d09ff9ad5190bcf12d72ea3c818ffca344c5 b/tests/resources/userdiff/.gitted/objects/9d/b1d09ff9ad5190bcf12d72ea3c818ffca344c5
new file mode 100644
index 000000000..c0a03a241
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/9d/b1d09ff9ad5190bcf12d72ea3c818ffca344c5 differ
diff --git a/tests/resources/userdiff/.gitted/objects/d6/3c806de4f666369ed169495657bec24b558165 b/tests/resources/userdiff/.gitted/objects/d6/3c806de4f666369ed169495657bec24b558165
new file mode 100644
index 000000000..2c0fbcc09
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/d6/3c806de4f666369ed169495657bec24b558165 differ
diff --git a/tests/resources/userdiff/.gitted/objects/ef/1641511d6cb425c6b4f59ef1feffe7762e86e0 b/tests/resources/userdiff/.gitted/objects/ef/1641511d6cb425c6b4f59ef1feffe7762e86e0
new file mode 100644
index 000000000..223f3b380
Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/ef/1641511d6cb425c6b4f59ef1feffe7762e86e0 differ
diff --git a/tests/resources/userdiff/.gitted/refs/heads/master b/tests/resources/userdiff/.gitted/refs/heads/master
new file mode 100644
index 000000000..2ec79ec86
Binary files /dev/null and b/tests/resources/userdiff/.gitted/refs/heads/master differ
diff --git a/tests/resources/userdiff/after/file.html b/tests/resources/userdiff/after/file.html
new file mode 100644
index 000000000..2320e2f1e
Binary files /dev/null and b/tests/resources/userdiff/after/file.html differ
diff --git a/tests/resources/userdiff/before/file.html b/tests/resources/userdiff/before/file.html
new file mode 100644
index 000000000..872d19663
Binary files /dev/null and b/tests/resources/userdiff/before/file.html differ
diff --git a/tests/resources/userdiff/expected/driver/diff.html b/tests/resources/userdiff/expected/driver/diff.html
new file mode 100644
index 000000000..5a428e7dc
Binary files /dev/null and b/tests/resources/userdiff/expected/driver/diff.html differ
diff --git a/tests/resources/userdiff/expected/nodriver/diff.html b/tests/resources/userdiff/expected/nodriver/diff.html
new file mode 100644
index 000000000..2ea4b8a16
Binary files /dev/null and b/tests/resources/userdiff/expected/nodriver/diff.html differ
diff --git a/tests/resources/userdiff/files/file.html b/tests/resources/userdiff/files/file.html
new file mode 100644
index 000000000..2320e2f1e
Binary files /dev/null and b/tests/resources/userdiff/files/file.html differ