зеркало из https://github.com/microsoft/git.git
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:
Родитель
a8dd2e7d2b
Коммит
3ed24b6aaf
|
@ -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
|
||||
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) &&
|
||||
mark=$(($nr+$nr))
|
||||
notemark=$(($mark+1))
|
||||
test_tick &&
|
||||
commit=$(echo notes | git commit-tree $tree) &&
|
||||
git update-ref refs/notes/commits $commit
|
||||
} &&
|
||||
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 &&
|
||||
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
|
||||
|
|
Загрузка…
Ссылка в новой задаче