#!/bin/sh test_description='Tests pack-objects performance with filters and --path-walk' . ./perf-lib.sh test_perf_large_repo test_expect_success 'setup filter inputs' ' # Sample a few depth-2 directories from the test repo to build # a cone-mode sparse-checkout definition. The sampling picks # directories at evenly-spaced positions so the choice is stable # and scales to repos of any shape. git ls-tree -d HEAD >top-entries && grep "^040000" top-entries | awk "{print \$4;}" >top-dirs && top_nr=$(wc -l depth2-dirs && d2_nr=$(wc -l sparse-patterns && git hash-object -w sparse-patterns >sparse-oid && echo "Sparse cone: $first $mid" && cat sparse-patterns && test_set_prereq SPARSE_OID elif test "$top_nr" -ge 1 then # Fallback: use a single top-level directory. first=$(sed -n "1p" top-dirs) && { echo "/*" && echo "!/*/" && echo "/$first/" } >sparse-patterns && git hash-object -w sparse-patterns >sparse-oid && echo "Sparse cone: $first" && cat sparse-patterns && test_set_prereq SPARSE_OID fi ' test_perf 'repack (no filter)' ' git pack-objects --stdout --no-reuse-delta --revs --all pk ' test_size 'repack size (no filter)' ' test_file_size pk ' test_perf 'repack (no filter, --path-walk)' ' git pack-objects --stdout --no-reuse-delta --revs --all --path-walk pk ' test_size 'repack size (no filter, --path-walk)' ' test_file_size pk ' test_perf 'repack (blob:none)' ' git pack-objects --stdout --no-reuse-delta --revs --all --filter=blob:none pk ' test_size 'repack size (blob:none)' ' test_file_size pk ' test_perf 'repack (blob:none, --path-walk)' ' git pack-objects --stdout --no-reuse-delta --revs --all --path-walk \ --filter=blob:none pk ' test_size 'repack size (blob:none, --path-walk)' ' test_file_size pk ' test_perf 'repack (sparse:oid)' \ --prereq SPARSE_OID ' git pack-objects --stdout --no-reuse-delta --revs --all \ --filter=sparse:oid=$(cat sparse-oid) pk ' test_size 'repack size (sparse:oid)' \ --prereq SPARSE_OID ' test_file_size pk ' test_perf 'repack (sparse:oid, --path-walk)' \ --prereq SPARSE_OID ' git pack-objects --stdout --no-reuse-delta --revs --all --path-walk \ --filter=sparse:oid=$(cat sparse-oid) pk ' test_size 'repack size (sparse:oid, --path-walk)' \ --prereq SPARSE_OID ' test_file_size pk ' test_done