#!/bin/sh # # Copyright (c) 2007 Johannes E. Schindelin # setglobal test_description = ''Test commit notes index (expensive!)'' source ./test-lib.sh proc create_repo { setglobal number_of_commits = $1 setglobal nr = '0' test -d .git || do { git init && shell { while test $nr -lt $number_of_commits { setglobal nr = $shExpr('$nr+1') setglobal mark = $shExpr('$nr+$nr') setglobal notemark = $shExpr('$mark+1') test_tick && cat <<-INPUT_END && commit refs/heads/master mark :$mark committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE data <>note_commit } && test_tick && cat <<-INPUT_END && commit refs/notes/commits committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE data <output && setglobal i = $count && while test $i -gt 0 { echo " commit #$i" && echo " note for commit #$i" && setglobal i = $shExpr('$i-1') } >expect && test_cmp expect output } write_script time_notes <<\EOF mode=$1 i=1 while test $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 i=$(($i+1)) done >/dev/null EOF proc time_notes { for mode in [no-notes notes] { echo $mode /usr/bin/time ../time_notes $mode $1 } } proc do_tests { setglobal count = $1, pr = $(2-) test_expect_success $pr "setup $count" ' mkdir "$count" && ( cd "$count" && create_repo "$count" ) ' test_expect_success $pr 'notes work' ' ( cd "$count" && test_notes "$count" ) ' test_expect_success "USR_BIN_TIME$(pr:+,$pr)" 'notes timing with /usr/bin/time' ' ( cd "$count" && time_notes 100 ) ' } do_tests 10 for count in [100 1000 10000] { do_tests $count EXPENSIVE } test_done