Hi, git@xxxxxxxxxxxxxxxxx wrote: > +++ b/t/perf/p0005-status.sh > @@ -0,0 +1,70 @@ > +#!/bin/sh > + > +test_description="Tests performance of read-tree" > + > +. ./perf-lib.sh > + > +test_perf_default_repo > +test_checkout_worktree > + > +## usage: dir depth width files > +make_paths () { > + for f in $(seq $4) > + do > + echo $1/file$f > + done; > + if test $2 -gt 0; > + then > + for w in $(seq $3) > + do > + make_paths $1/dir$w $(($2 - 1)) $3 $4 > + done > + fi > + return 0 > +} > + > +fill_index () { > + make_paths $1 $2 $3 $4 | > + sed "s/^/100644 $EMPTY_BLOB /" | > + git update-index --index-info > + return 0 > +} Makes sense. > + > +br_work1=xxx_work1_xxx > + > +new_dir=xxx_dir_xxx > + > +## (5, 10, 9) will create 999,999 files. > +## (4, 10, 9) will create 99,999 files. > +depth=5 > +width=10 > +files=9 > + > +export br_work1 > + > +export new_dir > + > +export depth > +export width > +export files Why are these exported? test_expect_success code (unlike test_per code) runs in the same shell as outside, so it doesn't seem necessary. > + > +## Inflate the index with thousands of empty files and commit it. > +test_expect_success 'inflate the index' ' > + git reset --hard && What does this line do? > + git branch $br_work1 && > + git checkout $br_work1 && Is it useful for these parameters to exist in the test script? I'd find this easier to read if it named the branch explicitly. For example: test_expect_success 'set up large index' ' git checkout -B million && # (4, 10, 9) would create 99,999 files. # (5, 10, 9) creates 999,999 files. fill_index dir 5 10 9 && git commit -m "large commit" ' > + fill_index $new_dir $depth $width $files && > + git commit -m $br_work1 && > + git reset --hard What does this line do? > +' > + > +## The number of files in the xxx_work1_xxx branch. > +nr_work1=$(git ls-files | wc -l) > +export nr_work1 > + > +test_perf "read-tree status work1 ($nr_work1)" ' > + git read-tree HEAD && > + git status > +' Looks reasonable. Thanks and hope that helps, Jonathan