summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2018-01-31 09:28:43 -0800
committerGitHub <noreply@github.com>2018-01-31 09:28:43 -0800
commit9d8510b3bec46a1de7f598a5ab8305be54800b04 (patch)
treedb7d3fe5afae75f9b4f59fe1550fc284c10a859e
parentcdab165df44baf3464ae1e5ddff6d04a65e02304 (diff)
parentdb39807c8957d88593632f75f8e5e8661a646ee5 (diff)
downloadlibgit2-9d8510b3bec46a1de7f598a5ab8305be54800b04.tar.gz
Merge pull request #4488 from libgit2/ethomson/conflict_marker_size
Use longer conflict markers in recursive merge base
-rw-r--r--CHANGELOG.md6
-rw-r--r--include/git2/merge.h6
-rw-r--r--src/merge.c1
-rw-r--r--src/merge_file.c2
-rw-r--r--tests/merge/conflict_data.h8
-rw-r--r--tests/merge/trees/recursive.c4
-rw-r--r--tests/merge/workdir/recursive.c4
7 files changed, 23 insertions, 8 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 305468192..ee516a668 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -26,6 +26,12 @@ v0.26 + 1
### Breaking API changes
+* The `git_merge_file_options` structure now contains a new setting,
+ `marker_size`. This allows users to set the size of markers that
+ delineate the sides of merged files in the output conflict file.
+ By default this is 7 (`GIT_MERGE_CONFLICT_MARKER_SIZE`), which
+ produces output markers like `<<<<<<<` and `>>>>>>>`.
+
v0.26
-----
diff --git a/include/git2/merge.h b/include/git2/merge.h
index 94ac8b5c5..80ef864d1 100644
--- a/include/git2/merge.h
+++ b/include/git2/merge.h
@@ -162,6 +162,8 @@ typedef enum {
GIT_MERGE_FILE_DIFF_MINIMAL = (1 << 7),
} git_merge_file_flag_t;
+#define GIT_MERGE_CONFLICT_MARKER_SIZE 7
+
/**
* Options for merging a file
*/
@@ -191,6 +193,10 @@ typedef struct {
/** see `git_merge_file_flag_t` above */
git_merge_file_flag_t flags;
+
+ /** The size of conflict markers (eg, "<<<<<<<"). Default is
+ * GIT_MERGE_CONFLICT_MARKER_SIZE. */
+ unsigned short marker_size;
} git_merge_file_options;
#define GIT_MERGE_FILE_OPTIONS_VERSION 1
diff --git a/src/merge.c b/src/merge.c
index 72cfa464d..aae5d764a 100644
--- a/src/merge.c
+++ b/src/merge.c
@@ -2075,6 +2075,7 @@ int git_merge__iterators(
file_opts.our_label = "Temporary merge branch 1";
file_opts.their_label = "Temporary merge branch 2";
file_opts.flags |= GIT_MERGE_FILE_FAVOR__CONFLICTED;
+ file_opts.marker_size = GIT_MERGE_CONFLICT_MARKER_SIZE + 2;
}
diff_list = git_merge_diff_list__alloc(repo);
diff --git a/src/merge_file.c b/src/merge_file.c
index a54d6bd57..a36c1986c 100644
--- a/src/merge_file.c
+++ b/src/merge_file.c
@@ -126,6 +126,8 @@ static int merge_file__xdiff(
if (options.flags & GIT_MERGE_FILE_DIFF_MINIMAL)
xmparam.xpp.flags |= XDF_NEED_MINIMAL;
+ xmparam.marker_size = options.marker_size;
+
if ((xdl_result = xdl_merge(&ancestor_mmfile, &our_mmfile,
&their_mmfile, &xmparam, &mmbuffer)) < 0) {
giterr_set(GITERR_MERGE, "failed to merge files");
diff --git a/tests/merge/conflict_data.h b/tests/merge/conflict_data.h
index e6394a9e8..7d404c81f 100644
--- a/tests/merge/conflict_data.h
+++ b/tests/merge/conflict_data.h
@@ -76,13 +76,13 @@
"<<<<<<< HEAD\n" \
"put into a pot three quarts of water, three onions cut small, one\n" \
"||||||| merged common ancestors\n" \
- "<<<<<<< Temporary merge branch 1\n" \
+ "<<<<<<<<< Temporary merge branch 1\n" \
"Put into a pot three quarts of water, THREE ONIONS CUT SMALL, one\n" \
- "||||||| merged common ancestors\n" \
+ "||||||||| merged common ancestors\n" \
"Put into a pot three quarts of water, three onions cut small, one\n" \
- "=======\n" \
+ "=========\n" \
"PUT INTO A POT three quarts of water, three onions cut small, one\n" \
- ">>>>>>> Temporary merge branch 2\n" \
+ ">>>>>>>>> Temporary merge branch 2\n" \
"=======\n" \
"Put Into A Pot Three Quarts of Water, Three Onions Cut Small, One\n" \
">>>>>>> branchH-2\n" \
diff --git a/tests/merge/trees/recursive.c b/tests/merge/trees/recursive.c
index c5b129bf8..1d54d87b1 100644
--- a/tests/merge/trees/recursive.c
+++ b/tests/merge/trees/recursive.c
@@ -312,7 +312,7 @@ void test_merge_trees_recursive__conflicting_merge_base(void)
{ 0100644, "4b7c5650008b2e747fe1809eeb5a1dde0e80850a", 0, "bouilli.txt" },
{ 0100644, "c4e6cca3ec6ae0148ed231f97257df8c311e015f", 0, "gravy.txt" },
{ 0100644, "68af1fc7407fd9addf1701a87eb1c95c7494c598", 0, "oyster.txt" },
- { 0100644, "3a66812fed1e03ea4a6a7ee28d8a57aec1ca6537", 1, "veal.txt" },
+ { 0100644, "ba5714aa3d5aebfd8e19d19cb1ddcfda63426a44", 1, "veal.txt" },
{ 0100644, "d604c75019c282144bdbbf3fd3462ba74b240efc", 2, "veal.txt" },
{ 0100644, "37a5054a9f9b4628e3924c5cb8f2147c6e2a3efc", 3, "veal.txt" },
};
@@ -339,7 +339,7 @@ void test_merge_trees_recursive__conflicting_merge_base_with_diff3(void)
{ 0100644, "4b7c5650008b2e747fe1809eeb5a1dde0e80850a", 0, "bouilli.txt" },
{ 0100644, "c4e6cca3ec6ae0148ed231f97257df8c311e015f", 0, "gravy.txt" },
{ 0100644, "68af1fc7407fd9addf1701a87eb1c95c7494c598", 0, "oyster.txt" },
- { 0100644, "cd17a91513f3aee9e44114d1ede67932dd41d2fc", 1, "veal.txt" },
+ { 0100644, "adb1bf17d112a0b4ecbd4e75bef6db3335d8ddcf", 1, "veal.txt" },
{ 0100644, "d604c75019c282144bdbbf3fd3462ba74b240efc", 2, "veal.txt" },
{ 0100644, "37a5054a9f9b4628e3924c5cb8f2147c6e2a3efc", 3, "veal.txt" },
};
diff --git a/tests/merge/workdir/recursive.c b/tests/merge/workdir/recursive.c
index 795126255..3c745947c 100644
--- a/tests/merge/workdir/recursive.c
+++ b/tests/merge/workdir/recursive.c
@@ -44,7 +44,7 @@ void test_merge_workdir_recursive__writes_conflict_with_virtual_base(void)
cl_git_pass(git_futils_readbuffer(&conflicting_buf, "merge-recursive/veal.txt"));
cl_assert_equal_s(CONFLICTING_RECURSIVE_F1_TO_F2, conflicting_buf.ptr);
-
+
git_index_free(index);
git_buf_free(&conflicting_buf);
}
@@ -62,7 +62,7 @@ void test_merge_workdir_recursive__conflicting_merge_base_with_diff3(void)
{ 0100644, "4b7c5650008b2e747fe1809eeb5a1dde0e80850a", 0, "bouilli.txt" },
{ 0100644, "c4e6cca3ec6ae0148ed231f97257df8c311e015f", 0, "gravy.txt" },
{ 0100644, "68af1fc7407fd9addf1701a87eb1c95c7494c598", 0, "oyster.txt" },
- { 0100644, "cd17a91513f3aee9e44114d1ede67932dd41d2fc", 1, "veal.txt" },
+ { 0100644, "adb1bf17d112a0b4ecbd4e75bef6db3335d8ddcf", 1, "veal.txt" },
{ 0100644, "d604c75019c282144bdbbf3fd3462ba74b240efc", 2, "veal.txt" },
{ 0100644, "37a5054a9f9b4628e3924c5cb8f2147c6e2a3efc", 3, "veal.txt" },
};