diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2017-10-29 15:05:28 +0100 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2017-11-19 08:20:18 +0100 |
commit | 7e3faf58cbafd1115d0f4bf6e5a2b422f9ef78f1 (patch) | |
tree | 378c52d782e0caa42a44f4f60b8e7d1ec4427c16 | |
parent | a8f19f819ea5b9a949b439702893f87c2c655141 (diff) | |
download | libgit2-7e3faf58cbafd1115d0f4bf6e5a2b422f9ef78f1.tar.gz |
diff: expose the "indent heuristic" in the diff options
We default to off, but we might want to consider changing `GIT_DIFF_NORMAL` to
include it.
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | include/git2/diff.h | 6 | ||||
-rw-r--r-- | src/diff_xdiff.c | 2 |
3 files changed, 12 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 93a88bd08..305468192 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ v0.26 + 1 * We now support conditional includes in configuration files. +* There is a new diff option, `GIT_DIFF_INDENT_HEURISTIC` which activates a + heuristic which takes into account whitespace and indentation in order to + produce better diffs when dealing with ambiguous diff hunks. + ### API additions * `git_remote_create_detached()` creates a remote that is not associated diff --git a/include/git2/diff.h b/include/git2/diff.h index 75f1e1975..99a94bb6d 100644 --- a/include/git2/diff.h +++ b/include/git2/diff.h @@ -206,6 +206,12 @@ typedef enum { * can apply given diff information to binary files. */ GIT_DIFF_SHOW_BINARY = (1 << 30), + + /** Use a heuristic that takes indentation and whitespace into account + * which generally can produce better diffs when dealing with ambiguous + * diff hunks. + */ + GIT_DIFF_INDENT_HEURISTIC = (1 << 31), } git_diff_option_t; /** diff --git a/src/diff_xdiff.c b/src/diff_xdiff.c index 5e10db13d..701eb1b5f 100644 --- a/src/diff_xdiff.c +++ b/src/diff_xdiff.c @@ -239,6 +239,8 @@ void git_xdiff_init(git_xdiff_output *xo, const git_diff_options *opts) xo->params.flags |= XDF_IGNORE_WHITESPACE_CHANGE; if (flags & GIT_DIFF_IGNORE_WHITESPACE_EOL) xo->params.flags |= XDF_IGNORE_WHITESPACE_AT_EOL; + if (flags & GIT_DIFF_INDENT_HEURISTIC) + xo->params.flags |= XDF_INDENT_HEURISTIC; if (flags & GIT_DIFF_PATIENCE) xo->params.flags |= XDF_PATIENCE_DIFF; |