Added tests to merge files and branches with whitespace problems and fixes

This commit is contained in:
Jacques Germishuys
2015-03-09 17:03:03 +02:00
parent 45a86bbfd0
commit 0f24cac2b9
49 changed files with 198 additions and 0 deletions

View File

@@ -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);
}

View 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);
}

View File

@@ -0,0 +1 @@
ref: refs/heads/master

View File

@@ -0,0 +1,7 @@
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true

Binary file not shown.

View File

@@ -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˙?«

View File

@@ -0,0 +1,2 @@
x¥<>MJÄ@…]÷)j7 A:Ý]ýÁ3 U5Õ“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Ï

View File

@@ -0,0 +1 @@
x¥<>MjΓ0F»Φ)flύ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

View File

@@ -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Ε

View File

@@ -0,0 +1,5 @@
x¥ÎM
Â0@a×9Åì™$Mˆ®/àz:™Ø
ý1IÞ^Á#¸ý<16>ÇË4<C38B>Œ³»šE Ãh£.:MÚ'æ6¡uÔvâØ&k± ½`ÕJYæ
©5D1™$ä9¢ö”zgX<07>©Á¾Iж:,nįM
\%Oc¶w<C2B6>ãóg<C3B3>s©y¤JèÆ¸àCç,ìÑ ª¯~W«üQ÷a¬RVbh~,3\ÔgäRý

View File

@@ -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ñÃ

View File

@@ -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

View File

@@ -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Íž<6D>z* 2aăMŠ:kçzĐÔńѦ­ŞN·Cvő.u™÷éřŮŐëםŤ×˝Ő™ż¤mySxî=—ăŐ3h€î¤çµ&˙*é>ĄŽ˘bĺ5Męr×!iâu”š×¶=Ü<>´ű´Äiŕ

View File

@@ -0,0 +1 @@
d95182053c31f8aa09df4fa225f4e668c5320b59

View File

@@ -0,0 +1 @@
9c5362069759fb37ae036cef6e4b2f95c6c5eaab

View File

@@ -0,0 +1 @@
b2a69114f4897109fedf1aafea363cb2d2557029

View File

@@ -0,0 +1 @@
bfe4ea5805af22a5b194259bda6f5f634486f891

View File

@@ -0,0 +1 @@
1189e10a62aadf2fea8cd018afb52c1980f40b4f

View File

@@ -0,0 +1,11 @@
0
1
2
3
4
5 XXX
6
7
8
9
10