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

Re: [PATCH 2/2] Define a few built-in attribute rules.

From
Junio C Hamano <junkio@cox.net>
Date
Apr 15, 2007, 02:34 UTC
Message-ID
<7v8xcu5ps7.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<7vr6qm5r73.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> writes:
Show 21 quoted lines
> Linus Torvalds <torvalds@linux-foundation.org> writes:
>
>> Why would 
>>
>> 	* diff crlf
>>
>> be "obviously sane"?
>>
>> In fact, I'd call it obviously insane.
>>
>> We do *not* want to default crlf to all files. We want the default to be 
>> "automatic crlf depending on content". 
>
> You do not have to worry.
>
> That's how "crlf" is defined.  Paths you explicitly say !crlf
> will _not_ go through the existing core.autocrlf mechanism.
>
> "* crlf" just says, by default everybody is subject to core.autocrlf,
> and on sane platforms, core.autocrlf is by default off, hence you will
> not get LF <-> CRLF applied.

Having said that, if we really wanted to, we could introduce a way to explicitly say "Even if the contents do not look like text, apply line ending conversion, always", by redefining the meaning of 'crlf' attribute.

But I do not know if that makes much sense. Being able to turn _off_ would be a good thing because a particular file that looks like CRLF terminated text might not be text. But the other way around? IOW, I do not think of a case where a file that does not even look like a text wants CRLF conversion.

---
diff --git a/convert.c b/convert.c
index 20c744a..f9e5d63 100644
--- a/convert.c
+++ b/convert.c
@@ -191,7 +191,7 @@ static void setup_crlf_check(struct git_attr_check *check)
 	check->attr = attr_crlf;
 }
 
-static int git_path_is_binary(const char *path)
+static int git_path_check_crlf(const char *path)
 {
 	struct git_attr_check attr_crlf_check;
 
@@ -202,20 +202,31 @@ static int git_path_is_binary(const char *path)
 	 * disable autocrlf only when crlf attribute is explicitly
 	 * unset.
 	 */
-	return (!git_checkattr(path, 1, &attr_crlf_check) &&
-		(0 == attr_crlf_check.isset));
+	if (!git_checkattr(path, 1, &attr_crlf_check))
+		return -1;
+	return attr_crlf_check.isset;
 }
 
 int convert_to_git(const char *path, char **bufp, unsigned long *sizep)
 {
-	if (git_path_is_binary(path))
+	switch (git_path_check_crlf(path)) {
+	case 0:
 		return 0;
-	return autocrlf_to_git(path, bufp, sizep);
+	case 1:
+		return forcecrlf_to_git(path, bufp, sizep);
+	default:
+		return autocrlf_to_git(path, bufp, sizep);
+	}
 }
 
 int convert_to_working_tree(const char *path, char **bufp, unsigned long *sizep)
 {
-	if (git_path_is_binary(path))
+	switch (git_path_check_crlf(path)) {
+	case 0:
 		return 0;
-	return autocrlf_to_working_tree(path, bufp, sizep);
+	case 1:
+		return forcecrlf_to_working_tree(path, bufp, sizep);
+	default:
+		return autocrlf_to_working_tree(path, bufp, sizep);
+	}
 }
Previous: Junio C HamanoNext: Johannes Schindelin
Message 9 of 19 in “Add basic infrastructure to assign attributes to paths”
  1. 1/3 Add basic infrastructure to assign attributes to pathsJunio C Hamano, Apr 13, 2007
  2. Andy ParkinsApr 13, 2007
  3. Junio C HamanoApr 15, 2007
  4. 1/2 attribute macro supportJunio C Hamano, Apr 15, 2007
  5. 2/2 Define a few built-in attribute rules.Junio C Hamano, Apr 15, 2007
  6. Linus TorvaldsApr 15, 2007
  7. Brian GernhardtApr 15, 2007
  8. Junio C HamanoApr 15, 2007
  9. Junio C HamanoApr 15, 2007
  10. Johannes SchindelinApr 15, 2007
  11. Junio C HamanoApr 15, 2007
  12. Linus TorvaldsApr 15, 2007
  13. Fix 'crlf' attribute semantics.Junio C Hamano, Apr 15, 2007
  14. Fix 'diff' attribute semantics.Junio C Hamano, Apr 15, 2007
  15. Tom PrinceApr 15, 2007
  16. Junio C HamanoApr 15, 2007
  17. Raimund BauerApr 16, 2007
  18. Linus TorvaldsApr 13, 2007
  19. Johannes SchindelinApr 15, 2007

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.