| #!/bin/sh |
| |
| test_description="test performance of Git operations using the index" |
| |
| . ./perf-lib.sh |
| |
| test_perf_default_repo |
| |
| SPARSE_CONE=f2/f4/f1 |
| |
| test_expect_success 'setup repo and indexes' ' |
| git reset --hard HEAD && |
| |
| # Remove submodules from the example repo, because our |
| # duplication of the entire repo creates an unlikely data shape. |
| if git config --file .gitmodules --get-regexp "submodule.*.path" >modules |
| then |
| git rm $(awk "{print \$2}" modules) && |
| git commit -m "remove submodules" || return 1 |
| fi && |
| |
| echo bogus >a && |
| cp a b && |
| git add a b && |
| git commit -m "level 0" && |
| BLOB=$(git rev-parse HEAD:a) && |
| OLD_COMMIT=$(git rev-parse HEAD) && |
| OLD_TREE=$(git rev-parse HEAD^{tree}) && |
| |
| for i in $(test_seq 1 4) |
| do |
| cat >in <<-EOF && |
| 100755 blob $BLOB a |
| 040000 tree $OLD_TREE f1 |
| 040000 tree $OLD_TREE f2 |
| 040000 tree $OLD_TREE f3 |
| 040000 tree $OLD_TREE f4 |
| EOF |
| NEW_TREE=$(git mktree <in) && |
| NEW_COMMIT=$(git commit-tree $NEW_TREE -p $OLD_COMMIT -m "level $i") && |
| OLD_TREE=$NEW_TREE && |
| OLD_COMMIT=$NEW_COMMIT || return 1 |
| done && |
| |
| git sparse-checkout init --cone && |
| git branch -f wide $OLD_COMMIT && |
| git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . full-index-v3 && |
| ( |
| cd full-index-v3 && |
| git sparse-checkout init --cone && |
| git sparse-checkout set $SPARSE_CONE && |
| git config index.version 3 && |
| git update-index --index-version=3 |
| ) && |
| git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . full-index-v4 && |
| ( |
| cd full-index-v4 && |
| git sparse-checkout init --cone && |
| git sparse-checkout set $SPARSE_CONE && |
| git config index.version 4 && |
| git update-index --index-version=4 |
| ) && |
| git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . sparse-index-v3 && |
| ( |
| cd sparse-index-v3 && |
| git sparse-checkout init --cone --sparse-index && |
| git sparse-checkout set $SPARSE_CONE && |
| git config index.version 3 && |
| git update-index --index-version=3 |
| ) && |
| git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . sparse-index-v4 && |
| ( |
| cd sparse-index-v4 && |
| git sparse-checkout init --cone --sparse-index && |
| git sparse-checkout set $SPARSE_CONE && |
| git config index.version 4 && |
| git update-index --index-version=4 |
| ) |
| ' |
| |
| test_perf_on_all () { |
| command="$@" |
| for repo in full-index-v3 full-index-v4 \ |
| sparse-index-v3 sparse-index-v4 |
| do |
| test_perf "$command ($repo)" " |
| ( |
| cd $repo && |
| echo >>$SPARSE_CONE/a && |
| $command |
| ) |
| " |
| done |
| } |
| |
| test_perf_on_all git status |
| test_perf_on_all git add -A |
| test_perf_on_all git add . |
| test_perf_on_all git commit -a -m A |
| |
| test_done |