#!/bin/sh

test_description='Test that adding/removing many notes triggers automatic fanout restructuring'

TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh

path_has_fanout() {
	path=$1 &&
	fanout=$2 &&
	after_last_slash=$(($(test_oid hexsz) - $fanout * 2)) &&
	echo $path | grep -q -E "^([0-9a-f]{2}/){$fanout}[0-9a-f]{$after_last_slash}$"
}

touched_one_note_with_fanout() {
	notes_commit=$1 &&
	modification=$2 &&  # 'A' for addition, 'D' for deletion
	fanout=$3 &&
	diff=$(git diff-tree --no-commit-id --name-status --root -r $notes_commit) &&
	path=$(echo $diff | sed -e "s/^$modification[\t ]//") &&
	path_has_fanout "$path" $fanout;
}

all_notes_have_fanout() {
	notes_commit=$1 &&
	fanout=$2 &&
	git ls-tree -r --name-only $notes_commit |
	while read path
	do
		path_has_fanout $path $fanout || return 1
	done
}

test_expect_success 'tweak test environment' '
	git checkout -b nondeterminism &&
	test_commit A &&
	git checkout --orphan with_notes;
'

test_expect_success 'creating many notes with git-notes' '
	num_notes=300 &&
	i=0 &&
	while test $i -lt $num_notes
	do
		i=$(($i + 1)) &&
		test_tick &&
		echo "file for commit #$i" > file &&
		git add file &&
		git commit -q -m "commit #$i" &&
		git notes add -m "note #$i" || return 1
	done
'

test_expect_success 'many notes created correctly with git-notes' '
	git log >output.raw &&
	grep "^    " output.raw >output &&
	i=$num_notes &&
	while test $i -gt 0
	do
		echo "    commit #$i" &&
		echo "    note #$i" &&
		i=$(($i - 1)) || return 1
	done > expect &&
	test_cmp expect output
'

test_expect_success 'stable fanout 0 is followed by stable fanout 1' '
	i=$num_notes &&
	fanout=0 &&
	while test $i -gt 0
	do
		i=$(($i - 1)) &&
		if touched_one_note_with_fanout refs/notes/commits~$i A $fanout
		then
			continue
		elif test $fanout -eq 0
		then
			fanout=1 &&
			if all_notes_have_fanout refs/notes/commits~$i $fanout
			then
				echo "Fanout 0 -> 1 at refs/notes/commits~$i" &&
				continue
			fi
		fi &&
		echo "Failed fanout=$fanout check at refs/notes/commits~$i" &&
		git ls-tree -r --name-only refs/notes/commits~$i &&
		return 1
	done &&
	all_notes_have_fanout refs/notes/commits 1
'

test_expect_success 'deleting most notes with git-notes' '
	remove_notes=285 &&
	i=0 &&
	git rev-list HEAD >revs &&
	while test $i -lt $remove_notes && read sha1
	do
		i=$(($i + 1)) &&
		test_tick &&
		git notes remove "$sha1" || return 1
	done <revs
'

test_expect_success 'most notes deleted correctly with git-notes' '
	git log HEAD~$remove_notes | grep "^    " > output &&
	i=$(($num_notes - $remove_notes)) &&
	while test $i -gt 0
	do
		echo "    commit #$i" &&
		echo "    note #$i" &&
		i=$(($i - 1)) || return 1
	done > expect &&
	test_cmp expect output
'

test_expect_success 'stable fanout 1 is followed by stable fanout 0' '
	i=$remove_notes &&
	fanout=1 &&
	while test $i -gt 0
	do
		i=$(($i - 1)) &&
		if touched_one_note_with_fanout refs/notes/commits~$i D $fanout
		then
			continue
		elif test $fanout -eq 1
		then
			fanout=0 &&
			if all_notes_have_fanout refs/notes/commits~$i $fanout
			then
				echo "Fanout 1 -> 0 at refs/notes/commits~$i" &&
				continue
			fi
		fi &&
		echo "Failed fanout=$fanout check at refs/notes/commits~$i" &&
		git ls-tree -r --name-only refs/notes/commits~$i &&
		return 1
	done &&
	all_notes_have_fanout refs/notes/commits 0
'

test_done
