Skip to content

Commit 2a8841a

Browse files
committed
merge: test CR/LF conflicts for CR/LF files
Ensure that when the files being merged have CR/LF line endings that the conflict markers produced in the conflict file also have CR/LF line endings.
1 parent 7f52bc5 commit 2a8841a

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

tests/merge/files.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)