git-daemon: use 'test_atexit` to stop 'git-daemon'
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 13 Mar 2019 12:24:12 +0000 (13:24 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Mar 2019 03:34:39 +0000 (12:34 +0900)
Use 'test_atexit' to run cleanup commands to stop 'git-daemon' at the
end of the test script or upon interrupt or failure, as it is shorter,
simpler, and more robust than registering such cleanup commands in the
trap on EXIT in the test scripts.

Note that in 't5570-git-daemon.sh' the daemon is stopped and then
re-started in the middle of the test script; take care that the
cleanup functions to stop the daemon are only registered once.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/interop/i5500-git-daemon.sh
t/lib-git-daemon.sh
t/t5570-git-daemon.sh
index 1daf69420be1948cdc1eb97b4b4122e22674d43e..4d22e42f8422adac89c37ba4ef94f8a8ca66f413 100755 (executable)
@@ -37,5 +37,4 @@ test_expect_success "fetch with $VERSION_B" '
        test_cmp expect actual
 '
 
        test_cmp expect actual
 '
 
-stop_git_daemon
 test_done
 test_done
index 6dab8766e7c7431e25ef94b43cc30d0281f25f32..7b3407134e1a776de7a030bce98f0248fe6cd42f 100644 (file)
@@ -13,7 +13,6 @@
 #
 #      test_expect_success ...
 #
 #
 #      test_expect_success ...
 #
-#      stop_git_daemon
 #      test_done
 
 test_tristate GIT_TEST_GIT_DAEMON
 #      test_done
 
 test_tristate GIT_TEST_GIT_DAEMON
@@ -36,6 +35,7 @@ GIT_DAEMON_DOCUMENT_ROOT_PATH="$PWD"/repo
 GIT_DAEMON_HOST_PORT=127.0.0.1:$LIB_GIT_DAEMON_PORT
 GIT_DAEMON_URL=git://$GIT_DAEMON_HOST_PORT
 
 GIT_DAEMON_HOST_PORT=127.0.0.1:$LIB_GIT_DAEMON_PORT
 GIT_DAEMON_URL=git://$GIT_DAEMON_HOST_PORT
 
+registered_stop_git_daemon_atexit_handler=
 start_git_daemon() {
        if test -n "$GIT_DAEMON_PID"
        then
 start_git_daemon() {
        if test -n "$GIT_DAEMON_PID"
        then
@@ -44,7 +44,13 @@ start_git_daemon() {
 
        mkdir -p "$GIT_DAEMON_DOCUMENT_ROOT_PATH"
 
 
        mkdir -p "$GIT_DAEMON_DOCUMENT_ROOT_PATH"
 
-       trap 'code=$?; stop_git_daemon; (exit $code); die' EXIT
+       # One of the test scripts stops and then re-starts 'git daemon'.
+       # Don't register and then run the same atexit handlers several times.
+       if test -z "$registered_stop_git_daemon_atexit_handler"
+       then
+               test_atexit 'stop_git_daemon'
+               registered_stop_git_daemon_atexit_handler=AlreadyDone
+       fi
 
        say >&3 "Starting git daemon ..."
        mkfifo git_daemon_output
 
        say >&3 "Starting git daemon ..."
        mkfifo git_daemon_output
@@ -66,7 +72,7 @@ start_git_daemon() {
        then
                kill "$GIT_DAEMON_PID"
                wait "$GIT_DAEMON_PID"
        then
                kill "$GIT_DAEMON_PID"
                wait "$GIT_DAEMON_PID"
-               trap 'die' EXIT
+               unset GIT_DAEMON_PID
                test_skip_or_die $GIT_TEST_GIT_DAEMON \
                        "git daemon failed to start"
        fi
                test_skip_or_die $GIT_TEST_GIT_DAEMON \
                        "git daemon failed to start"
        fi
@@ -78,8 +84,6 @@ stop_git_daemon() {
                return
        fi
 
                return
        fi
 
-       trap 'die' EXIT
-
        # kill git-daemon child of git
        say >&3 "Stopping git daemon ..."
        kill "$GIT_DAEMON_PID"
        # kill git-daemon child of git
        say >&3 "Stopping git daemon ..."
        kill "$GIT_DAEMON_PID"
index 58ee7876853161087c256e56e687f0b341fde915..00fc612cacba4781975d066e01873e90e06050a8 100755 (executable)
@@ -198,5 +198,4 @@ test_expect_success FAKENC 'hostname interpolation works after LF-stripping' '
        test_cmp expect actual
 '
 
        test_cmp expect actual
 '
 
-stop_git_daemon
 test_done
 test_done