| #!/bin/sh |
| |
| test_description='Test that adding/removing many notes triggers automatic fanout restructuring' |
| |
| . ./test-lib.sh |
| |
| 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 | grep "^ " > output && |
| i=300 && |
| while test $i -gt 0 |
| do |
| echo " commit #$i" && |
| echo " note #$i" && |
| i=$(($i - 1)); |
| done > expect && |
| test_cmp expect output |
| ' |
| |
| test_expect_success 'many notes created with git-notes triggers fanout' ' |
| # Expect entire notes tree to have a fanout == 1 |
| git ls-tree -r --name-only refs/notes/commits | |
| while read path |
| do |
| case "$path" in |
| ??/??????????????????????????????????????) |
| : true |
| ;; |
| *) |
| echo "Invalid path \"$path\"" && |
| return 1 |
| ;; |
| esac |
| done |
| ' |
| |
| test_expect_success 'deleting most notes with git-notes' ' |
| num_notes=250 && |
| i=0 && |
| git rev-list HEAD | |
| while read sha1 |
| do |
| i=$(($i + 1)) && |
| if test $i -gt $num_notes |
| then |
| break |
| fi && |
| test_tick && |
| git notes remove "$sha1" |
| done |
| ' |
| |
| test_expect_success 'most notes deleted correctly with git-notes' ' |
| git log HEAD~250 | grep "^ " > output && |
| i=50 && |
| while test $i -gt 0 |
| do |
| echo " commit #$i" && |
| echo " note #$i" && |
| i=$(($i - 1)); |
| done > expect && |
| test_cmp expect output |
| ' |
| |
| test_expect_success 'deleting most notes triggers fanout consolidation' ' |
| # Expect entire notes tree to have a fanout == 0 |
| git ls-tree -r --name-only refs/notes/commits | |
| while read path |
| do |
| case "$path" in |
| ????????????????????????????????????????) |
| : true |
| ;; |
| *) |
| echo "Invalid path \"$path\"" && |
| return 1 |
| ;; |
| esac |
| done |
| ' |
| |
| test_done |