]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t7900: fix flaky test due to leaking background job
authorPatrick Steinhardt <ps@pks.im>
Mon, 19 Aug 2024 07:47:59 +0000 (09:47 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 19 Aug 2024 16:36:23 +0000 (09:36 -0700)
One of the recently-added tests in t7900 exercises git-maintanance(1)
with the `--detach` flag, which causes it to perform maintenance in the
background. We do not wait for the backgrounded process to exit though,
which causes the process to leak outside of the test, leading to racy
behaviour.

Fix this by synchronizing with the process via a separate file
descriptor. This is the same workaround as we use in t6500, see the
function `run_and_wait_for_auto_gc ()`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7900-maintenance.sh

index 06ab43cfb599e1784f31b519b828577b3b2408db..074eadcd1c940328ce2a1db156fb13449e1a22c4 100755 (executable)
@@ -967,8 +967,13 @@ test_expect_success '--detach causes maintenance to run in background' '
                git config set maintenance.loose-objects.auto 1 &&
                git config set maintenance.incremental-repack.enabled true &&
 
-               git maintenance run --detach >out 2>&1 &&
-               test_must_be_empty out
+               # The extra file descriptor gets inherited to the child
+               # process, and by reading stdout we thus essentially wait for
+               # that descriptor to get closed, which indicates that the child
+               # is done, too.
+               output=$(git maintenance run --detach 2>&1 9>&1) &&
+               printf "%s" "$output" >output &&
+               test_must_be_empty output
        )
 '