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

Re: Bug: Problem with CRLF line ending in git-diff with coloring

From
SHStefan-W. Hahn <stefan.hahn@s-hahn.de>
Date
Feb 15, 2014, 07:21 UTC
Message-ID
<20140215072158.GK7560@pille.home>
In-Reply-To
<52FE8847.8020101@kdbg.org>
Mail von Johannes Sixt, Fri, 14 Feb 2014 at 22:19:03 +0100:
Good morning,
Show 11 quoted lines
> Am 14.02.2014 17:47, schrieb Stefan-W. Hahn:
> >> It's the right solution. IOW, you should place something like this in
> >> your .gitattributes:
> >>  *.html whitespace=cr-at-eol
> > 
> > Sorry, but this is not possible, because I have files of both sorts (mainly
> > C/C++) files in my repository and cannot change the files as I wish.
> 
> I'm confused. This setting does not change your files, but instructs git
> diff and git apply to not report the trailing CR as white-space error.
> Didn't you try it?
You are right, if I configure
        git config core.whitespace cr-at-eol
then the CR is not highlighted.
I try to work with it; I hope there are no other traps with it.
I changed the test to regard this, here it is.

With kind regards, Stefan

#!/bin/sh # # Copyright (c) 2014 Stefan-W. Hahn #

test_description='Test coloring of diff with CRLF line ending.

' . ./test-lib.sh

get_color ()
{
	git config --get-color "$1"
}
test_expect_success setup '
        git config color.diff.plain black &&
        git config color.diff.meta blue &&
        git config color.diff.frag yellow &&
        git config color.diff.func normal &&
        git config color.diff.old red &&
        git config color.diff.new green &&
        git config color.diff.commit normal &&
	c_reset=$(git config --get-color no.such.color reset) &&
	c_plain=$(get_color color.diff.plain) &&
	c_meta=$(get_color color.diff.meta) &&
	c_frag=$(get_color color.diff.frag) &&
	c_func=$(get_color color.diff.func) &&
	c_old=$(get_color color.diff.old) &&
	c_new=$(get_color color.diff.new) &&
	c_commit=$(get_color color.diff.commit) &&
	c_whitespace=$(get_color color.diff.whitespace)
'

# Test cases # - DOS line ending # - change one line # - change one line ending to UNIX # - UNIX line ending # - change one line (trivial not tested here) # - change one line ending to DOS

tr 'Q' '\015' << EOF > x Zeile 1Q Zeile 2Q Zeile 3Q EOF

git update-index --add x

tr 'Q' '\015' << EOF > x Zeile 1Q Zeile 22Q Zeile 3Q EOF

tr 'Q' '\015' << EOF > expect
diff --git a/x b/x
index 3411cc1..68a4b2c 100644
--- a/x
+++ b/x
@@ -1,3 +1,3 @@
 Zeile 1Q
-Zeile 2Q
+Zeile 22Q
 Zeile 3Q
EOF

tr 'Q' '\015' << EOF > expect_color
${c_meta}diff --git a/x b/x${c_reset}
${c_meta}index 3411cc1..68a4b2c 100644${c_reset}
${c_meta}--- a/x${c_reset}
${c_meta}+++ b/x${c_reset}
${c_frag}@@ -1,3 +1,3 @@${c_reset}
${c_plain} Zeile 1${c_reset}Q
${c_old}-Zeile 2${c_reset}Q
${c_new}+${c_reset}${c_new}Zeile 22${c_reset}Q
${c_plain} Zeile 3${c_reset}Q
EOF

git -c color.diff=false diff > out
test_expect_success "diff files: change line in DOS file without color" '
        test_cmp expect out'

git -c color.diff=always -c core.whitespace=cr-at-eol diff > out
test_expect_success "diff files: change line in DOS file with color" '
        test_cmp expect_color out'


tr 'Q' '\015' << EOF > x
Zeile 1Q
Zeile 2Q
Zeile 3Q
EOF

git update-index --add x

tr 'Q' '\015' << EOF > x
Zeile 1Q
Zeile 2
Zeile 3Q
EOF

tr 'Q' '\015' << EOF > expect
diff --git a/x b/x
index 3411cc1..c040c67 100644
--- a/x
+++ b/x
@@ -1,3 +1,3 @@
 Zeile 1Q
-Zeile 2Q
+Zeile 2
 Zeile 3Q
EOF

tr 'Q' '\015' << EOF > expect_color
${c_meta}diff --git a/x b/x${c_reset}
${c_meta}index 3411cc1..c040c67 100644${c_reset}
${c_meta}--- a/x${c_reset}
${c_meta}+++ b/x${c_reset}
${c_frag}@@ -1,3 +1,3 @@${c_reset}
${c_plain} Zeile 1${c_reset}Q
${c_old}-Zeile 2${c_reset}Q
${c_new}+${c_reset}${c_new}Zeile 2${c_reset}
${c_plain} Zeile 3${c_reset}Q
EOF

git -c color.diff=false diff > out
test_expect_success "diff files: change line ending in DOS file to LF ending without color" '
        test_cmp expect out'

git -c color.diff=always diff > out
test_expect_success "diff files: change line ending in DOS file to LF ending with color" '
        test_cmp expect_color out'

tr 'Q' '\015' << EOF > x
Zeile 1
Zeile 2
Zeile 3
EOF

git update-index --add x

tr 'Q' '\015' << EOF > x
Zeile 1
Zeile 2Q
Zeile 3
EOF

tr 'Q' '\015' << EOF > expect
diff --git a/x b/x
index a385875..63416d7 100644
--- a/x
+++ b/x
@@ -1,3 +1,3 @@
 Zeile 1
-Zeile 2
+Zeile 2Q
 Zeile 3
EOF

tr 'Q' '\015' << EOF > expect_color
${c_meta}diff --git a/x b/x${c_reset}
${c_meta}index a385875..63416d7 100644${c_reset}
${c_meta}--- a/x${c_reset}
${c_meta}+++ b/x${c_reset}
${c_frag}@@ -1,3 +1,3 @@${c_reset}
${c_plain} Zeile 1${c_reset}
${c_old}-Zeile 2${c_reset}
${c_new}+${c_reset}${c_new}Zeile 2${c_reset}Q
${c_plain} Zeile 3${c_reset}
EOF

git -c color.diff=false diff > out
test_expect_success "diff files: change line ending in UNIX file to CRLF ending without color" '
        test_cmp expect out'

git -c color.diff=always -c core.whitespace=cr-at-eol diff > out
test_expect_success "diff files: change line ending in UNIX file to CRLF ending with color" '
        test_cmp expect_color out'

test_done
-- 
Stefan-W. Hahn                          It is easy to make things.
                                        It is hard to make things simple.
Previous: Johannes SixtNext: Stefan-W. Hahn
Message 5 of 6 in “Bug: Problem with CRLF line ending in git-diff with coloring”
  1. Stefan-W. HahnFeb 9, 2014
  2. Johannes SixtFeb 9, 2014
  3. Stefan-W. HahnFeb 14, 2014
  4. Johannes SixtFeb 14, 2014
  5. Stefan-W. HahnFeb 15, 2014
  6. Stefan-W. HahnFeb 14, 2014

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.