| #!/bin/sh | 
 | # | 
 | # This test measures the performance of adding new files to the object | 
 | # database. The test was originally added to measure the effect of the | 
 | # core.fsyncMethod=batch mode, which is why we are testing different values of | 
 | # that setting explicitly and creating a lot of unique objects. | 
 |  | 
 | test_description="Tests performance of adding things to the object database" | 
 |  | 
 | . ./perf-lib.sh | 
 |  | 
 | . $TEST_DIRECTORY/lib-unique-files.sh | 
 |  | 
 | test_perf_fresh_repo | 
 | test_checkout_worktree | 
 |  | 
 | dir_count=10 | 
 | files_per_dir=50 | 
 | total_files=$((dir_count * files_per_dir)) | 
 |  | 
 | populate_files () { | 
 | 	test_create_unique_files $dir_count $files_per_dir files | 
 | } | 
 |  | 
 | setup_repo () { | 
 | 	(rm -rf .git || 1) && | 
 | 	git init && | 
 | 	test_commit first && | 
 | 	populate_files | 
 | } | 
 |  | 
 | test_perf_fsync_cfgs () { | 
 | 	local method && | 
 | 	local cfg && | 
 | 	for method in none fsync batch writeout-only | 
 | 	do | 
 | 		case $method in | 
 | 		none) | 
 | 			cfg="-c core.fsync=none" | 
 | 			;; | 
 | 		*) | 
 | 			cfg="-c core.fsync=loose-object -c core.fsyncMethod=$method" | 
 | 		esac && | 
 |  | 
 | 		# Set GIT_TEST_FSYNC=1 explicitly since fsync is normally | 
 | 		# disabled by t/test-lib.sh. | 
 | 		if ! test_perf "$1 (fsyncMethod=$method)" \ | 
 | 						--setup "$2" \ | 
 | 						"GIT_TEST_FSYNC=1 git $cfg $3" | 
 | 		then | 
 | 			break | 
 | 		fi | 
 | 	done | 
 | } | 
 |  | 
 | test_perf_fsync_cfgs "add $total_files files" \ | 
 | 	"setup_repo" \ | 
 | 	"add -- files" | 
 |  | 
 | test_perf_fsync_cfgs "stash $total_files files" \ | 
 | 	"setup_repo" \ | 
 | 	"stash push -u -- files" | 
 |  | 
 | test_perf_fsync_cfgs "unpack $total_files files" \ | 
 | 	" | 
 | 	setup_repo && | 
 | 	git -c core.fsync=none add -- files && | 
 | 	git -c core.fsync=none commit -q -m second && | 
 | 	echo HEAD | git pack-objects -q --stdout --revs >test_pack.pack && | 
 | 	setup_repo | 
 | 	" \ | 
 | 	"unpack-objects -q <test_pack.pack" | 
 |  | 
 | test_perf_fsync_cfgs "commit $total_files files" \ | 
 | 	" | 
 | 	setup_repo && | 
 | 	git -c core.fsync=none add -- files && | 
 | 	populate_files | 
 | 	" \ | 
 | 	"commit -q -a -m test" | 
 |  | 
 | test_done |