From: Torsten Bögershausen <[email protected]>

Commit "convert.c: refactor crlf_action" unified the crlf_handling
and introdused a bug for "git ls-files --eol".
The "text" attribute was shown as "text eol=lf" or "text eol=crlf",
depending on core.autocrlf or core.eol.
Correct this and add test cases in t0027.

Signed-off-by: Torsten Bögershausen <[email protected]>
---
This fix needs to go on top of tb/conversion
convert.c            |  3 ++-
 t/t0027-auto-crlf.sh | 47 ++++++++++++++++++++++++++++++++++++++++-------
 2 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/convert.c b/convert.c
index 18af685..0bc32ec 100644
--- a/convert.c
+++ b/convert.c
@@ -708,7 +708,7 @@ static enum crlf_action git_path_check_crlf(struct 
git_attr_check *check)
        const char *value = check->value;
 
        if (ATTR_TRUE(value))
-               return text_eol_is_crlf() ? CRLF_TEXT_CRLF : CRLF_TEXT_INPUT;
+               return CRLF_TEXT;
        else if (ATTR_FALSE(value))
                return CRLF_BINARY;
        else if (ATTR_UNSET(value))
@@ -792,6 +792,7 @@ static void convert_attrs(struct conv_attrs *ca, const char 
*path)
                        ca->crlf_action = CRLF_TEXT_INPUT;
                else if (eol_attr == EOL_CRLF)
                        ca->crlf_action = CRLF_TEXT_CRLF;
+               ca->attr_action = ca->crlf_action;
        } else {
                ca->drv = NULL;
                ca->crlf_action = CRLF_UNDEFINED;
diff --git a/t/t0027-auto-crlf.sh b/t/t0027-auto-crlf.sh
index fc4c628..f9c92c6 100755
--- a/t/t0027-auto-crlf.sh
+++ b/t/t0027-auto-crlf.sh
@@ -159,6 +159,39 @@ stats_ascii () {
 
 }
 
+attr_ascii () {
+       case "$1" in
+       "-text") echo "-text"   ;;
+       lf)     echo "text eol=lf" ;;
+       crlf)   echo "text eol=crlf" ;;
+       text)
+               case "$2" in
+               "")     echo "text" ;;
+               lf)     echo "text eol=lf" ;;
+               crlf)   echo "text eol=crlf" ;;
+               *) echo invalid_attr2 "$2" ;;
+               esac
+               ;;
+       auto)
+               case "$2" in
+               "")     echo "text=auto" ;;
+               lf)     echo "text=auto eol=lf" ;;
+               crlf)   echo "text=auto eol=crlf" ;;
+               *) echo invalid_attr2 "$2"      ;;
+               esac
+               ;;
+       "")
+               case "$2" in
+               "")     echo "" ;;
+               lf)     echo "text eol=lf" ;;
+               crlf)   echo "text eol=crlf" ;;
+               *) echo invalid_attr2 "$2" ;;
+               esac
+               ;;
+       *)echo invalid_attr1 "$1"       ;;
+       esac
+}
+
 check_files_in_repo () {
        crlf=$1
        attr=$2
@@ -228,15 +261,15 @@ checkout_files () {
        test_expect_success "ls-files --eol attr=$attr $ident $aeol 
core.autocrlf=$crlf core.eol=$ceol" '
                test_when_finished "rm expect actual" &&
                sort <<-EOF >expect &&
-               i/crlf w/$(stats_ascii $crlfname) crlf_false_attr__CRLF.txt
-               i/mixed w/$(stats_ascii $lfmixcrlf) 
crlf_false_attr__CRLF_mix_LF.txt
-               i/lf w/$(stats_ascii $lfname) crlf_false_attr__LF.txt
-               i/-text w/$(stats_ascii $lfmixcr) crlf_false_attr__LF_mix_CR.txt
-               i/-text w/$(stats_ascii $crlfnul) crlf_false_attr__CRLF_nul.txt
-               i/-text w/$(stats_ascii $crlfnul) crlf_false_attr__LF_nul.txt
+               i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr 
$aeol) crlf_false_attr__CRLF.txt
+               i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr 
$aeol) crlf_false_attr__CRLF_mix_LF.txt
+               i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) 
crlf_false_attr__LF.txt
+               i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr 
$aeol) crlf_false_attr__LF_mix_CR.txt
+               i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr 
$aeol) crlf_false_attr__CRLF_nul.txt
+               i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr 
$aeol) crlf_false_attr__LF_nul.txt
                EOF
                git ls-files --eol crlf_false_attr__* |
-               sed -e "s!attr/[^       ]*!!g" -e "s/   / /g" -e "s/  */ /g" |
+               sed -e "s/      / /g" -e "s/  */ /g" |
                sort >actual &&
                test_cmp expect actual
        '
-- 
2.7.0.303.g2c4f448.dirty

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to