]> git.ipfire.org Git - thirdparty/git.git/commitdiff
ci: run test round with parallel-checkout enabled
authorMatheus Tavares <matheus.bernardino@usp.br>
Tue, 4 May 2021 16:27:35 +0000 (13:27 -0300)
committerJunio C Hamano <gitster@pobox.com>
Wed, 5 May 2021 03:27:17 +0000 (12:27 +0900)
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>
ci/run-build-and-tests.sh
parallel-checkout.c
t/README
t/lib-parallel-checkout.sh

index a66b5e8c75aec2e4a9ea80227a8b492c8efcdf8d..23b28e739116bbc7065765ed9e76d8bc6a2833ef 100755 (executable)
@@ -25,6 +25,7 @@ linux-gcc)
        export GIT_TEST_ADD_I_USE_BUILTIN=1
        export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master
        export GIT_TEST_WRITE_REV_INDEX=1
+       export GIT_TEST_CHECKOUT_WORKERS=2
        make test
        ;;
 linux-clang)
index 6fb3f1e6c9adc37a4c0c533d6b64a562da92d63c..6b1af32bb3d4f7fc52db1ccf1bbda46ccda95fa4 100644 (file)
@@ -35,6 +35,20 @@ static const int DEFAULT_NUM_WORKERS = 1;
 
 void get_parallel_checkout_configs(int *num_workers, int *threshold)
 {
+       char *env_workers = getenv("GIT_TEST_CHECKOUT_WORKERS");
+
+       if (env_workers && *env_workers) {
+               if (strtol_i(env_workers, 10, num_workers)) {
+                       die("invalid value for GIT_TEST_CHECKOUT_WORKERS: '%s'",
+                           env_workers);
+               }
+               if (*num_workers < 1)
+                       *num_workers = online_cpus();
+
+               *threshold = 0;
+               return;
+       }
+
        if (git_config_get_int("checkout.workers", num_workers))
                *num_workers = DEFAULT_NUM_WORKERS;
        else if (*num_workers < 1)
index fd9375b146d199b076b22d6b3b0ad8a9c1a9e4a6..a194488f2780e34d978d95cf6d79c31e0da4ce01 100644 (file)
--- a/t/README
+++ b/t/README
@@ -436,6 +436,10 @@ and "sha256".
 GIT_TEST_WRITE_REV_INDEX=<boolean>, when true enables the
 'pack.writeReverseIndex' setting.
 
+GIT_TEST_CHECKOUT_WORKERS=<n> overrides the 'checkout.workers' setting
+to <n> and 'checkout.thresholdForParallelism' to 0, forcing the
+execution of the parallel-checkout code.
+
 Naming Tests
 ------------
 
index d6740425b1a6fbab5fa0bb8586ee4da1531a2ca0..21f5759732806407aa3ecfab2e48b18b4cb75286 100644 (file)
@@ -1,5 +1,8 @@
 # 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