t3302-notes-index-expensive: Speed up create_repo()

Creating repos with 10/100/1000/10000 commits and notes takes a lot of time.
However, using git-fast-import to do the job is a lot more efficient than
using plumbing commands to do the same.

This patch decreases the overall run-time of this test on my machine from
~3 to ~1 minutes.

Signed-off-by: Johan Herland <johan@herland.net>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johan Herland 2009-10-09 12:22:03 +02:00 committed by Junio C Hamano
parent a8dd2e7d2b
commit 3ed24b6aaf

View file

@ -16,30 +16,50 @@ test -z "$GIT_NOTES_TIMING_TESTS" && {
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
(
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 $nr | git commit-tree $tree $parent) ||
return
parent="-p $commit"
nr=$(($nr+1))
done &&
git update-ref refs/heads/master $commit &&
{
GIT_INDEX_FILE=.git/temp; export GIT_INDEX_FILE;
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
} &&
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 +68,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