|  | #!/bin/sh | 
|  |  | 
|  | test_description='Commit walk performance tests' | 
|  | . ./perf-lib.sh | 
|  |  | 
|  | test_perf_large_repo | 
|  |  | 
|  | test_expect_success 'setup' ' | 
|  | git for-each-ref --format="%(refname)" "refs/heads/*" "refs/tags/*" >allrefs && | 
|  | sort -r allrefs | head -n 50 >refs && | 
|  | for ref in $(cat refs) | 
|  | do | 
|  | git branch -f ref-$ref $ref && | 
|  | echo ref-$ref || | 
|  | return 1 | 
|  | done >branches && | 
|  | for ref in $(cat refs) | 
|  | do | 
|  | git tag -f tag-$ref $ref && | 
|  | echo tag-$ref || | 
|  | return 1 | 
|  | done >tags && | 
|  |  | 
|  | echo "A:HEAD" >test-tool-refs && | 
|  | for line in $(cat refs) | 
|  | do | 
|  | echo "X:$line" >>test-tool-refs || return 1 | 
|  | done && | 
|  | echo "A:HEAD" >test-tool-tags && | 
|  | for line in $(cat tags) | 
|  | do | 
|  | echo "X:$line" >>test-tool-tags || return 1 | 
|  | done && | 
|  |  | 
|  | commit=$(git commit-tree $(git rev-parse HEAD^{tree})) && | 
|  | git update-ref refs/heads/disjoint-base $commit && | 
|  |  | 
|  | git commit-graph write --reachable | 
|  | ' | 
|  |  | 
|  | test_perf 'ahead-behind counts: git for-each-ref' ' | 
|  | git for-each-ref --format="%(ahead-behind:HEAD)" --stdin <refs | 
|  | ' | 
|  |  | 
|  | test_perf 'ahead-behind counts: git branch' ' | 
|  | xargs git branch -l --format="%(ahead-behind:HEAD)" <branches | 
|  | ' | 
|  |  | 
|  | test_perf 'ahead-behind counts: git tag' ' | 
|  | xargs git tag -l --format="%(ahead-behind:HEAD)" <tags | 
|  | ' | 
|  |  | 
|  | test_perf 'contains: git for-each-ref --merged' ' | 
|  | git for-each-ref --merged=HEAD --stdin <refs | 
|  | ' | 
|  |  | 
|  | test_perf 'contains: git branch --merged' ' | 
|  | xargs git branch --merged=HEAD <branches | 
|  | ' | 
|  |  | 
|  | test_perf 'contains: git tag --merged' ' | 
|  | xargs git tag --merged=HEAD <tags | 
|  | ' | 
|  |  | 
|  | test_perf 'is-base check: test-tool reach (refs)' ' | 
|  | test-tool reach get_branch_base_for_tip <test-tool-refs | 
|  | ' | 
|  |  | 
|  | test_perf 'is-base check: test-tool reach (tags)' ' | 
|  | test-tool reach get_branch_base_for_tip <test-tool-tags | 
|  | ' | 
|  |  | 
|  | test_perf 'is-base check: git for-each-ref' ' | 
|  | git for-each-ref --format="%(is-base:HEAD)" --stdin <refs | 
|  | ' | 
|  |  | 
|  | test_perf 'is-base check: git for-each-ref (disjoint-base)' ' | 
|  | git for-each-ref --format="%(is-base:refs/heads/disjoint-base)" --stdin <refs | 
|  | ' | 
|  |  | 
|  | test_done |