| 1 | #!/bin/sh |
| 2 | |
| 3 | test_description="Tests pathological globbing performance |
| 4 | |
| 5 | Shows how Git's globbing performance performs when given the sort of |
| 6 | pathological patterns described in at https://research.swtch.com/glob |
| 7 | " |
| 8 | |
| 9 | . ./perf-lib.sh |
| 10 | |
| 11 | test_globs_big='10 25 50 75 100' |
| 12 | test_globs_small='1 2 3 4 5 6' |
| 13 | |
| 14 | test_perf_fresh_repo |
| 15 | |
| 16 | test_expect_success 'setup' ' |
| 17 | for i in $(test_seq 1 100) |
| 18 | do |
| 19 | printf "a" >>refname && |
| 20 | for j in $(test_seq 1 $i) |
| 21 | do |
| 22 | printf "a*" >>refglob.$i || return 1 |
| 23 | done && |
| 24 | echo b >>refglob.$i || return 1 |
| 25 | done && |
| 26 | test_commit test $(cat refname).t "" $(cat refname).t |
| 27 | ' |
| 28 | |
| 29 | for i in $test_globs_small |
| 30 | do |
| 31 | test_perf "refglob((a*)^nb) against tag (a^100).t; n = $i" ' |
| 32 | git for-each-ref "refs/tags/$(cat refglob.'$i')b" |
| 33 | ' |
| 34 | done |
| 35 | |
| 36 | for i in $test_globs_small |
| 37 | do |
| 38 | test_perf "fileglob((a*)^nb) against file (a^100).t; n = $i" ' |
| 39 | git ls-files "$(cat refglob.'$i')b" |
| 40 | ' |
| 41 | done |
| 42 | |
| 43 | test_done |