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

[PATCH/RFC] blame: CRLF in the working tree and LF in the repo

From
Torsten Bögershausen <tboegi@web.de>
Date
Apr 26, 2015, 12:02 UTC
Message-ID
<553CD3DA.9090700@web.de>

A typicall setup under Windows: core.eol is CRLF and a file is marked as "text" in .gitattributes.

After 4d4813a5 "git blame" no longer works as expected, every line is annotated as "Not Committed Yet", even though the working directory is clean.

commit 4d4813a5 removed the conversion in blame.c for all files, with or without CRLF in the repo.

Having files with CRLF in the repo and core.autocrlf=input is a temporary situation, the files should be normalized in the repo. Blaming them with "Not Committed Yet" is OK.

The solution is to revert commit 4d4813a5.
Reported-By: Stepan Kasal <kasal@ucw.cz>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
---
Reference:
https://github.com/git-for-windows/git/issues/105
Although the intention of 4d4813a5 is good, it breaks
the usual EOL-handling for Windows.
Until we have a better solution, we suggest to revert it.
 builtin/blame.c               |  1 +
 t/t8003-blame-corner-cases.sh | 26 +++++++++++++++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/builtin/blame.c b/builtin/blame.c
index 06484c2..8d70623 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -2348,6 +2348,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
 		if (strbuf_read(&buf, 0, 0) < 0)
 			die_errno("failed to read from stdin");
 	}
+	convert_to_git(path, buf.buf, buf.len, &buf, 0);
 	origin->file.ptr = buf.buf;
 	origin->file.size = buf.len;
 	pretend_sha1_file(buf.buf, buf.len, OBJ_BLOB, origin->blob_sha1);
diff --git a/t/t8003-blame-corner-cases.sh b/t/t8003-blame-corner-cases.sh
index 32895e5..dcc9827 100755
--- a/t/t8003-blame-corner-cases.sh
+++ b/t/t8003-blame-corner-cases.sh
@@ -191,7 +191,7 @@ test_expect_success 'indent of line numbers, ten lines' '
 	test $(grep -c "  " actual) = 9
 '
 
-test_expect_success 'blaming files with CRLF newlines' '
+test_expect_failure 'blaming files with CRLF newlines in repo, core.autoclrf=input' '
 	git config core.autocrlf false &&
 	printf "testcase\r\n" >crlffile &&
 	git add crlffile &&
@@ -199,5 +199,29 @@ test_expect_success 'blaming files with CRLF newlines' '
 	git -c core.autocrlf=input blame crlffile >actual &&
 	grep "A U Thor" actual
 '
+test_expect_success 'blaming files with CRLF newlines core.autocrlf=true' '
+	test_create_repo blamerepo &&
+	(
+		cd blamerepo &&
+		git config core.autocrlf true &&
+		printf "testcase\r\n" >crlffile &&
+		git add crlffile &&
+		git commit -m TRUE &&
+		git blame crlffile >actual &&
+		grep "A U Thor" actual
+	)
+'
+
+test_expect_success 'blaming files with CRLF newlines core.autocrlf=false' '
+	(
+		cd blamerepo &&
+		git config core.autocrlf false &&
+		printf ".gitattributes text\r\n" >.gitattributes &&
+		git add .gitattributes &&
+		git commit -m FALSE &&
+		git blame .gitattributes >actual &&
+		grep "A U Thor" actual
+	)
+'
 
 test_done
-- 
2.2.0.rc1.790.ge19fcd2
Next: Eric Sunshine
Message 1 of 16 in “blame: CRLF in the working tree and LF in the repo”
  1. blame: CRLF in the working tree and LF in the repoTorsten Bögershausen, Apr 26, 2015
  2. Eric SunshineApr 26, 2015
  3. Stepan KasalApr 27, 2015
  4. Junio C HamanoApr 27, 2015
  5. Stepan KasalApr 27, 2015
  6. Johannes SixtApr 27, 2015
  7. Torsten BögershausenApr 27, 2015
  8. Johannes SixtApr 28, 2015
  9. Junio C HamanoApr 28, 2015
  10. Johannes SixtApr 28, 2015
  11. Stepan KasalApr 28, 2015
  12. Junio C HamanoApr 27, 2015
  13. Torsten BögershausenApr 27, 2015
  14. Junio C HamanoApr 28, 2015
  15. Torsten BögershausenApr 28, 2015
  16. brian m. carlsonApr 28, 2015

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.