-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-notes have the potential of being pretty expensive, so test with a lot of commits. A lot. So to make things cheaper, you have to opt-in explicitely, by setting the environment variable GIT_NOTES_TIMING_TESTS. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Johannes Schindelin
authored and
Junio C Hamano
committed
Jan 12, 2009
1 parent
2dd625d
commit 009318b
Showing
1 changed file
with
98 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2007 Johannes E. Schindelin | ||
# | ||
|
||
test_description='Test commit notes index (expensive!)' | ||
|
||
. ./test-lib.sh | ||
|
||
test -z "$GIT_NOTES_TIMING_TESTS" && { | ||
say Skipping timing tests | ||
test_done | ||
exit | ||
} | ||
|
||
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) && | ||
test_tick && | ||
commit=$(echo notes | git commit-tree $tree) && | ||
git update-ref refs/notes/commits $commit | ||
} && | ||
git config core.notesRef refs/notes/commits | ||
} | ||
} | ||
|
||
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)); | ||
done > expect && | ||
git diff expect output | ||
} | ||
|
||
cat > time_notes << \EOF | ||
mode=$1 | ||
i=1 | ||
while [ $i -lt $2 ]; do | ||
case $1 in | ||
no-notes) | ||
export GIT_NOTES_REF=non-existing | ||
;; | ||
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 | ||
} | ||
|
||
for count in 10 100 1000 10000; do | ||
|
||
mkdir $count | ||
(cd $count; | ||
|
||
test_expect_success "setup $count" "create_repo $count" | ||
|
||
test_expect_success 'notes work' "test_notes $count" | ||
|
||
test_expect_success 'notes timing' "time_notes 100" | ||
) | ||
done | ||
|
||
test_done |