mirror of
https://github.com/libgit2/libgit2.git
synced 2026-06-22 06:26:26 +00:00
Added tests to merge files and branches with whitespace problems and fixes
This commit is contained in:
@@ -173,3 +173,79 @@ void test_merge_files__automerge_from_index(void)
|
||||
|
||||
git_merge_file_result_free(&result);
|
||||
}
|
||||
|
||||
void test_merge_files__automerge_whitespace_eol(void)
|
||||
{
|
||||
git_merge_file_input ancestor = GIT_MERGE_FILE_INPUT_INIT,
|
||||
ours = GIT_MERGE_FILE_INPUT_INIT,
|
||||
theirs = GIT_MERGE_FILE_INPUT_INIT;
|
||||
git_merge_file_options opts = GIT_MERGE_FILE_OPTIONS_INIT;
|
||||
git_merge_file_result result = {0};
|
||||
const char *expected = "Zero\n1\n2\n3\n4\n5\n6\n7\n8\n9\nTen\n";
|
||||
|
||||
ancestor.ptr = "0 \n1\n2\n3\n4\n5\n6\n7\n8\n9\n10 \n";
|
||||
ancestor.size = strlen(ancestor.ptr);
|
||||
ancestor.path = "testfile.txt";
|
||||
ancestor.mode = 0100755;
|
||||
|
||||
ours.ptr = "Zero\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n";
|
||||
ours.size = strlen(ours.ptr);
|
||||
ours.path = "testfile.txt";
|
||||
ours.mode = 0100755;
|
||||
|
||||
theirs.ptr = "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\nTen\n";
|
||||
theirs.size = strlen(theirs.ptr);
|
||||
theirs.path = "testfile.txt";
|
||||
theirs.mode = 0100755;
|
||||
|
||||
opts.whitespace_flags |= GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL;
|
||||
cl_git_pass(git_merge_file(&result, &ancestor, &ours, &theirs, &opts));
|
||||
|
||||
cl_assert_equal_i(1, result.automergeable);
|
||||
|
||||
cl_assert_equal_s("testfile.txt", result.path);
|
||||
cl_assert_equal_i(0100755, result.mode);
|
||||
|
||||
cl_assert_equal_i(strlen(expected), result.len);
|
||||
cl_assert_equal_strn(expected, result.ptr, result.len);
|
||||
|
||||
git_merge_file_result_free(&result);
|
||||
}
|
||||
|
||||
void test_merge_files__automerge_whitespace_change(void)
|
||||
{
|
||||
git_merge_file_input ancestor = GIT_MERGE_FILE_INPUT_INIT,
|
||||
ours = GIT_MERGE_FILE_INPUT_INIT,
|
||||
theirs = GIT_MERGE_FILE_INPUT_INIT;
|
||||
git_merge_file_options opts = GIT_MERGE_FILE_OPTIONS_INIT;
|
||||
git_merge_file_result result = {0};
|
||||
const char *expected = "Zero\n1\n2\n3\n4\n5 XXX\n6 YYY\n7\n8\n9\nTen\n";
|
||||
|
||||
ancestor.ptr = "0\n1\n2\n3\n4\n5 XXX\n6YYY\n7\n8\n9\n10\n";
|
||||
ancestor.size = strlen(ancestor.ptr);
|
||||
ancestor.path = "testfile.txt";
|
||||
ancestor.mode = 0100755;
|
||||
|
||||
ours.ptr = "Zero\n1\n2\n3\n4\n5 XXX\n6 YYY\n7\n8\n9\n10\n";
|
||||
ours.size = strlen(ours.ptr);
|
||||
ours.path = "testfile.txt";
|
||||
ours.mode = 0100755;
|
||||
|
||||
theirs.ptr = "0\n1\n2\n3\n4\n5 XXX\n6 YYY\n7\n8\n9\nTen\n";
|
||||
theirs.size = strlen(theirs.ptr);
|
||||
theirs.path = "testfile.txt";
|
||||
theirs.mode = 0100755;
|
||||
|
||||
opts.whitespace_flags |= GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE;
|
||||
cl_git_pass(git_merge_file(&result, &ancestor, &ours, &theirs, &opts));
|
||||
|
||||
cl_assert_equal_i(1, result.automergeable);
|
||||
|
||||
cl_assert_equal_s("testfile.txt", result.path);
|
||||
cl_assert_equal_i(0100755, result.mode);
|
||||
|
||||
cl_assert_equal_i(strlen(expected), result.len);
|
||||
cl_assert_equal_strn(expected, result.ptr, result.len);
|
||||
|
||||
git_merge_file_result_free(&result);
|
||||
}
|
||||
|
||||
82
tests/merge/trees/whitespace.c
Normal file
82
tests/merge/trees/whitespace.c
Normal file
@@ -0,0 +1,82 @@
|
||||
#include "clar_libgit2.h"
|
||||
#include "git2/repository.h"
|
||||
#include "git2/merge.h"
|
||||
#include "buffer.h"
|
||||
#include "merge.h"
|
||||
#include "../merge_helpers.h"
|
||||
#include "fileops.h"
|
||||
|
||||
static git_repository *repo;
|
||||
|
||||
#define TEST_REPO_PATH "merge-whitespace"
|
||||
|
||||
#define BRANCH_A_EOL "branch_a_eol"
|
||||
#define BRANCH_B_EOL "branch_b_eol"
|
||||
|
||||
#define BRANCH_A_CHANGE "branch_a_change"
|
||||
#define BRANCH_B_CHANGE "branch_b_change"
|
||||
|
||||
// Fixture setup and teardown
|
||||
void test_merge_trees_whitespace__initialize(void)
|
||||
{
|
||||
repo = cl_git_sandbox_init(TEST_REPO_PATH);
|
||||
}
|
||||
|
||||
void test_merge_trees_whitespace__cleanup(void)
|
||||
{
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
void test_merge_trees_whitespace__conflict(void)
|
||||
{
|
||||
git_index *index;
|
||||
git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
|
||||
|
||||
struct merge_index_entry merge_index_entries[] = {
|
||||
{ 0100644, "4026a6c83f39c56881c9ac62e7582db9e3d33a4f", 1, "test.txt" },
|
||||
{ 0100644, "c3b1fb31424c98072542cc8e42b48c92e52f494a", 2, "test.txt" },
|
||||
{ 0100644, "262f67de0de2e535a59ae1bc3c739601e98c354d", 3, "test.txt" },
|
||||
};
|
||||
|
||||
cl_git_pass(merge_trees_from_branches(&index, repo, BRANCH_A_EOL, BRANCH_B_EOL, &opts));
|
||||
|
||||
cl_assert(merge_test_index(index, merge_index_entries, 3));
|
||||
|
||||
git_index_free(index);
|
||||
}
|
||||
|
||||
void test_merge_trees_whitespace__eol(void)
|
||||
{
|
||||
git_index *index;
|
||||
git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
|
||||
|
||||
struct merge_index_entry merge_index_entries[] = {
|
||||
{ 0100644, "ee3c2aac8e03224c323b58ecb1f9eef616745467", 0, "test.txt" },
|
||||
};
|
||||
|
||||
opts.whitespace_flags |= GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL;
|
||||
|
||||
cl_git_pass(merge_trees_from_branches(&index, repo, BRANCH_A_EOL, BRANCH_B_EOL, &opts));
|
||||
|
||||
cl_assert(merge_test_index(index, merge_index_entries, 1));
|
||||
|
||||
git_index_free(index);
|
||||
}
|
||||
|
||||
void test_merge_trees_whitespace__change(void)
|
||||
{
|
||||
git_index *index;
|
||||
git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
|
||||
|
||||
struct merge_index_entry merge_index_entries[] = {
|
||||
{ 0100644, "a827eab4fd66ab37a6ebcfaa7b7e341abfd55947", 0, "test.txt" },
|
||||
};
|
||||
|
||||
opts.whitespace_flags |= GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE;
|
||||
|
||||
cl_git_pass(merge_trees_from_branches(&index, repo, BRANCH_A_CHANGE, BRANCH_B_CHANGE, &opts));
|
||||
|
||||
cl_assert(merge_test_index(index, merge_index_entries, 1));
|
||||
|
||||
git_index_free(index);
|
||||
}
|
||||
1
tests/resources/merge-whitespace/.gitted/HEAD
Normal file
1
tests/resources/merge-whitespace/.gitted/HEAD
Normal file
@@ -0,0 +1 @@
|
||||
ref: refs/heads/master
|
||||
7
tests/resources/merge-whitespace/.gitted/config
Normal file
7
tests/resources/merge-whitespace/.gitted/config
Normal file
@@ -0,0 +1,7 @@
|
||||
[core]
|
||||
repositoryformatversion = 0
|
||||
filemode = true
|
||||
bare = false
|
||||
logallrefupdates = true
|
||||
ignorecase = true
|
||||
precomposeunicode = true
|
||||
BIN
tests/resources/merge-whitespace/.gitted/index
Normal file
BIN
tests/resources/merge-whitespace/.gitted/index
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
xťÍA @Qלbö&f€R!1ĆťŃ[Lq°<71>b#LŢŢ&z·ń~śKÉ:ŕF*3gşžâ€¨˝ó)qJZ&Bş™<C59F>¤{;xk-2ή_78s-ąŤË»Ááńm÷S“šIhçrÝĽ·ÎĂ
˘Zëşţq{űCÔĺ™%Ó¤>4˙?«
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
x¥<>MJÄ@…]÷)j7A:Ý]ý"îÁ3U5Õ“I´ÓYx{#£'põà㽞¬ó<uðC¼ëM‚§KòšP¬Ö3[¾d
|
||||
™0©Tq6å¬Î|PÓ¥CôÑÙX–Ê>‘ZEkÔÀ®”(¨Dü×çªA ³EªÎòP‚Êkô!äXsí}\¼’|îºÁ‹¶yÚÆýkƒÇ÷»>o½MÔéAÖù †Ï±Lî³Öô¸Öõ_ó¦íªÀ<C2AA>átË3Ÿ`Zúú‹Ïd¾“AeÏ
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
x¥<>MjΓ0F»Φ)f’lύA)%›B/Πυx4®°•Jcho_‡!Ϋχΰγ}TΧµX?ΎHc΄‰CΖ)ϋ<>ηi<CEB7>L`??Ζ`Κ<>ff«nΨxΠ<> Ρ„tΈ”f<E2809D>4Yβ!;ο‚MΖδΩ$…»,µΑ'<27>ΟΞ>Έ¥/ϋ_‡Χλƒ}ΏwiΟTΧ70£u)FοF8i«µ:θ‘*όΤ<CF8C>ϊZ<CF8A>pΏ!1Μεχ(Α-ΥMξoκυzX
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
x¥<>AjΓ0E»Φ)f—E΅Θ’FA)Ω
|
||||
=C<>QF±¶Y^τφMI{‚®><>^Yηyκΰ‡ψΠ›*Οηδ5΅X±|&Δ<>΄Τβl"Rg>Ήι<CE89>!τΡΩ<CEA1>ζ*>±Z‹Φ¨A\ΝXbAe–ΏΏT
ΚHΉ:Η(C³<>9V¬Ρ‡@±Rο}\ΌqΉξΊΑ«¶yΪΖύkƒη<C692>;»·ή&ξόTΦω†΅…Gλ¬57zKλϊ/‰yΧvQ<76>ΖKαpί“`Zϊϊ‹OlΎ<01>$eΕ
|
||||
@@ -0,0 +1,5 @@
|
||||
x¥ÎM
|
||||
Â0@a×9Åì™$M›€ˆ®/àz:™Ø
|
||||
ý1IÞ^Á#¸ý<16>ÇË4<C38B>Œ³»šE Ãh£‘.:MÚ'æ6¡uÔvâØ&k±
½`ÕJYæ
|
||||
Zû ©5D1™$ä9¢ö”zgX<07>©Á¾Iж:,nįM
|
||||
\%Oc¶w<C2B6>ãóg<C3B3>s©y¤J^¦èƸàCç,ìÑ ª¯~W«üQ÷a¬RVbh~,3\ÔgäRý
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
x¥ÎM
|
||||
Â0@a×9Eö‚äošˆ.o1I¦Z!<21>¦éÂÛ[ðn¿Åã¥ZÊÔ¥±a׳äd!yˆ![fƒ‘³õˆCÔŽQaVn̉Y¼¨ñÜ%á0PJÆk!;@@=ò>ó¨xS%hí<68>Úä<C39A>Ò{åE^¹•iy¬ŸEŸ?»Ÿ—Þ&êtHµœ¤v0g¬Ü+£”Øt[íüWD\êÜ·qñÃMØ
|
||||
@@ -0,0 +1,2 @@
|
||||
x¥Í=
|
||||
1@aëœbzAf‡Iœ€ˆ<E282AC>à-’ì¬!,æ§ðö.xÛ¯x/m¥ä“СWUà(dçä˜Rt}@‡j9.2;O"KTe<54>lÂèëVáÒ{hƒ»Ö’Û:>
.¯Ÿ=o×z8¥\ab²^ÄžŽHˆf×}Ýõ¯ˆùR<ì
|
||||
@@ -0,0 +1 @@
|
||||
xĄŹKjÄ0Dłö)´›E tëg5„0»@ g0-©e;`;#Ë‹Ü>†™ś «‚WEQ•¶e™›2žZQÎö–aoŔj‡šŁ7€„ś{L9IŽŢúHÜ}s•µ©L<0E>g’Á<12><>r±…µvĹŠ÷!9Ł!:úËGÍžm±<6D>z*’2aăMŠ:kçzĐÔńѦŞN·Cvő.u™÷éřŮŐëםŤ×˝Ő™ż¤mySxî=—ăŐ3h€î¤çµ&˙*é>ĄŽ˘bĺ5Męr×!iâu”‹š×¶=Ü<>´ű´Äiŕ
|
||||
@@ -0,0 +1 @@
|
||||
d95182053c31f8aa09df4fa225f4e668c5320b59
|
||||
@@ -0,0 +1 @@
|
||||
9c5362069759fb37ae036cef6e4b2f95c6c5eaab
|
||||
@@ -0,0 +1 @@
|
||||
b2a69114f4897109fedf1aafea363cb2d2557029
|
||||
@@ -0,0 +1 @@
|
||||
bfe4ea5805af22a5b194259bda6f5f634486f891
|
||||
@@ -0,0 +1 @@
|
||||
1189e10a62aadf2fea8cd018afb52c1980f40b4f
|
||||
11
tests/resources/merge-whitespace/test.txt
Normal file
11
tests/resources/merge-whitespace/test.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
0
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5 XXX
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
Reference in New Issue
Block a user