Imported Upstream version 2.22.2
[platform/upstream/git.git] / t / t0020-crlf.sh
index 1a8f44c..854da0a 100755 (executable)
@@ -8,6 +8,13 @@ has_cr() {
        tr '\015' Q <"$1" | grep Q >/dev/null
 }
 
+# add or remove CRs to disk file in-place
+# usage: munge_cr <append|remove> <file>
+munge_cr () {
+       "${1}_cr" <"$2" >tmp &&
+       mv tmp "$2"
+}
+
 test_expect_success setup '
 
        git config core.autocrlf false &&
@@ -20,17 +27,15 @@ test_expect_success setup '
 
        git commit -m initial &&
 
-       one=`git rev-parse HEAD:one` &&
-       dir=`git rev-parse HEAD:dir` &&
-       two=`git rev-parse HEAD:dir/two` &&
-       three=`git rev-parse HEAD:three` &&
+       one=$(git rev-parse HEAD:one) &&
+       dir=$(git rev-parse HEAD:dir) &&
+       two=$(git rev-parse HEAD:dir/two) &&
+       three=$(git rev-parse HEAD:three) &&
 
        for w in Some extra lines here; do echo $w; done >>one &&
        git diff >patch.file &&
-       patched=`git hash-object --stdin <one` &&
-       git read-tree --reset -u HEAD &&
-
-       echo happy.
+       patched=$(git hash-object --stdin <one) &&
+       git read-tree --reset -u HEAD
 '
 
 test_expect_success 'safecrlf: autocrlf=input, all CRLF' '
@@ -78,9 +83,31 @@ test_expect_success 'safecrlf: print warning only once' '
        git add doublewarn &&
        git commit -m "nowarn" &&
        for w in Oh here is CRLFQ in text; do echo $w; done | q_to_cr >doublewarn &&
-       test $(git add doublewarn 2>&1 | grep "CRLF will be replaced by LF" | wc -l) = 1
+       git add doublewarn 2>err &&
+       if test_have_prereq C_LOCALE_OUTPUT
+       then
+               test $(grep "CRLF will be replaced by LF" err | wc -l) = 1
+       fi
+'
+
+
+test_expect_success 'safecrlf: git diff demotes safecrlf=true to warn' '
+       git config core.autocrlf input &&
+       git config core.safecrlf true &&
+       git diff HEAD
 '
 
+
+test_expect_success 'safecrlf: no warning with safecrlf=false' '
+       git config core.autocrlf input &&
+       git config core.safecrlf false &&
+
+       for w in I am all CRLF; do echo $w; done | append_cr >allcrlf &&
+       git add allcrlf 2>err &&
+       test_must_be_empty err
+'
+
+
 test_expect_success 'switch off autocrlf, safecrlf, reset HEAD' '
        git config core.autocrlf false &&
        git config core.safecrlf false &&
@@ -92,22 +119,11 @@ test_expect_success 'update with autocrlf=input' '
        rm -f tmp one dir/two three &&
        git read-tree --reset -u HEAD &&
        git config core.autocrlf input &&
-
-       for f in one dir/two
-       do
-               append_cr <$f >tmp && mv -f tmp $f &&
-               git update-index -- $f || {
-                       echo Oops
-                       false
-                       break
-               }
-       done &&
-
-       differs=`git diff-index --cached HEAD` &&
-       test -z "$differs" || {
-               echo Oops "$differs"
-               false
-       }
+       munge_cr append one &&
+       munge_cr append dir/two &&
+       git update-index -- one dir/two &&
+       differs=$(git diff-index --cached HEAD) &&
+       verbose test -z "$differs"
 
 '
 
@@ -116,22 +132,11 @@ test_expect_success 'update with autocrlf=true' '
        rm -f tmp one dir/two three &&
        git read-tree --reset -u HEAD &&
        git config core.autocrlf true &&
-
-       for f in one dir/two
-       do
-               append_cr <$f >tmp && mv -f tmp $f &&
-               git update-index -- $f || {
-                       echo "Oops $f"
-                       false
-                       break
-               }
-       done &&
-
-       differs=`git diff-index --cached HEAD` &&
-       test -z "$differs" || {
-               echo Oops "$differs"
-               false
-       }
+       munge_cr append one &&
+       munge_cr append dir/two &&
+       git update-index -- one dir/two &&
+       differs=$(git diff-index --cached HEAD) &&
+       verbose test -z "$differs"
 
 '
 
@@ -140,23 +145,13 @@ test_expect_success 'checkout with autocrlf=true' '
        rm -f tmp one dir/two three &&
        git config core.autocrlf true &&
        git read-tree --reset -u HEAD &&
