Re: Bug: Problem with CRLF line ending in git-diff with coloring
- From
- Stefan-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.