threads / discuss / 35857

git blame: "Not Committed Yet" with clean WD

Subject: git blame: "Not Committed Yet" with clean WD

## tl;dr

4 messages between Feb 13, 2014 and Feb 19, 2014.

replies: 3people: 3as markdown or json

Ephrim Khong· Feb 13, 2014, 09:08 UTC · lore
Hi,

for files that contain windows line endings in a repository with core.autocrlf=input, git blame will show lines as "Not Committed Yet", even though they were not modified.

Example:

-- git init git config core.autocrlf false echo "foo" > a unix2dos a git add a git commit -m "initial commit" git config core.autocrlf input git status git blame a --

Output:

-- Reinitialized existing Git repository in /.../testblame2/.git/ unix2dos: converting file a to DOS format ... On branch master nothing to commit, working directory clean On branch master nothing to commit, working directory clean 00000000 (Not Committed Yet 2014-02-13 10:02:43 +0100 1) foo --

Is there an easy way to work around this; is this desired behaviour or mor a bug?

Thanks - Eph
brian m. carlson· Feb 14, 2014, 19:10 UTC · re: Ephrim Khong · lore

Re: git blame: "Not Committed Yet" with clean WD

On Thu, Feb 13, 2014 at 10:08:55AM +0100, Ephrim Khong wrote:
Show 34 quoted lines
> Hi,
> 
> for files that contain windows line endings in a repository with
> core.autocrlf=input, git blame will show lines as "Not Committed
> Yet", even though they were not modified.
> 
> Example:
> 
> --
> git init
> git config core.autocrlf false
> echo "foo" > a
> unix2dos a
> git add a
> git commit -m "initial commit"
> git config core.autocrlf input
> git status
> git blame a
> --
> 
> Output:
> 
> --
> Reinitialized existing Git repository in /.../testblame2/.git/
> unix2dos: converting file a to DOS format ...
> On branch master
> nothing to commit, working directory clean
> On branch master
> nothing to commit, working directory clean
> 00000000 (Not Committed Yet 2014-02-13 10:02:43 +0100 1) foo
> --
> 
> Is there an easy way to work around this; is this desired behaviour
> or mor a bug?

I'm pretty sure this is a bug. git blame should show the proper information in this case.

-- 
brian m. carlson / brian with sandals: Houston, Texas, US
+1 832 623 2791 | http://www.crustytoothpaste.net/~bmc | My opinion only
OpenPGP: RSA v4 4096b: 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187
brian m. carlson· Feb 18, 2014, 19:45 UTC · re: brian m. carlson · lore

[PATCH] blame: add a failing test for a CRLF issue.

If a file contains CRLF line endings in a repository with core.autocrlf=input, then blame always marks the lines as "Not Committed Yet", even if they are unmodified. Add a failing test for this case, so we are at least aware of this issue.

Reported-by: Ephrim Khong <dr.khong@gmail.com>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---

Obviously, this doesn't actually fix the issue, but at least we're aware of it so we don't lose track of it and can fix it. A future patch can mark the test passing.

 t/t8003-blame-corner-cases.sh | 10 ++++++++++
 1 file changed, 10 insertions(+)
diff --git a/t/t8003-blame-corner-cases.sh b/t/t8003-blame-corner-cases.sh
index e7cac1d..903f775 100755
--- a/t/t8003-blame-corner-cases.sh
+++ b/t/t8003-blame-corner-cases.sh
@@ -191,4 +191,14 @@ test_expect_success 'indent of line numbers, ten lines' '
 	test $(grep -c "  " actual) = 9
 '
 
+test_expect_failure 'blaming files with CRLF newlines' '
+	git config core.autocrlf false &&
+	printf "testcase\r\n" >crlffile &&
+	git add crlffile &&
+	git commit -m testcase &&
+	git config core.autocrlf input &&
+	git blame crlffile >actual &&
+	grep "A U Thor" actual
+'
+
 test_done
-- 
1.9.0.rc3.1008.gd08b47c.dirty
Torsten Bögershausen· Feb 19, 2014, 20:16 UTC · re: brian m. carlson · lore

Re: [PATCH] blame: add a failing test for a CRLF issue.

On 02/18/2014 08:45 PM, brian m. carlson wrote:
Show 36 quoted lines
> If a file contains CRLF line endings in a repository with
> core.autocrlf=input, then blame always marks the lines as "Not Committed
> Yet", even if they are unmodified.  Add a failing test for this case, so we
> are at least aware of this issue.
>
> Reported-by: Ephrim Khong <dr.khong@gmail.com>
> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
> ---
>
> Obviously, this doesn't actually fix the issue, but at least we're aware of it
> so we don't lose track of it and can fix it.  A future patch can mark the test
> passing.
>
>   t/t8003-blame-corner-cases.sh | 10 ++++++++++
>   1 file changed, 10 insertions(+)
>
> diff --git a/t/t8003-blame-corner-cases.sh b/t/t8003-blame-corner-cases.sh
> index e7cac1d..903f775 100755
> --- a/t/t8003-blame-corner-cases.sh
> +++ b/t/t8003-blame-corner-cases.sh
> @@ -191,4 +191,14 @@ test_expect_success 'indent of line numbers, ten lines' '
>   	test $(grep -c "  " actual) = 9
>   '
>
> +test_expect_failure 'blaming files with CRLF newlines' '
> +	git config core.autocrlf false &&
> +	printf "testcase\r\n" >crlffile &&
> +	git add crlffile &&
> +	git commit -m testcase &&
> +	git config core.autocrlf input &&
> +	git blame crlffile >actual &&
> +	grep "A U Thor" actual
> +'
> +
>   test_done
>

We can test that git blame gives the same result with core.autocrlf=input and core.autocrlf=false, and make the test case look like this:

test_expect_failure 'blaming files with CRLF newlines' '
	git config core.autocrlf false &&
	printf "testcase\r\n" >crlffile &&
	git add crlffile &&
	git commit -m testcase &&
	git blame crlffile >expected &&
	git -c core.autocrlf=input blame crlffile >actual &&
	test_cmp expected actual
'

← back to recent threads