#!/bin/sh

test_description='test conversion filters on large files'

. ./test-lib.sh

set_attr() {
	test_when_finished 'rm -f .gitattributes' &&
	echo "* $*" >.gitattributes
}

check_input() {
	git read-tree --empty &&
	git add small large &&
	git cat-file blob :small >small.index &&
	git cat-file blob :large | head -n 1 >large.index &&
	test_cmp small.index large.index
}

check_output() {
	rm -f small large &&
	git checkout small large &&
	head -n 1 large >large.head &&
	test_cmp small large.head
}

test_expect_success 'setup input tests' '
	printf "\$Id: foo\$\\r\\n" >small &&
	cat small small >large &&
	git config core.bigfilethreshold 20 &&
	git config filter.test.clean "sed s/.*/CLEAN/"
'

test_expect_success 'autocrlf=true converts on input' '
	test_config core.autocrlf true &&
	check_input
'

test_expect_success 'eol=crlf converts on input' '
	set_attr eol=crlf &&
	check_input
'

test_expect_success 'ident converts on input' '
	set_attr ident &&
	check_input
'

test_expect_success 'user-defined filters convert on input' '
	set_attr filter=test &&
	check_input
'

test_expect_success 'setup output tests' '
	echo "\$Id\$" >small &&
	cat small small >large &&
	git add small large &&
	git config core.bigfilethreshold 7 &&
	git config filter.test.smudge "sed s/.*/SMUDGE/"
'

test_expect_success 'autocrlf=true converts on output' '
	test_config core.autocrlf true &&
	check_output
'

test_expect_success 'eol=crlf converts on output' '
	set_attr eol=crlf &&
	check_output
'

test_expect_success 'user-defined filters convert on output' '
	set_attr filter=test &&
	check_output
'

test_expect_success 'ident converts on output' '
	set_attr ident &&
	rm -f small large &&
	git checkout small large &&
	sed -n "s/Id: .*/Id: SHA/p" <small >small.clean &&
	head -n 1 large >large.head &&
	sed -n "s/Id: .*/Id: SHA/p" <large.head >large.clean &&
	test_cmp small.clean large.clean
'

# This smudge filter prepends 5GB of zeros to the file it checks out. This
# ensures that smudging doesn't mangle large files on 64-bit Windows.
test_expect_success EXPENSIVE,SIZE_T_IS_64BIT,!LONG_IS_64BIT \
		'files over 4GB convert on output' '
	test_commit test small "a small file" &&
	small_size=$(test_file_size small) &&
	test_config filter.makelarge.smudge \
		"test-tool genzeros $((5*1024*1024*1024)) && cat" &&
	echo "small filter=makelarge" >.gitattributes &&
	rm small &&
	git checkout -- small &&
	size=$(test_file_size small) &&
	test "$size" -eq $((5 * 1024 * 1024 * 1024 + $small_size))
'

# This clean filter writes down the size of input it receives. By checking against
# the actual size, we ensure that cleaning doesn't mangle large files on 64-bit Windows.
test_expect_success EXPENSIVE,SIZE_T_IS_64BIT,!LONG_IS_64BIT \
		'files over 4GB convert on input' '
	test-tool genzeros $((5*1024*1024*1024)) >big &&
	test_config filter.checklarge.clean "wc -c >big.size" &&
	echo "big filter=checklarge" >.gitattributes &&
	git add big &&
	test $(test_file_size big) -eq $(cat big.size)
'

test_done
