git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] diff: treat -crlf files as binary

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 29, 2008, 21:28 UTC
Message-ID
<7vfxon4ikr.fsf@gitster.siamese.dyndns.org>

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@pobox.com>
---
 * 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
Next: Avery Pennarun
Message 1 of 8 in “diff: treat -crlf files as binary”
  1. diff: treat -crlf files as binaryJunio C Hamano, Aug 29, 2008
  2. Avery PennarunAug 29, 2008
  3. Junio C HamanoAug 30, 2008
  4. Avery PennarunAug 31, 2008
  5. Matthieu MoyAug 31, 2008
  6. Alex RiesenAug 31, 2008
  7. Junio C HamanoAug 31, 2008
  8. Avery PennarunAug 31, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.