t4205 (log-pretty-formats): don't hardcode SHA-1 in expected outputs
[gitweb.git] / t / t3302-notes-index-expensive.sh
index 00d27bf6ef0b1003d0dfedb9eea522467284ce00..e35d7811acc60415e38e58866b5488938d0372a4 100755 (executable)
@@ -7,39 +7,57 @@ test_description='Test commit notes index (expensive!)'
 
 . ./test-lib.sh
 
-test -z "$GIT_NOTES_TIMING_TESTS" && {
-       say Skipping timing tests
-       test_done
-       exit
-}
+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
-       parent=
        test -d .git || {
        git init &&
-       tree=$(git write-tree) &&
-       while [ $nr -lt $number_of_commits ]; do
-               test_tick &&
-               commit=$(echo $nr | git commit-tree $tree $parent) ||
-                       return
-               parent="-p $commit"
-               nr=$(($nr+1))
-       done &&
-       git update-ref refs/heads/master $commit &&
-       {
-               export GIT_INDEX_FILE=.git/temp;
-               git rev-list HEAD | cat -n | sed "s/^[  ][      ]*/ /g" |
-               while read nr sha1; do
-                       blob=$(echo note $nr | git hash-object -w --stdin) &&
-                       echo $sha1 | sed "s/^/0644 $blob 0      /"
-               done | git update-index --index-info &&
-               tree=$(git write-tree) &&
+       (
+               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 &&
-               commit=$(echo notes | git commit-tree $tree) &&
-               git update-ref refs/notes/commits $commit
-       } &&
+               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
        }
 }
@@ -48,13 +66,13 @@ test_notes () {
        count=$1 &&
        git config core.notesRef refs/notes/commits &&
        git log | grep "^    " > output &&
-       i=1 &&
-       while [ $i -le $count ]; do
-               echo "    $(($count-$i))" &&
-               echo "    note $i" &&
-               i=$(($i+1));
+       i=$count &&
+       while [ $i -gt 0 ]; do
+               echo "    commit #$i" &&
+               echo "    note for commit #$i" &&
+               i=$(($i-1));
        done > expect &&
-       git diff expect output
+       test_cmp expect output
 }
 
 cat > time_notes << \EOF
@@ -63,7 +81,7 @@ cat > time_notes << \EOF
        while [ $i -lt $2 ]; do
                case $1 in
                no-notes)
-                       export GIT_NOTES_REF=non-existing
+                       GIT_NOTES_REF=non-existing; export GIT_NOTES_REF
                ;;
                notes)
                        unset GIT_NOTES_REF
@@ -78,21 +96,31 @@ time_notes () {
        for mode in no-notes notes
        do
                echo $mode
-               /usr/bin/time sh ../time_notes $mode $1
+               /usr/bin/time "$SHELL_PATH" ../time_notes $mode $1
        done
 }
 
-for count in 10 100 1000 10000; do
+do_tests () {
+       pr=$1
+       count=$2
 
-       mkdir $count
-       (cd $count;
+       test_expect_success $pr 'setup / mkdir' '
+               mkdir $count &&
+               cd $count
+       '
 
-       test_expect_success "setup $count" "create_repo $count"
+       test_expect_success $pr "setup $count" "create_repo $count"
 
-       test_expect_success 'notes work' "test_notes $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 ..'
+}
 
-       test_expect_success 'notes timing' "time_notes 100"
-       )
+do_tests NOT_EXPENSIVE 10
+for count in 100 1000 10000; do
+       do_tests EXPENSIVE $count
 done
 
 test_done