#!/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 <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 sparse-checkout set $SPARSE_CONE && git checkout -b wide $OLD_COMMIT && for l2 in f1 f2 f3 f4 do echo more bogus >>$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 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_done