1#!/bin/sh 2 3test_description='CRLF conversion' 4 5TEST_PASSES_SANITIZE_LEAK=true 6. ./test-lib.sh 7 8has_cr() { 9 tr '\015' Q <"$1" | grep Q >/dev/null 10} 11 12test_expect_success setup ' 13 14 git config core.autocrlf false && 15 16 echo "one text" > .gitattributes && 17 18 for w in Hello world how are you; do echo $w; done >one && 19 for w in I am very very fine thank you; do echo $w; done >two && 20 git add . && 21 22 git commit -m initial && 23 24 one=$(git rev-parse HEAD:one) && 25 two=$(git rev-parse HEAD:two) && 26 27 echo happy. 28' 29 30test_expect_success 'eol=lf puts LFs in normalized file' ' 31 32 rm -f .gitattributes tmp one two && 33 git config core.eol lf && 34 git read-tree --reset -u HEAD && 35 36 ! has_cr one && 37 ! has_cr two && 38 onediff=$(git diff one) && 39 twodiff=$(git diff two) && 40 test -z "$onediff" && test -z "$twodiff" 41' 42 43test_expect_success 'eol=crlf puts CRLFs in normalized file' ' 44 45 rm -f .gitattributes tmp one two && 46 git config core.eol crlf && 47 git read-tree --reset -u HEAD && 48 49 has_cr one && 50 ! has_cr two && 51 onediff=$(git diff one) && 52 twodiff=$(git diff two) && 53 test -z "$onediff" && test -z "$twodiff" 54' 55 56test_expect_success 'autocrlf=true overrides eol=lf' ' 57 58 rm -f .gitattributes tmp one two && 59 git config core.eol lf && 60 git config core.autocrlf true && 61 git read-tree --reset -u HEAD && 62 63 has_cr one && 64 has_cr two && 65 onediff=$(git diff one) && 66 twodiff=$(git diff two) && 67 test -z "$onediff" && test -z "$twodiff" 68' 69 70test_expect_success 'autocrlf=true overrides unset eol' ' 71 72 rm -f .gitattributes tmp one two && 73 git config --unset-all core.eol && 74 git config core.autocrlf true && 75 git read-tree --reset -u HEAD && 76 77 has_cr one && 78 has_cr two && 79 onediff=$(git diff one) && 80 twodiff=$(git diff two) && 81 test -z "$onediff" && test -z "$twodiff" 82' 83 84test_expect_success NATIVE_CRLF 'eol native is crlf' ' 85 86 rm -rf native_eol && mkdir native_eol && 87 ( 88 cd native_eol && 89 printf "*.txt text\n" >.gitattributes && 90 printf "one\r\ntwo\r\nthree\r\n" >filedos.txt && 91 printf "one\ntwo\nthree\n" >fileunix.txt && 92 git init && 93 git config core.autocrlf false && 94 git config core.eol native && 95 git add filedos.txt fileunix.txt && 96 git commit -m "first" && 97 rm file*.txt && 98 git reset --hard HEAD && 99 has_cr filedos.txt && 100 has_cr fileunix.txt 101 ) 102' 103 104test_done 105