|  | #!/bin/sh | 
|  | # | 
|  | # This test measures the performance of various read-tree | 
|  | # and checkout operations.  It is primarily interested in | 
|  | # the algorithmic costs of index operations and recursive | 
|  | # tree traversal -- and NOT disk I/O on thousands of files. | 
|  |  | 
|  | test_description="Tests performance of read-tree" | 
|  |  | 
|  | . ./perf-lib.sh | 
|  |  | 
|  | test_perf_default_repo | 
|  |  | 
|  | # If the test repo was generated by ./repos/many-files.sh | 
|  | # then we know something about the data shape and branches, | 
|  | # so we can isolate testing to the ballast-related commits | 
|  | # and setup sparse-checkout so we don't have to populate | 
|  | # the ballast files and directories. | 
|  | # | 
|  | # Otherwise, we make some general assumptions about the | 
|  | # repo and consider the entire history of the current | 
|  | # branch to be the ballast. | 
|  |  | 
|  | test_expect_success "setup repo" ' | 
|  | if git rev-parse --verify refs/heads/p0006-ballast^{commit} | 
|  | then | 
|  | echo Assuming synthetic repo from many-files.sh && | 
|  | git branch br_base            master && | 
|  | git branch br_ballast         p0006-ballast^ && | 
|  | git branch br_ballast_alias   p0006-ballast^ && | 
|  | git branch br_ballast_plus_1  p0006-ballast && | 
|  | git config --local core.sparsecheckout 1 && | 
|  | cat >.git/info/sparse-checkout <<-EOF | 
|  | /* | 
|  | !ballast/* | 
|  | EOF | 
|  | else | 
|  | echo Assuming non-synthetic repo... && | 
|  | git branch br_base            $(git rev-list HEAD | tail -n 1) && | 
|  | git branch br_ballast         HEAD^ || error "no ancestor commit from current head" && | 
|  | git branch br_ballast_alias   HEAD^ && | 
|  | git branch br_ballast_plus_1  HEAD | 
|  | fi && | 
|  | git checkout -q br_ballast && | 
|  | nr_files=$(git ls-files | wc -l) | 
|  | ' | 
|  |  | 
|  | test_perf "read-tree br_base br_ballast ($nr_files)" ' | 
|  | git read-tree -n -m br_base br_ballast | 
|  | ' | 
|  |  | 
|  | test_perf "read-tree br_ballast_plus_1 ($nr_files)" ' | 
|  | # Run read-tree 100 times for clearer performance results & comparisons | 
|  | for i in  $(test_seq 100) | 
|  | do | 
|  | git read-tree -n -m br_ballast_plus_1 || return 1 | 
|  | done | 
|  | ' | 
|  |  | 
|  | test_perf "switch between br_base br_ballast ($nr_files)" ' | 
|  | git checkout -q br_base && | 
|  | git checkout -q br_ballast | 
|  | ' | 
|  |  | 
|  | test_perf "switch between br_ballast br_ballast_plus_1 ($nr_files)" ' | 
|  | git checkout -q br_ballast_plus_1 && | 
|  | git checkout -q br_ballast | 
|  | ' | 
|  |  | 
|  | test_perf "switch between aliases ($nr_files)" ' | 
|  | git checkout -q br_ballast_alias && | 
|  | git checkout -q br_ballast | 
|  | ' | 
|  |  | 
|  | test_done |