diff options
author | Jacques Germishuys <jacquesg@striata.com> | 2015-03-09 17:02:52 +0200 |
---|---|---|
committer | Jacques Germishuys <jacquesg@striata.com> | 2015-03-16 09:53:27 +0200 |
commit | 45a86bbfd028a545a71d3e1ea5518d467be8b5aa (patch) | |
tree | b5a3fdbc7576309927ecb58ea02a9804945516ec /src | |
parent | d675982a15388d8c413acda139b4662062cf3286 (diff) | |
download | libgit2-45a86bbfd028a545a71d3e1ea5518d467be8b5aa.tar.gz |
Allow for merges with whitespace discrepancies
Diffstat (limited to 'src')
-rw-r--r-- | src/merge.c | 12 | ||||
-rw-r--r-- | src/merge_file.c | 7 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/merge.c b/src/merge.c index 75ad0915e..2972d9ff3 100644 --- a/src/merge.c +++ b/src/merge.c @@ -653,7 +653,8 @@ static int merge_conflict_resolve_automerge( int *resolved, git_merge_diff_list *diff_list, const git_merge_diff *conflict, - unsigned int merge_file_favor) + unsigned int merge_file_favor, + unsigned int whitespace_flags) { const git_index_entry *ancestor = NULL, *ours = NULL, *theirs = NULL; git_merge_file_options opts = GIT_MERGE_FILE_OPTIONS_INIT; @@ -708,6 +709,7 @@ static int merge_conflict_resolve_automerge( &conflict->their_entry : NULL; opts.favor = merge_file_favor; + opts.whitespace_flags = whitespace_flags; if ((error = git_repository_odb(&odb, diff_list->repo)) < 0 || (error = git_merge_file_from_index(&result, diff_list->repo, ancestor, ours, theirs, &opts)) < 0 || @@ -741,7 +743,8 @@ static int merge_conflict_resolve( int *out, git_merge_diff_list *diff_list, const git_merge_diff *conflict, - unsigned int merge_file_favor) + unsigned int merge_file_favor, + unsigned int whitespace_flags) { int resolved = 0; int error = 0; @@ -757,7 +760,8 @@ static int merge_conflict_resolve( if (!resolved && (error = merge_conflict_resolve_one_renamed(&resolved, diff_list, conflict)) < 0) goto done; - if (!resolved && (error = merge_conflict_resolve_automerge(&resolved, diff_list, conflict, merge_file_favor)) < 0) + if (!resolved && (error = merge_conflict_resolve_automerge(&resolved, diff_list, conflict, + merge_file_favor, whitespace_flags)) < 0) goto done; *out = resolved; @@ -1779,7 +1783,7 @@ int git_merge_trees( git_vector_foreach(&changes, i, conflict) { int resolved = 0; - if ((error = merge_conflict_resolve(&resolved, diff_list, conflict, opts.file_favor)) < 0) + if ((error = merge_conflict_resolve(&resolved, diff_list, conflict, opts.file_favor, opts.whitespace_flags)) < 0) goto done; if (!resolved) diff --git a/src/merge_file.c b/src/merge_file.c index ff0364432..b827ca977 100644 --- a/src/merge_file.c +++ b/src/merge_file.c @@ -151,6 +151,13 @@ static int git_merge_file__from_inputs( if (options.flags & GIT_MERGE_FILE_STYLE_DIFF3) xmparam.style = XDL_MERGE_DIFF3; + if (options.whitespace_flags & GIT_MERGE_FILE_IGNORE_WHITESPACE) + xmparam.xpp.flags |= XDF_IGNORE_WHITESPACE; + if (options.whitespace_flags & GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE) + xmparam.xpp.flags |= XDF_IGNORE_WHITESPACE_CHANGE; + if (options.whitespace_flags & GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL) + xmparam.xpp.flags |= XDF_IGNORE_WHITESPACE_AT_EOL; + if ((xdl_result = xdl_merge(&ancestor_mmfile, &our_mmfile, &their_mmfile, &xmparam, &mmbuffer)) < 0) { giterr_set(GITERR_MERGE, "Failed to merge files."); |