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