d0736f7b81
The git-notes expensive timing test is only expensive because it either did 10,100,1k and 10k iterations or nothing. Change it to do 10 by default, with an option to run the expensive version with the old GIT_NOTES_TIMING_TESTS=ZomgYesPlease variable. Since nobody was ostensibly running this test under TAP the code had bitrotted so that it emitted invalid TAP. This change fixes that. The old version would also mysteriously fail on systems without /usr/bin/time, there's now a check for that using the multiple test prerequisite facility. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
127 lines
2.1 KiB
Bash
Executable File
127 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2007 Johannes E. Schindelin
|
|
#
|
|
|
|
test_description='Test commit notes index (expensive!)'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_set_prereq NOT_EXPENSIVE
|
|
test -n "$GIT_NOTES_TIMING_TESTS" && test_set_prereq EXPENSIVE
|
|
test -x /usr/bin/time && test_set_prereq USR_BIN_TIME
|
|
|
|
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 sh ../time_notes $mode $1
|
|
done
|
|
}
|
|
|
|
do_tests () {
|
|
pr=$1
|
|
count=$2
|
|
|
|
test_expect_success $pr 'setup / mkdir' '
|
|
mkdir $count &&
|
|
cd $count
|
|
'
|
|
|
|
test_expect_success $pr "setup $count" "create_repo $count"
|
|
|
|
test_expect_success $pr 'notes work' "test_notes $count"
|
|
|
|
test_expect_success USR_BIN_TIME,$pr 'notes timing with /usr/bin/time' "time_notes 100"
|
|
|
|
test_expect_success $pr 'teardown / cd ..' 'cd ..'
|
|
}
|
|
|
|
do_tests NOT_EXPENSIVE 10
|
|
for count in 100 1000 10000; do
|
|
do_tests EXPENSIVE $count
|
|
done
|
|
|
|
test_done
|