You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
1.8 KiB
95 lines
1.8 KiB
#!/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
|
|
|