t / t3302-notes-index-expensive.shon commit t3404: rebase -i: demonstrate short SHA-1 collision (66ae9a5)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 Johannes E. Schindelin
   4#
   5
   6test_description='Test commit notes index (expensive!)'
   7
   8. ./test-lib.sh
   9
  10test_set_prereq NOT_EXPENSIVE
  11test -n "$GIT_NOTES_TIMING_TESTS" && test_set_prereq EXPENSIVE
  12test -x /usr/bin/time && test_set_prereq USR_BIN_TIME
  13
  14create_repo () {
  15        number_of_commits=$1
  16        nr=0
  17        test -d .git || {
  18        git init &&
  19        (
  20                while [ $nr -lt $number_of_commits ]; do
  21                        nr=$(($nr+1))
  22                        mark=$(($nr+$nr))
  23                        notemark=$(($mark+1))
  24                        test_tick &&
  25                        cat <<INPUT_END &&
  26commit refs/heads/master
  27mark :$mark
  28committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
  29data <<COMMIT
  30commit #$nr
  31COMMIT
  32
  33M 644 inline file
  34data <<EOF
  35file in commit #$nr
  36EOF
  37
  38blob
  39mark :$notemark
  40data <<EOF
  41note for commit #$nr
  42EOF
  43
  44INPUT_END
  45
  46                        echo "N :$notemark :$mark" >> note_commit
  47                done &&
  48                test_tick &&
  49                cat <<INPUT_END &&
  50commit refs/notes/commits
  51committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
  52data <<COMMIT
  53notes
  54COMMIT
  55
  56INPUT_END
  57
  58                cat note_commit
  59        ) |
  60        git fast-import --quiet &&
  61        git config core.notesRef refs/notes/commits
  62        }
  63}
  64
  65test_notes () {
  66        count=$1 &&
  67        git config core.notesRef refs/notes/commits &&
  68        git log | grep "^    " > output &&
  69        i=$count &&
  70        while [ $i -gt 0 ]; do
  71                echo "    commit #$i" &&
  72                echo "    note for commit #$i" &&
  73                i=$(($i-1));
  74        done > expect &&
  75        test_cmp expect output
  76}
  77
  78cat > time_notes << \EOF
  79        mode=$1
  80        i=1
  81        while [ $i -lt $2 ]; do
  82                case $1 in
  83                no-notes)
  84                        GIT_NOTES_REF=non-existing; export GIT_NOTES_REF
  85                ;;
  86                notes)
  87                        unset GIT_NOTES_REF
  88                ;;
  89                esac
  90                git log >/dev/null
  91                i=$(($i+1))
  92        done
  93EOF
  94
  95time_notes () {
  96        for mode in no-notes notes
  97        do
  98                echo $mode
  99                /usr/bin/time "$SHELL_PATH" ../time_notes $mode $1
 100        done
 101}
 102
 103do_tests () {
 104        pr=$1
 105        count=$2
 106
 107        test_expect_success $pr 'setup / mkdir' '
 108                mkdir $count &&
 109                cd $count
 110        '
 111
 112        test_expect_success $pr "setup $count" "create_repo $count"
 113
 114        test_expect_success $pr 'notes work' "test_notes $count"
 115
 116        test_expect_success USR_BIN_TIME,$pr 'notes timing with /usr/bin/time' "time_notes 100"
 117
 118        test_expect_success $pr 'teardown / cd ..' 'cd ..'
 119}
 120
 121do_tests NOT_EXPENSIVE 10
 122for count in 100 1000 10000; do
 123        do_tests EXPENSIVE $count
 124done
 125
 126test_done