#!/bin/sh test_description="test performance of Git operations using the index" . ./perf-lib.sh test_perf_default_repo SPARSE_CONE=f2/f4 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 3) 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 >$SPARSE_CONE/$l2/a && git commit -a -m "edit $SPARSE_CONE/$l2/a" || return 1 done && git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . full-v3 && ( cd full-v3 && git sparse-checkout init --cone && git sparse-checkout set $SPARSE_CONE && git config index.version 3 && git update-index --index-version=3 && git checkout HEAD~4 ) && git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . full-v4 && ( cd full-v4 && git sparse-checkout init --cone && git sparse-checkout set $SPARSE_CONE && git config index.version 4 && git update-index --index-version=4 && git checkout HEAD~4 ) && git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . sparse-v3 && ( cd sparse-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 checkout HEAD~4 ) && git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . sparse-v4 && ( cd sparse-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 && git checkout HEAD~4 ) ' test_perf_on_all () { command="$@" for repo in full-v3 full-v4 \ sparse-v3 sparse-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 stash && git stash pop' test_perf_on_all 'echo >>new && git stash -u && git stash pop' test_perf_on_all git add -A test_perf_on_all git add . test_perf_on_all git commit -a -m A test_perf_on_all git checkout -f - test_perf_on_all "git sparse-checkout add f2/f3/f1 && git sparse-checkout set $SPARSE_CONE" test_perf_on_all git reset test_perf_on_all git reset --hard test_perf_on_all git reset -- does-not-exist test_perf_on_all git diff test_perf_on_all git diff --cached test_perf_on_all git blame $SPARSE_CONE/a test_perf_on_all git blame $SPARSE_CONE/f3/a test_perf_on_all git read-tree -mu HEAD test_perf_on_all git checkout-index -f --all test_perf_on_all git update-index --add --remove $SPARSE_CONE/a test_perf_on_all "git rm -f $SPARSE_CONE/a && git checkout HEAD -- $SPARSE_CONE/a" test_perf_on_all git grep --cached bogus -- "f2/f1/f1/*" test_perf_on_all git write-tree test_perf_on_all git describe --dirty test_perf_on_all 'echo >>new && git describe --dirty' test_perf_on_all git diff-files test_perf_on_all git diff-files -- $SPARSE_CONE/a test_done