The manual advertises that setting "crlf" attribute to false marks the file as binary. We should pay attention to this condition in addition to the "do not diff" attribute (i.e. setting "diff" to false) when deciding not to show the textual diff. Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- * Strictly speaking any change is backward incompatible, and this is certainly one, but I do not think of a good use case to depend on the previous behaviour, which was reported as a bug by my coworker. diff.c | 28 +++++++++++++++++++--------- 1 files changed, 19 insertions(+), 9 deletions(-) diff --git a/diff.c b/diff.c index 18fa7a7..258b438 100644 --- a/diff.c +++ b/diff.c @@ -1314,36 +1314,46 @@ static void emit_binary_diff(FILE *file, mmfile_t *one, mmfile_t *two) static void setup_diff_attr_check(struct git_attr_check *check) { static struct git_attr *attr_diff; + static struct git_attr *attr_crlf; - if (!attr_diff) { + if (!attr_diff) attr_diff = git_attr("diff", 4); - } + if (!attr_crlf) + attr_crlf = git_attr("crlf", 4); check[0].attr = attr_diff; + check[1].attr = attr_crlf; } static void diff_filespec_check_attr(struct diff_filespec *one) { - struct git_attr_check attr_diff_check; + struct git_attr_check attr_diff_check[2]; int check_from_data = 0; if (one->checked_attr) return; - setup_diff_attr_check(&attr_diff_check); + setup_diff_attr_check(attr_diff_check); one->is_binary = 0; one->funcname_pattern_ident = NULL; - if (!git_checkattr(one->path, 1, &attr_diff_check)) { + if (!git_checkattr(one->path, 2, attr_diff_check)) { const char *value; - /* binaryness */ - value = attr_diff_check.value; + /* binaryness; check both "diff" and "crlf" */ + value = attr_diff_check[0].value; if (ATTR_TRUE(value)) ; else if (ATTR_FALSE(value)) one->is_binary = 1; - else - check_from_data = 1; + else { + const char *crlf = attr_diff_check[1].value; + if (ATTR_TRUE(crlf)) + ; + else if (ATTR_FALSE(crlf)) + one->is_binary = 1; + else + check_from_data = 1; + } /* funcname pattern ident */ if (ATTR_TRUE(value) || ATTR_FALSE(value) || ATTR_UNSET(value)) -- 1.6.0.1.90.g27a6e -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html