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

[PATCH v5 4/4] Don't expand CRLFs when normalizing text during merge

From
Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
Date
Jul 1, 2010, 09:09 UTC
Message-ID
<09d063fc517ef0de32adb53e832ad6a7a76649db.1277974452.git.eyvind.bernhardsen@gmail.com>
In-Reply-To
<cover.1277974452.git.eyvind.bernhardsen@gmail.com>

Disable CRLF expansion when convert_to_working_tree() is called from normalize_buffer(). This improves performance when merging branches with conflicting line endings when core.eol=crlf or core.autocrlf=true by making the normalization act as if core.eol=lf.

Signed-off-by: Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 convert.c |   27 ++++++++++++++++++++-------
 1 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/convert.c b/convert.c
index 0203be8..01de9a8 100644
--- a/convert.c
+++ b/convert.c
@@ -741,7 +741,9 @@ int convert_to_git(const char *path, const char *src, size_t len,
 	return ret | ident_to_git(path, src, len, dst, ident);
 }
 
-int convert_to_working_tree(const char *path, const char *src, size_t len, struct strbuf *dst)
+static int convert_to_working_tree_internal(const char *path, const char *src,
+					    size_t len, struct strbuf *dst,
+					    int normalizing)
 {
 	struct git_attr_check check[5];
 	enum action action = CRLF_GUESS;
@@ -767,18 +769,29 @@ int convert_to_working_tree(const char *path, const char *src, size_t len, struc
 		src = dst->buf;
 		len = dst->len;
 	}
-	action = determine_action(action, eol_attr);
-	ret |= crlf_to_worktree(path, src, len, dst, action);
-	if (ret) {
-		src = dst->buf;
-		len = dst->len;
+	/*
+	 * CRLF conversion can be skipped if normalizing, unless there
+	 * is a smudge filter.  The filter might expect CRLFs.
+	 */
+	if (filter || !normalizing) {
+		action = determine_action(action, eol_attr);
+		ret |= crlf_to_worktree(path, src, len, dst, action);
+		if (ret) {
+			src = dst->buf;
+			len = dst->len;
+		}
 	}
 	return ret | apply_filter(path, src, len, dst, filter);
 }
 
+int convert_to_working_tree(const char *path, const char *src, size_t len, struct strbuf *dst)
+{
+	return convert_to_working_tree_internal(path, src, len, dst, 0);
+}
+
 int renormalize_buffer(const char *path, const char *src, size_t len, struct strbuf *dst)
 {
-	int ret = convert_to_working_tree(path, src, len, dst);
+	int ret = convert_to_working_tree_internal(path, src, len, dst, 1);
 	if (ret) {
 		src = dst->buf;
 		len = dst->len;
-- 
1.7.2.rc1.4.g09d06
Previous: Eyvind Bernhardsen
Message 13 of 13 in “Re-rolled merge normalization”
  1. 0/4 Re-rolled merge normalizationEyvind Bernhardsen, Jul 1, 2010
  2. 1/4 Avoid conflicts when merging branches with mixed normalizationEyvind Bernhardsen, Jul 1, 2010
  3. 2/4 Introduce "double conversion during merge" more graduallyEyvind Bernhardsen, Jul 1, 2010
  4. Johannes SixtJul 1, 2010
  5. Junio C HamanoJul 1, 2010
  6. Eyvind BernhardsenJul 1, 2010
  7. Jakub NarebskiJul 1, 2010
  8. Finn Arne GangstadJul 1, 2010
  9. Jakub NarebskiJul 1, 2010
  10. Eyvind BernhardsenJul 1, 2010
  11. Eyvind BernhardsenJul 1, 2010
  12. 3/4 Try normalizing files to avoid delete/modify conflicts when mergingEyvind Bernhardsen, Jul 1, 2010
  13. 4/4 Don't expand CRLFs when normalizing text during mergeEyvind Bernhardsen, Jul 1, 2010

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.