@@ -377,3 +377,51 @@ void test_merge_files__handles_binaries_when_favored(void)
377377
378378 git_merge_file_result_free (& result );
379379}
380+
381+ void test_merge_files__crlf_conflict_markers_for_crlf_files (void )
382+ {
383+ git_merge_file_input ancestor = GIT_MERGE_FILE_INPUT_INIT ,
384+ ours = GIT_MERGE_FILE_INPUT_INIT ,
385+ theirs = GIT_MERGE_FILE_INPUT_INIT ;
386+ git_merge_file_options opts = GIT_MERGE_FILE_OPTIONS_INIT ;
387+ git_merge_file_result result = {0 };
388+
389+ const char * expected =
390+ "<<<<<<< file.txt\r\nThis file\r\ndoes, too.\r\n"
391+ "=======\r\nAnd so does\r\nthis one.\r\n>>>>>>> file.txt\r\n" ;
392+ size_t expected_len = strlen (expected );
393+
394+ const char * expected_diff3 =
395+ "<<<<<<< file.txt\r\nThis file\r\ndoes, too.\r\n"
396+ "||||||| file.txt\r\nThis file has\r\nCRLF line endings.\r\n"
397+ "=======\r\nAnd so does\r\nthis one.\r\n>>>>>>> file.txt\r\n" ;
398+ size_t expected_diff3_len = strlen (expected_diff3 );
399+
400+ ancestor .ptr = "This file has\r\nCRLF line endings.\r\n" ;
401+ ancestor .size = 35 ;
402+ ancestor .path = "file.txt" ;
403+ ancestor .mode = 0100644 ;
404+
405+ ours .ptr = "This file\r\ndoes, too.\r\n" ;
406+ ours .size = 23 ;
407+ ours .path = "file.txt" ;
408+ ours .mode = 0100644 ;
409+
410+ theirs .ptr = "And so does\r\nthis one.\r\n" ;
411+ theirs .size = 24 ;
412+ theirs .path = "file.txt" ;
413+ theirs .mode = 0100644 ;
414+
415+ cl_git_pass (git_merge_file (& result , & ancestor , & ours , & theirs , & opts ));
416+ cl_assert_equal_i (0 , result .automergeable );
417+ cl_assert_equal_i (expected_len , result .len );
418+ cl_assert (memcmp (expected , result .ptr , expected_len ) == 0 );
419+ git_merge_file_result_free (& result );
420+
421+ opts .flags |= GIT_MERGE_FILE_STYLE_DIFF3 ;
422+ cl_git_pass (git_merge_file (& result , & ancestor , & ours , & theirs , & opts ));
423+ cl_assert_equal_i (0 , result .automergeable );
424+ cl_assert_equal_i (expected_diff3_len , result .len );
425+ cl_assert (memcmp (expected_diff3 , result .ptr , expected_len ) == 0 );
426+ git_merge_file_result_free (& result );
427+ }
0 commit comments