Skip to content

Commit 0f24cac

Browse files
committed
Added tests to merge files and branches with whitespace problems and fixes
1 parent 45a86bb commit 0f24cac

File tree

49 files changed

+198
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+198
-0
lines changed

tests/merge/files.c

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,79 @@ void test_merge_files__automerge_from_index(void)
173173

174174
git_merge_file_result_free(&result);
175175
}
176+
177+
void test_merge_files__automerge_whitespace_eol(void)
178+
{
179+
git_merge_file_input ancestor = GIT_MERGE_FILE_INPUT_INIT,
180+
ours = GIT_MERGE_FILE_INPUT_INIT,
181+
theirs = GIT_MERGE_FILE_INPUT_INIT;
182+
git_merge_file_options opts = GIT_MERGE_FILE_OPTIONS_INIT;
183+
git_merge_file_result result = {0};
184+
const char *expected = "Zero\n1\n2\n3\n4\n5\n6\n7\n8\n9\nTen\n";
185+
186+
ancestor.ptr = "0 \n1\n2\n3\n4\n5\n6\n7\n8\n9\n10 \n";
187+
ancestor.size = strlen(ancestor.ptr);
188+
ancestor.path = "testfile.txt";
189+
ancestor.mode = 0100755;
190+
191+
ours.ptr = "Zero\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n";
192+
ours.size = strlen(ours.ptr);
193+
ours.path = "testfile.txt";
194+
ours.mode = 0100755;
195+
196+
theirs.ptr = "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\nTen\n";
197+
theirs.size = strlen(theirs.ptr);
198+
theirs.path = "testfile.txt";
199+
theirs.mode = 0100755;
200+
201+
opts.whitespace_flags |= GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL;
202+
cl_git_pass(git_merge_file(&result, &ancestor, &ours, &theirs, &opts));
203+
204+
cl_assert_equal_i(1, result.automergeable);
205+
206+
cl_assert_equal_s("testfile.txt", result.path);
207+
cl_assert_equal_i(0100755, result.mode);
208+
209+
cl_assert_equal_i(strlen(expected), result.len);
210+
cl_assert_equal_strn(expected, result.ptr, result.len);
211+
212+
git_merge_file_result_free(&result);
213+
}
214+
215+
void test_merge_files__automerge_whitespace_change(void)
216+
{
217+
git_merge_file_input ancestor = GIT_MERGE_FILE_INPUT_INIT,
218+
ours = GIT_MERGE_FILE_INPUT_INIT,
219+
theirs = GIT_MERGE_FILE_INPUT_INIT;
220+
git_merge_file_options opts = GIT_MERGE_FILE_OPTIONS_INIT;
221+
git_merge_file_result result = {0};
222+
const char *expected = "Zero\n1\n2\n3\n4\n5 XXX\n6 YYY\n7\n8\n9\nTen\n";
223+
224+
ancestor.ptr = "0\n1\n2\n3\n4\n5 XXX\n6YYY\n7\n8\n9\n10\n";
225+
ancestor.size = strlen(ancestor.ptr);
226+
ancestor.path = "testfile.txt";
227+
ancestor.mode = 0100755;
228+
229+
ours.ptr = "Zero\n1\n2\n3\n4\n5 XXX\n6 YYY\n7\n8\n9\n10\n";
230+
ours.size = strlen(ours.ptr);
231+
ours.path = "testfile.txt";
232+
ours.mode = 0100755;
233+
234+
theirs.ptr = "0\n1\n2\n3\n4\n5 XXX\n6 YYY\n7\n8\n9\nTen\n";
235+
theirs.size = strlen(theirs.ptr);
236+
theirs.path = "testfile.txt";
237+
theirs.mode = 0100755;
238+
239+
opts.whitespace_flags |= GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE;
240+
cl_git_pass(git_merge_file(&result, &ancestor, &ours, &theirs, &opts));
241+
242+
cl_assert_equal_i(1, result.automergeable);
243+
244+
cl_assert_equal_s("testfile.txt", result.path);
245+
cl_assert_equal_i(0100755, result.mode);
246+
247+
cl_assert_equal_i(strlen(expected), result.len);
248+
cl_assert_equal_strn(expected, result.ptr, result.len);
249+
250+
git_merge_file_result_free(&result);
251+
}