-
-       for f in one dir/two
-       do
-               remove_cr <"$f" >tmp && mv -f tmp $f &&
-               git update-index -- $f || {
-                       echo "Eh? $f"
-                       false
-                       break
-               }
-       done &&
-       test "$one" = `git hash-object --stdin <one` &&
-       test "$two" = `git hash-object --stdin <dir/two` &&
-       differs=`git diff-index --cached HEAD` &&
-       test -z "$differs" || {
-               echo Oops "$differs"
-               false
-       }
+       munge_cr remove one &&
+       munge_cr remove dir/two &&
+       git update-index -- one dir/two &&
+       test "$one" = $(git hash-object --stdin <one) &&
+       test "$two" = $(git hash-object --stdin <dir/two) &&
+       differs=$(git diff-index --cached HEAD) &&
+       verbose test -z "$differs"
 '
 
 test_expect_success 'checkout with autocrlf=input' '
@@ -164,25 +159,13 @@ test_expect_success 'checkout with autocrlf=input' '
        rm -f tmp one dir/two three &&
        git config core.autocrlf input &&
        git read-tree --reset -u HEAD &&
-
-       for f in one dir/two
-       do
-               if has_cr "$f"
-               then
-                       echo "Eh? $f"
-                       false
-                       break
-               else
-                       git update-index -- $f
-               fi
-       done &&
-       test "$one" = `git hash-object --stdin <one` &&
-       test "$two" = `git hash-object --stdin <dir/two` &&
-       differs=`git diff-index --cached HEAD` &&
-       test -z "$differs" || {
-               echo Oops "$differs"
-               false
-       }
+       test_must_fail has_cr one &&
+       test_must_fail has_cr dir/two &&
+       git update-index -- one dir/two &&
+       test "$one" = $(git hash-object --stdin <one) &&
+       test "$two" = $(git hash-object --stdin <dir/two) &&
+       differs=$(git diff-index --cached HEAD) &&
+       verbose test -z "$differs"
 '
 
 test_expect_success 'apply patch (autocrlf=input)' '
@@ -192,10 +175,7 @@ test_expect_success 'apply patch (autocrlf=input)' '
        git read-tree --reset -u HEAD &&
 
        git apply patch.file &&
-       test "$patched" = "`git hash-object --stdin <one`" || {
-               echo "Eh?  apply without index"
-               false
-       }
+       verbose test "$patched" = "$(git hash-object --stdin <one)"
 '
 
 test_expect_success 'apply patch --cached (autocrlf=input)' '
@@ -205,10 +185,7 @@ test_expect_success 'apply patch --cached (autocrlf=input)' '
        git read-tree --reset -u HEAD &&
 
        git apply --cached patch.file &&
-       test "$patched" = `git rev-parse :one` || {
-               echo "Eh?  apply with --cached"
-               false
-       }
+       verbose test "$patched" = $(git rev-parse :one)
 '
 
 test_expect_success 'apply patch --index (autocrlf=input)' '
@@ -218,11 +195,8 @@ test_expect_success 'apply patch --index (autocrlf=input)' '
        git read-tree --reset -u HEAD &&
 
        git apply --index patch.file &&
-       test "$patched" = `git rev-parse :one` &&
-       test "$patched" = `git hash-object --stdin <one` || {
-               echo "Eh?  apply with --index"
-               false
-       }
+       verbose test "$patched" = $(git rev-parse :one) &&
+       verbose test "$patched" = $(git hash-object --stdin <one)
 '
 
 test_expect_success 'apply patch (autocrlf=true)' '
@@ -232,10 +206,7 @@ test_expect_success 'apply patch (autocrlf=true)' '
        git read-tree --reset -u HEAD &&
 
        git apply patch.file &&
-       test "$patched" = "`remove_cr <one | git hash-object --stdin`" || {
-               echo "Eh?  apply without index"
-               false
-       }
+       verbose test "$patched" = "$(remove_cr <one | git hash-object --stdin)"
 '
 
 test_expect_success 'apply patch --cached (autocrlf=true)' '
@@ -245,10 +216,7 @@ test_expect_success 'apply patch --cached (autocrlf=true)' '
        git read-tree --reset -u HEAD &&
 
        git apply --cached patch.file &&
-       test "$patched" = `git rev-parse :one` || {
-               echo "Eh?  apply without index"
-               false
-       }
+       verbose test "$patched" = $(git rev-parse :one)
 '
 
 test_expect_success 'apply patch --index (autocrlf=true)' '
