Hi, well, it was a quick fix. I had more on my wishlist for today, and wanted to be done with it quickly. The proper fix would be something like this, I guess (which should not be applied without the changes to t4020, of course): diff.c | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-) diff --git a/diff.c b/diff.c index 04e7e91..e47921f 100644 --- a/diff.c +++ b/diff.c @@ -1113,13 +1113,13 @@ static void setup_diff_attr_check(struct git_attr_check *check) static void diff_filespec_check_attr(struct diff_filespec *one) { + int is_binary = -1; struct git_attr_check attr_diff_check[2]; if (one->checked_attr) return; setup_diff_attr_check(attr_diff_check); - one->is_binary = 0; one->hunk_header_ident = NULL; if (!git_checkattr(one->path, ARRAY_SIZE(attr_diff_check), attr_diff_check)) { @@ -1128,9 +1128,9 @@ static void diff_filespec_check_attr(struct diff_filespec *one) /* binaryness */ value = attr_diff_check[0].value; if (ATTR_TRUE(value)) - ; + is_binary = 0; else if (ATTR_FALSE(value)) - one->is_binary = 1; + is_binary = 1; /* hunk header ident */ value = attr_diff_check[1].value; @@ -1140,11 +1140,15 @@ static void diff_filespec_check_attr(struct diff_filespec *one) one->hunk_header_ident = value; } - if (!one->data && DIFF_FILE_VALID(one)) - diff_populate_filespec(one, 0); + if (is_binary < 0) { + if (!one->data && DIFF_FILE_VALID(one)) + diff_populate_filespec(one, 0); - if (one->data) - one->is_binary = buffer_is_binary(one->data, one->size); + if (one->data) + one->is_binary = + buffer_is_binary(one->data, one->size); + } else + one->is_binary = is_binary; } - 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