[PATCH (BUGFIX)] Respect core.autocrlf in combined diff
From: Alexander Gavrilov <hidden>
Date: 2016-06-15 22:45:13
Subsystem:
the rest · Maintainer:
Linus Torvalds
Fix git-diff to make it produce useful 3-way diffs for merge conflicts in repositories with autocrlf enabled. Otherwise it always reports that the whole file was changed. Signed-off-by: Alexander Gavrilov <redacted> --- I noticed that combined diffs, which are shown by git-diff for files with conflicts, are unusable on repositories with autocrlf=true. Steps to reproduce: git init echo foo > file git add file git commit -m init git checkout -b a git checkout -b b echo bbb >> file git add file git commit -m bbb git checkout a echo aaa >> file git add file git commit -m aaa git config core.autocrlf true git merge b Then look at the output of git diff. -- Alexander combine-diff.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/combine-diff.c b/combine-diff.c
index 9f80a1c..da1ca99 100644
--- a/combine-diff.c
+++ b/combine-diff.c@@ -727,6 +727,18 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent, die("early EOF '%s'", elem->path); result[len] = 0; + + /* If not a fake symlink, apply filters, e.g. autocrlf */ + if (is_file) { + struct strbuf buf; + + strbuf_init(&buf, 0); + if (convert_to_git(elem->path, result, len, &buf, safe_crlf)) { + free(result); + result = strbuf_detach(&buf, &len); + result_size = len; + } + } } else { deleted_file:
--
1.6.0.rc2