@@ -258,11 +226,8 @@ test_expect_success 'apply patch --index (autocrlf=true)' '
        git read-tree --reset -u HEAD &&
 
        git apply --index patch.file &&
-       test "$patched" = `git rev-parse :one` &&
-       test "$patched" = "`remove_cr <one | git hash-object --stdin`" || {
-               echo "Eh?  apply with --index"
-               false
-       }
+       verbose test "$patched" = $(git rev-parse :one) &&
+       verbose test "$patched" = "$(remove_cr <one | git hash-object --stdin)"
 '
 
 test_expect_success '.gitattributes says two is binary' '
@@ -272,29 +237,9 @@ test_expect_success '.gitattributes says two is binary' '
        git config core.autocrlf true &&
        git read-tree --reset -u HEAD &&
 
-       if has_cr dir/two
-       then
-               echo "Huh?"
-               false
-       else
-               : happy
-       fi &&
-
-       if has_cr one
-       then
-               : happy
-       else
-               echo "Huh?"
-               false
-       fi &&
-
-       if has_cr three
-       then
-               echo "Huh?"
-               false
-       else
-               : happy
-       fi
+       test_must_fail has_cr dir/two &&
+       verbose has_cr one &&
+       test_must_fail has_cr three
 '
 
 test_expect_success '.gitattributes says two is input' '
@@ -303,13 +248,7 @@ test_expect_success '.gitattributes says two is input' '
        echo "two crlf=input" >.gitattributes &&
        git read-tree --reset -u HEAD &&
 
-       if has_cr dir/two
-       then
-               echo "Huh?"
-               false
-       else
-               : happy
-       fi
+       test_must_fail has_cr dir/two
 '
 
 test_expect_success '.gitattributes says two and three are text' '
@@ -318,21 +257,8 @@ test_expect_success '.gitattributes says two and three are text' '
        echo "t* crlf" >.gitattributes &&
        git read-tree --reset -u HEAD &&
 
-       if has_cr dir/two
-       then
-               : happy
-       else
-               echo "Huh?"
-               false
-       fi &&
-
-       if has_cr three
-       then
-               : happy
-       else
-               echo "Huh?"
-               false
-       fi
+       verbose has_cr dir/two &&
+       verbose has_cr three
 '
 
 test_expect_success 'in-tree .gitattributes (1)' '
@@ -344,17 +270,8 @@ test_expect_success 'in-tree .gitattributes (1)' '
        rm -rf tmp one dir .gitattributes patch.file three &&
        git read-tree --reset -u HEAD &&
 
-       if has_cr one
-       then
-               echo "Eh? one should not have CRLF"
-               false
-       else
-               : happy
-       fi &&
-       has_cr three || {
-               echo "Eh? three should still have CRLF"
-               false
-       }
+       test_must_fail has_cr one &&
+       verbose has_cr three
 '
 
 test_expect_success 'in-tree .gitattributes (2)' '
@@ -363,17 +280,8 @@ test_expect_success 'in-tree .gitattributes (2)' '
        git read-tree --reset HEAD &&
        git checkout-index -f -q -u -a &&
 
-       if has_cr one
-       then
-               echo "Eh? one should not have CRLF"
-               false
-       else
-               : happy
-       fi &&
-       has_cr three || {
-               echo "Eh? three should still have CRLF"
-               false
-       }
+       test_must_fail has_cr one &&
+       verbose has_cr three
 '
 
 test_expect_success 'in-tree .gitattributes (3)' '
@@ -383,17 +291,8 @@ test_expect_success 'in-tree .gitattributes (3)' '
        git checkout-index -u .gitattributes &&
        git checkout-index -u one dir/two three &&
 
-       if has_cr one
-       then
-               echo "Eh? one should not have CRLF"
-               false
-       else
-               : happy
-       fi &&
-       has_cr three || {
-               echo "Eh? three should still have CRLF"
-               false
-       }
+       test_must_fail has_cr one &&
+       verbose has_cr three
 '
 
 test_expect_success 'in-tree .gitattributes (4)' '
@@ -403,17 +302,8 @@ test_expect_success 'in-tree .gitattributes (4)' '
        git checkout-index -u one dir/two three &&
        git checkout-index -u .gitattributes &&
 
-       if has_cr one
-       then
-               echo "Eh? one should not have CRLF"
-               false
-       else
-               : happy
-       fi &&
-       has_cr three || {
-               echo "Eh? three should still have CRLF"
-               false
-       }
+       test_must_fail has_cr one &&
+       verbose has_cr three
 '
 
 test_expect_success 'checkout with existing .gitattributes' '