@@ -323,6 +323,42 @@ void test_merge_workdir_simple__diff3(void)
323323 cl_assert (merge_test_reuc (repo_index , merge_reuc_entries , 3 ));
324324}
325325
326+ void test_merge_workdir_simple__zdiff3 (void )
327+ {
328+ git_str conflicting_buf = GIT_STR_INIT ;
329+
330+ struct merge_index_entry merge_index_entries [] = {
331+ ADDED_IN_MASTER_INDEX_ENTRY ,
332+ AUTOMERGEABLE_INDEX_ENTRY ,
333+ CHANGED_IN_BRANCH_INDEX_ENTRY ,
334+ CHANGED_IN_MASTER_INDEX_ENTRY ,
335+
336+ { 0100644 , "d427e0b2e138501a3d15cc376077a3631e15bd46" , 1 , "conflicting.txt" },
337+ { 0100644 , "4e886e602529caa9ab11d71f86634bd1b6e0de10" , 2 , "conflicting.txt" },
338+ { 0100644 , "2bd0a343aeef7a2cf0d158478966a6e587ff3863" , 3 , "conflicting.txt" },
339+
340+ UNCHANGED_INDEX_ENTRY ,
341+ };
342+
343+ struct merge_reuc_entry merge_reuc_entries [] = {
344+ AUTOMERGEABLE_REUC_ENTRY ,
345+ REMOVED_IN_BRANCH_REUC_ENTRY ,
346+ REMOVED_IN_MASTER_REUC_ENTRY
347+ };
348+
349+ set_core_autocrlf_to (repo , false);
350+
351+ merge_simple_branch (0 , GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3 );
352+
353+ cl_git_pass (git_futils_readbuffer (& conflicting_buf ,
354+ TEST_REPO_PATH "/conflicting.txt" ));
355+ cl_assert_equal_s (CONFLICTING_ZDIFF3_FILE , conflicting_buf .ptr );
356+ git_str_dispose (& conflicting_buf );
357+
358+ cl_assert (merge_test_index (repo_index , merge_index_entries , 8 ));
359+ cl_assert (merge_test_reuc (repo_index , merge_reuc_entries , 3 ));
360+ }
361+
326362void test_merge_workdir_simple__union (void )
327363{
328364 git_str conflicting_buf = GIT_STR_INIT ;
@@ -436,6 +472,48 @@ void test_merge_workdir_simple__diff3_from_config(void)
436472 git_config_free (config );
437473}
438474
475+ void test_merge_workdir_simple__zdiff3_from_config (void )
476+ {
477+ git_config * config ;
478+ git_str conflicting_buf = GIT_STR_INIT ;
479+
480+ struct merge_index_entry merge_index_entries [] = {
481+ ADDED_IN_MASTER_INDEX_ENTRY ,
482+ AUTOMERGEABLE_INDEX_ENTRY ,
483+ CHANGED_IN_BRANCH_INDEX_ENTRY ,
484+ CHANGED_IN_MASTER_INDEX_ENTRY ,
485+
486+ { 0100644 , "d427e0b2e138501a3d15cc376077a3631e15bd46" , 1 , "conflicting.txt" },
487+ { 0100644 , "4e886e602529caa9ab11d71f86634bd1b6e0de10" , 2 , "conflicting.txt" },
488+ { 0100644 , "2bd0a343aeef7a2cf0d158478966a6e587ff3863" , 3 , "conflicting.txt" },
489+
490+ UNCHANGED_INDEX_ENTRY ,
491+ };
492+
493+ struct merge_reuc_entry merge_reuc_entries [] = {
494+ AUTOMERGEABLE_REUC_ENTRY ,
495+ REMOVED_IN_BRANCH_REUC_ENTRY ,
496+ REMOVED_IN_MASTER_REUC_ENTRY
497+ };
498+
499+ cl_git_pass (git_repository_config (& config , repo ));
500+ cl_git_pass (git_config_set_string (config , "merge.conflictstyle" , "zdiff3" ));
501+
502+ set_core_autocrlf_to (repo , false);
503+
504+ merge_simple_branch (0 , 0 );
505+
506+ cl_git_pass (git_futils_readbuffer (& conflicting_buf ,
507+ TEST_REPO_PATH "/conflicting.txt" ));
508+ cl_assert (strcmp (conflicting_buf .ptr , CONFLICTING_ZDIFF3_FILE ) == 0 );
509+ git_str_dispose (& conflicting_buf );
510+
511+ cl_assert (merge_test_index (repo_index , merge_index_entries , 8 ));
512+ cl_assert (merge_test_reuc (repo_index , merge_reuc_entries , 3 ));
513+
514+ git_config_free (config );
515+ }
516+
439517void test_merge_workdir_simple__merge_overrides_config (void )
440518{
441519 git_config * config ;
0 commit comments