tests/merge/trees/whitespace.c

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#include "clar_libgit2.h"
2+
#include "git2/repository.h"
3+
#include "git2/merge.h"
4+
#include "buffer.h"
5+
#include "merge.h"
6+
#include "../merge_helpers.h"
7+
#include "fileops.h"
8+
9+
static git_repository *repo;
10+
11+
#define TEST_REPO_PATH "merge-whitespace"
12+
13+
#define BRANCH_A_EOL "branch_a_eol"
14+
#define BRANCH_B_EOL "branch_b_eol"
15+
16+
#define BRANCH_A_CHANGE "branch_a_change"
17+
#define BRANCH_B_CHANGE "branch_b_change"
18+
19+
// Fixture setup and teardown
20+
void test_merge_trees_whitespace__initialize(void)
21+
{
22+
repo = cl_git_sandbox_init(TEST_REPO_PATH);
23+
}
24+
25+
void test_merge_trees_whitespace__cleanup(void)
26+
{
27+
cl_git_sandbox_cleanup();
28+
}
29+
30+
void test_merge_trees_whitespace__conflict(void)
31+
{
32+
git_index *index;
33+
git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
34+
35+
struct merge_index_entry merge_index_entries[] = {
36+
{ 0100644, "4026a6c83f39c56881c9ac62e7582db9e3d33a4f", 1, "test.txt" },
37+
{ 0100644, "c3b1fb31424c98072542cc8e42b48c92e52f494a", 2, "test.txt" },
38+
{ 0100644, "262f67de0de2e535a59ae1bc3c739601e98c354d", 3, "test.txt" },
39+
};
40+
41+
cl_git_pass(merge_trees_from_branches(&index, repo, BRANCH_A_EOL, BRANCH_B_EOL, &opts));
42+
43+
cl_assert(merge_test_index(index, merge_index_entries, 3));
44+
45+
git_index_free(index);
46+
}
47+
48+
void test_merge_trees_whitespace__eol(void)
49+
{
50+
git_index *index;
51+
git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
52+
53+
struct merge_index_entry merge_index_entries[] = {
54+
{ 0100644, "ee3c2aac8e03224c323b58ecb1f9eef616745467", 0, "test.txt" },
55+
};
56+
57+
opts.whitespace_flags |= GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL;
58+
59+
cl_git_pass(merge_trees_from_branches(&index, repo, BRANCH_A_EOL, BRANCH_B_EOL, &opts));
60+
61+
cl_assert(merge_test_index(index, merge_index_entries, 1));
62+
63+
git_index_free(index);
64+
}
65+
66+
void test_merge_trees_whitespace__change(void)
67+
{
68+
git_index *index;
69+
git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
70+
71+
struct merge_index_entry merge_index_entries[] = {
72+
{ 0100644, "a827eab4fd66ab37a6ebcfaa7b7e341abfd55947", 0, "test.txt" },
73+
};
74+
75+
opts.whitespace_flags |= GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE;
76+
77+
cl_git_pass(merge_trees_from_branches(&index, repo, BRANCH_A_CHANGE, BRANCH_B_CHANGE, &opts));
78+
79+
cl_assert(merge_test_index(index, merge_index_entries, 1));
80+
81+
git_index_free(index);
82+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ref: refs/heads/master
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[core]
2+
repositoryformatversion = 0
3+
filemode = true
4+
bare = false
5+
logallrefupdates = true
6+
ignorecase = true
7+
precomposeunicode = true
137 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.

tests/resources/merge-whitespace/.gitted/objects/0a/a2acaa63cacc7a99fab0c2ce3d56572911df19

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
x��A� @Qלb�&f�R!1Ɲ�[Lq��b#L��&z��~�K�:�F*3g��
��)qJZ&B����{;xk-2��_ 78s-��˻���m�S��Ih�r������Z��q{�C��%Ӥ>4�?�
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)