Merge branch 'ab/fsck-skiplist'

Update fsck.skipList implementation and documentation.

* ab/fsck-skiplist:
  fsck: support comments & empty lines in skipList
  fsck: use oidset instead of oid_array for skipList
  fsck: use strbuf_getline() to read skiplist file
  fsck: add a performance test for skipList
  fsck: add a performance test
  fsck: document that skipList input must be unabbreviated
  fsck: document and test commented & empty line skipList input
  fsck: document and test sorted skipList input
  fsck tests: add a test for no skipList input
  fsck tests: setup of bogus commit object
This commit is contained in:
Junio C Hamano
2018-10-10 12:37:16 +09:00
6 changed files with 171 additions and 45 deletions

13
t/perf/p1450-fsck.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/sh
test_description='Test fsck performance'
. ./perf-lib.sh
test_perf_large_repo
test_perf 'fsck' '
git fsck
'
test_done

40
t/perf/p1451-fsck-skip-list.sh Executable file
View File

@ -0,0 +1,40 @@
#!/bin/sh
test_description='Test fsck skipList performance'
. ./perf-lib.sh
test_perf_fresh_repo
n=1000000
test_expect_success "setup $n bad commits" '
for i in $(test_seq 1 $n)
do
echo "commit refs/heads/master" &&
echo "committer C <c@example.com> 1234567890 +0000" &&
echo "data <<EOF" &&
echo "$i.Q." &&
echo "EOF"
done | q_to_nul | git fast-import
'
skip=0
while test $skip -le $n
do
test_expect_success "create skipList for $skip bad commits" '
git log --format=%H --max-count=$skip |
sort >skiplist
'
test_perf "fsck with $skip skipped bad commits" '
git -c fsck.skipList=skiplist fsck
'
case $skip in
0) skip=1 ;;
*) skip=${skip}0 ;;
esac
done
test_done