#!/bin/sh
#
# Copyright (c) 2007 Johannes E. Schindelin
#

test_description='Test commit notes index (expensive!)'

. ./test-lib.sh

test -z "$GIT_NOTES_TIMING_TESTS" && {
	skip_all="Skipping timing tests"
	test_done
	exit
}

create_repo () {
	number_of_commits=$1
	nr=0
	test -d .git || {
	git init &&
	(
		while [ $nr -lt $number_of_commits ]; do
			nr=$(($nr+1))
			mark=$(($nr+$nr))
			notemark=$(($mark+1))
			test_tick &&
			cat <<INPUT_END &&
commit refs/heads/master
mark :$mark
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
data <<COMMIT
commit #$nr
COMMIT

M 644 inline file
data <<EOF
file in commit #$nr
EOF

blob
mark :$notemark
data <<EOF
note for commit #$nr
EOF

INPUT_END

			echo "N :$notemark :$mark" >> note_commit
		done &&
		test_tick &&
		cat <<INPUT_END &&
commit refs/notes/commits
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
data <<COMMIT
notes
COMMIT

INPUT_END

		cat note_commit
	) |
	git fast-import --quiet &&
	git config core.notesRef refs/notes/commits
	}
}

test_notes () {
	count=$1 &&
	git config core.notesRef refs/notes/commits &&
	git log | grep "^    " > output &&
	i=$count &&
	while [ $i -gt 0 ]; do
		echo "    commit #$i" &&
		echo "    note for commit #$i" &&
		i=$(($i-1));
	done > expect &&
	test_cmp expect output
}

cat > time_notes << \EOF
	mode=$1
	i=1
	while [ $i -lt $2 ]; do
		case $1 in
		no-notes)
			GIT_NOTES_REF=non-existing; export GIT_NOTES_REF
		;;
		notes)
			unset GIT_NOTES_REF
		;;
		esac
		git log >/dev/null
		i=$(($i+1))
	done
EOF

time_notes () {
	for mode in no-notes notes
	do
		echo $mode
		/usr/bin/time "$SHELL_PATH" ../time_notes $mode $1
	done
}

for count in 10 100 1000 10000; do

	mkdir $count
	(cd $count;

	test_expect_success "setup $count" "create_repo $count"

	test_expect_success 'notes work' "test_notes $count"

	test_expect_success 'notes timing' "time_notes 100"
	)
done

test_done
