87094fc2da
We already have tests for the basic parallel-checkout operations. But this code can also run be executed by other commands, such as git-read-tree and git-sparse-checkout, which are currently not tested with multiple workers. To promote a wider test coverage without duplicating tests: 1. Add the GIT_TEST_CHECKOUT_WORKERS environment variable, to optionally force parallel-checkout execution during the whole test suite. 2. Set this variable (with a value of 2) in the second test round of our linux-gcc CI job. This round runs `make test` again with some optional GIT_TEST_* variables enabled, so there is no additional overhead in exercising the parallel-checkout code here. Note that tests checking out less than two parallel-eligible entries will fall back to the sequential mode. Nevertheless, it's still a good exercise for the parallel-checkout framework as the fallback codepath also writes the queued entries using the parallel-checkout functions (only without spawning any worker). Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br> Signed-off-by: Junio C Hamano <gitster@pobox.com>
46 lines
1.2 KiB
Bash
46 lines
1.2 KiB
Bash
# Helpers for tests invoking parallel-checkout
|
|
|
|
# Parallel checkout tests need full control of the number of workers
|
|
unset GIT_TEST_CHECKOUT_WORKERS
|
|
|
|
set_checkout_config () {
|
|
if test $# -ne 2
|
|
then
|
|
BUG "usage: set_checkout_config <workers> <threshold>"
|
|
fi &&
|
|
|
|
test_config_global checkout.workers $1 &&
|
|
test_config_global checkout.thresholdForParallelism $2
|
|
}
|
|
|
|
# Run "${@:2}" and check that $1 checkout workers were used
|
|
test_checkout_workers () {
|
|
if test $# -lt 2
|
|
then
|
|
BUG "too few arguments to test_checkout_workers"
|
|
fi &&
|
|
|
|
local expected_workers=$1 &&
|
|
shift &&
|
|
|
|
local trace_file=trace-test-checkout-workers &&
|
|
rm -f "$trace_file" &&
|
|
GIT_TRACE2="$(pwd)/$trace_file" "$@" 2>&8 &&
|
|
|
|
local workers=$(grep "child_start\[..*\] git checkout--worker" "$trace_file" | wc -l) &&
|
|
test $workers -eq $expected_workers &&
|
|
rm "$trace_file"
|
|
} 8>&2 2>&4
|
|
|
|
# Verify that both the working tree and the index were created correctly
|
|
verify_checkout () {
|
|
if test $# -ne 1
|
|
then
|
|
BUG "usage: verify_checkout <repository path>"
|
|
fi &&
|
|
|
|
git -C "$1" diff-index --ignore-submodules=none --exit-code HEAD -- &&
|
|
git -C "$1" status --porcelain >"$1".status &&
|
|
test_must_be_empty "$1".status
|
|
}
|