diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2015-03-18 13:17:04 -0400 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2015-03-18 13:17:04 -0400 |
commit | 89ba9f1acc7d6f26ce45a6ccd128a2c270a5fe79 (patch) | |
tree | 523e5c8b37fc1acf9fb9779a8a29140ea64f2787 /src | |
parent | 7568bdf4abf8c99c4bf0a87ff4ce6967c333e70a (diff) | |
parent | 70b0f128c8f8a9f6bd2ec4ec0b326f8c03f9efb4 (diff) | |
download | libgit2-89ba9f1acc7d6f26ce45a6ccd128a2c270a5fe79.tar.gz |
Merge pull request #2967 from jacquesg/merge-whitespace
Allow merges of files (and trees) with whitespace problems/fixes
Diffstat (limited to 'src')
-rw-r--r-- | src/merge.c | 16 | ||||
-rw-r--r-- | src/merge_file.c | 13 |
2 files changed, 23 insertions, 6 deletions
diff --git a/src/merge.c b/src/merge.c index 449a17853..bd676aacf 100644 --- a/src/merge.c +++ b/src/merge.c @@ -658,7 +658,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 file_flags) { const git_index_entry *ancestor = NULL, *ours = NULL, *theirs = NULL; git_merge_file_options opts = GIT_MERGE_FILE_OPTIONS_INIT; @@ -716,6 +717,7 @@ static int merge_conflict_resolve_automerge( &conflict->their_entry : NULL; opts.favor = merge_file_favor; + opts.flags = file_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 || @@ -749,7 +751,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 file_flags) { int resolved = 0; int error = 0; @@ -765,7 +768,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, file_flags)) < 0) goto done; *out = resolved; @@ -1158,7 +1162,7 @@ int git_merge_diff_list__find_renames( assert(diff_list && opts); - if ((opts->flags & GIT_MERGE_TREE_FIND_RENAMES) == 0) + if ((opts->tree_flags & GIT_MERGE_TREE_FIND_RENAMES) == 0) return 0; similarity_ours = git__calloc(diff_list->conflicts.length, @@ -1600,7 +1604,7 @@ static int merge_normalize_opts( git_merge_options init = GIT_MERGE_OPTIONS_INIT; memcpy(opts, &init, sizeof(init)); - opts->flags = GIT_MERGE_TREE_FIND_RENAMES; + opts->tree_flags = GIT_MERGE_TREE_FIND_RENAMES; opts->rename_threshold = GIT_MERGE_TREE_RENAME_THRESHOLD; } @@ -1790,7 +1794,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.file_flags)) < 0) goto done; if (!resolved) diff --git a/src/merge_file.c b/src/merge_file.c index ff0364432..6d89b089d 100644 --- a/src/merge_file.c +++ b/src/merge_file.c @@ -151,6 +151,19 @@ static int git_merge_file__from_inputs( if (options.flags & GIT_MERGE_FILE_STYLE_DIFF3) xmparam.style = XDL_MERGE_DIFF3; + if (options.flags & GIT_MERGE_FILE_IGNORE_WHITESPACE) + xmparam.xpp.flags |= XDF_IGNORE_WHITESPACE; + if (options.flags & GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE) + xmparam.xpp.flags |= XDF_IGNORE_WHITESPACE_CHANGE; + if (options.flags & GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL) + xmparam.xpp.flags |= XDF_IGNORE_WHITESPACE_AT_EOL; + + if (options.flags & GIT_MERGE_FILE_DIFF_PATIENCE) + xmparam.xpp.flags |= XDF_PATIENCE_DIFF; + + if (options.flags & GIT_MERGE_FILE_DIFF_MINIMAL) + xmparam.xpp.flags |= XDF_NEED_MINIMAL; + if ((xdl_result = xdl_merge(&ancestor_mmfile, &our_mmfile, &their_mmfile, &xmparam, &mmbuffer)) < 0) { giterr_set(GITERR_MERGE, "Failed to merge files."); |