mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-20 23:15:16 +00:00
Added tests to merge files and branches with whitespace problems and fixes
This commit is contained in:
parent
45a86bbfd0
commit
0f24cac2b9
@ -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);
|
||||
}
|
BIN
tests/resources/merge-whitespace/.gitted/HEAD
Normal file
BIN
tests/resources/merge-whitespace/.gitted/HEAD
Normal file
Binary file not shown.
BIN
tests/resources/merge-whitespace/.gitted/config
Normal file
BIN
tests/resources/merge-whitespace/.gitted/config
Normal file
Binary file not shown.
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.
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.
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.
Binary file not shown.
BIN
tests/resources/merge-whitespace/.gitted/refs/heads/branch_a_eol
Normal file
BIN
tests/resources/merge-whitespace/.gitted/refs/heads/branch_a_eol
Normal file
Binary file not shown.
Binary file not shown.
BIN
tests/resources/merge-whitespace/.gitted/refs/heads/branch_b_eol
Normal file
BIN
tests/resources/merge-whitespace/.gitted/refs/heads/branch_b_eol
Normal file
Binary file not shown.
BIN
tests/resources/merge-whitespace/.gitted/refs/heads/master
Normal file
BIN
tests/resources/merge-whitespace/.gitted/refs/heads/master
Normal file
Binary file not shown.
BIN
tests/resources/merge-whitespace/test.txt
Normal file
BIN
tests/resources/merge-whitespace/test.txt
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user