From: git@jeffhostetler.com Date: Fri, 07 Apr 2017 21:20:46 GMT Subject: [PATCH v7 2/3] p0004-read-tree: perf test to time read-tree Message-ID: <20170407212047.64950-3-git@jeffhostetler.com> In-Reply-To: <20170407212047.64950-1-git@jeffhostetler.com> From: Jeff Hostetler Signed-off-by: Jeff Hostetler --- t/perf/p0004-read-tree.sh | 117 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100755 t/perf/p0004-read-tree.sh diff --git a/t/perf/p0004-read-tree.sh b/t/perf/p0004-read-tree.sh new file mode 100755 index 0000000..a70e969 --- /dev/null +++ b/t/perf/p0004-read-tree.sh @@ -0,0 +1,117 @@ +#!/bin/sh + +test_description="Tests performance of read-tree" + +. ./perf-lib.sh + +test_perf_default_repo +test_checkout_worktree + +## usage: dir depth width files +fill_index() { + awk -v arg_dir=$1 -v arg_depth=$2 -v arg_width=$3 -v arg_files=$4 ' + function make_paths(dir, depth, width, files, f, w) { + for (f = 1; f <= files; f++) { + print dir "/file" f + } + if (depth > 0) { + for (w = 1; w <= width; w++) { + make_paths(dir "/dir" w, depth - 1, width, files) + } + } + } + END { make_paths(arg_dir, arg_depth, arg_width, arg_files) } +' .git/info/sparse-checkout && + git config --local core.sparsecheckout 1 && + git reset --hard +' + +## The number of files in the xxx_work1_xxx branch. +nr_work1=$(git ls-files | wc -l) +export nr_work1 + +test_perf "read-tree work1 ($nr_work1)" ' + git read-tree -m $br_base $br_work1 -n +' + +## Alternate between base and work branches several +## times to measure a large change. +test_perf "switch base work1 ($nr_base $nr_work1)" ' + git checkout $br_base && + git checkout $br_work1 +' + +## Create work2 by modifying 1 file in work1. +## Create work3 as an alias of work2. +test_expect_success 'setup work2' ' + git branch $br_work2 && + git checkout $br_work2 && + echo x >$new_dir/file1 && + git add $new_dir/file1 && + git commit -m $br_work2 && + git branch $br_work3 +' + +## Alternate between work1 and work2 several times +## to measure a very small change. +test_perf "switch work1 work2 ($nr_work1)" ' + git checkout $br_work1 && + git checkout $br_work2 +' + +## Alternate between branches work2 and work3 which +## are aliases of the same commit. +test_perf "switch commit aliases ($nr_work1)" ' + git checkout $br_work3 && + git checkout $br_work2 +' + +test_done -- 2.9.3