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