1#!/bin/sh 2 3test_description='fetch performance with many packs 4 5It is common for fetch to consider objects that we might not have, and it is an 6easy mistake for the code to use a function like `parse_object` that might 7give the correct _answer_ on such an object, but do so slowly (due to 8re-scanning the pack directory for lookup failures). 9 10The resulting performance drop can be hard to notice in a real repository, but 11becomes quite large in a repository with a large number of packs. So this 12test creates a more pathological case, since any mistakes would produce a more 13noticeable slowdown. 14' 15. ./perf-lib.sh 16. "$TEST_DIRECTORY"/perf/lib-pack.sh 17 18test_expect_success 'create parent and child'' 19 git init parent && 20 git clone parent child 21' 22 23 24test_expect_success 'create refs in the parent'' 25 ( 26 cd parent && 27 git commit --allow-empty -m foo && 28 head=$(git rev-parse HEAD)&& 29 test_seq 1000 | 30 sed "s,.*,update refs/heads/&$head," | 31$MODERN_GITupdate-ref --stdin 32 ) 33' 34 35test_expect_success 'create many packs in the child'' 36 ( 37 cd child && 38 setup_many_packs 39 ) 40' 41 42test_perf 'fetch'' 43 # start at the same state for each iteration 44 obj=$($MODERN_GIT -C parent rev-parse HEAD)&& 45 ( 46 cd child && 47$MODERN_GITfor-each-ref --format="delete %(refname)" refs/remotes | 48$MODERN_GITupdate-ref --stdin && 49 rm -vf .git/objects/$(echo $obj | sed "s|^..|&/|")&& 50 51 git fetch 52 ) 53' 54 55test_done