d9ea451ab6
When bisecting a performance regression using a config file, `./bisect_regression --config my_perf.conf` for example, the config file can contain Codespeed configuration which would instruct the 'aggregate.perl' script called by the 'run' script to output results in the Codespeed format and maybe to try to send this output to a Codespeed server. This is unfortunate because the 'bisect_run_script' relies on the regular output from 'aggregate.perl' to mesure performance, so let's disable Codespeed output and sending results to a Codespeed server. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
54 lines
1.4 KiB
Bash
Executable File
54 lines
1.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
script="$1"
|
|
test_number="$2"
|
|
info_dir="$3"
|
|
|
|
# This aborts the bisection immediately
|
|
die () {
|
|
echo >&2 "error: $*"
|
|
exit 255
|
|
}
|
|
|
|
bisect_head=$(git rev-parse --verify BISECT_HEAD) || die "Failed to find BISECT_HEAD ref"
|
|
|
|
script_number=$(echo "$script" | sed -e "s/^p\([0-9]*\).*\$/\1/") || die "Failed to get script number for '$script'"
|
|
|
|
oldtime=$(cat "$info_dir/oldtime") || die "Failed to access '$info_dir/oldtime'"
|
|
newtime=$(cat "$info_dir/newtime") || die "Failed to access '$info_dir/newtime'"
|
|
|
|
cd t/perf || die "Failed to cd into 't/perf'"
|
|
|
|
result_file="$info_dir/perf_${script_number}_${bisect_head}_results.txt"
|
|
|
|
GIT_PERF_DIRS_OR_REVS="$bisect_head"
|
|
export GIT_PERF_DIRS_OR_REVS
|
|
|
|
# Don't use codespeed
|
|
GIT_PERF_CODESPEED_OUTPUT=
|
|
GIT_PERF_SEND_TO_CODESPEED=
|
|
export GIT_PERF_CODESPEED_OUTPUT
|
|
export GIT_PERF_SEND_TO_CODESPEED
|
|
|
|
./run "$script" >"$result_file" 2>&1 || die "Failed to run perf test '$script'"
|
|
|
|
rtime=$(sed -n "s/^$script_number\.$test_number:.*\([0-9]\+\.[0-9]\+\)(.*).*\$/\1/p" "$result_file")
|
|
|
|
echo "newtime: $newtime"
|
|
echo "rtime: $rtime"
|
|
echo "oldtime: $oldtime"
|
|
|
|
# Compare ($newtime - $rtime) with ($rtime - $oldtime)
|
|
# Times are decimal number, not integers
|
|
|
|
if test $(echo "$newtime" "$rtime" "$oldtime" | awk '{ print ($1 - $2 > $2 - $3) }') = 1
|
|
then
|
|
# Current commit is considered "good/old"
|
|
echo "$rtime" >"$info_dir/oldtime"
|
|
exit 0
|
|
else
|
|
# Current commit is considered "bad/new"
|
|
echo "$rtime" >"$info_dir/newtime"
|
|
exit 1
|
|
fi
|