mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
![Johannes Schindelin](/assets/img/avatar_default.png)
The Git daemon tests create a FIFO first thing and will hang if said FIFO is not available. This is a problem with Git for Windows, where `mkfifo` is an MSYS2 program that leverages MSYS2's POSIX emulation layer, but `git-daemon.exe` is a MINGW program that has not the first clue about that POSIX emulation layer and therefore blinks twice when it sees MSYS2's emulated FIFOs and then just stares into space. This lets t5570-git-daemon.sh and t5811-proto-disable-git.sh pass. Signed-off-by: Stepan Kasal <kasal@ucw.cz> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
93 lines
1.9 KiB
Bash
93 lines
1.9 KiB
Bash
# Shell library to run git-daemon in tests. Ends the test early if
|
|
# GIT_TEST_GIT_DAEMON is not set.
|
|
#
|
|
# Usage:
|
|
#
|
|
# . ./test-lib.sh
|
|
# . "$TEST_DIRECTORY"/lib-git-daemon.sh
|
|
# start_git_daemon
|
|
#
|
|
# test_expect_success '...' '
|
|
# ...
|
|
# '
|
|
#
|
|
# test_expect_success ...
|
|
#
|
|
# stop_git_daemon
|
|
# test_done
|
|
|
|
test_tristate GIT_TEST_GIT_DAEMON
|
|
if test "$GIT_TEST_GIT_DAEMON" = false
|
|
then
|
|
skip_all="git-daemon testing disabled (unset GIT_TEST_GIT_DAEMON to enable)"
|
|
test_done
|
|
fi
|
|
|
|
if test_have_prereq !PIPE
|
|
then
|
|
test_skip_or_die $GIT_TEST_GIT_DAEMON "file system does not support FIFOs"
|
|
fi
|
|
|
|
LIB_GIT_DAEMON_PORT=${LIB_GIT_DAEMON_PORT-${this_test#t}}
|
|
|
|
GIT_DAEMON_PID=
|
|
GIT_DAEMON_DOCUMENT_ROOT_PATH="$PWD"/repo
|
|
GIT_DAEMON_URL=git://127.0.0.1:$LIB_GIT_DAEMON_PORT
|
|
|
|
start_git_daemon() {
|
|
if test -n "$GIT_DAEMON_PID"
|
|
then
|
|
error "start_git_daemon already called"
|
|
fi
|
|
|
|
mkdir -p "$GIT_DAEMON_DOCUMENT_ROOT_PATH"
|
|
|
|
trap 'code=$?; stop_git_daemon; (exit $code); die' EXIT
|
|
|
|
say >&3 "Starting git daemon ..."
|
|
mkfifo git_daemon_output
|
|
git daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \
|
|
--reuseaddr --verbose \
|
|
--base-path="$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
|
|
"$@" "$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
|
|
>&3 2>git_daemon_output &
|
|
GIT_DAEMON_PID=$!
|
|
{
|
|
read line <&7
|
|
echo >&4 "$line"
|
|
cat <&7 >&4 &
|
|
} 7<git_daemon_output &&
|
|
|
|
# Check expected output
|
|
if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble"
|
|
then
|
|
kill "$GIT_DAEMON_PID"
|
|
wait "$GIT_DAEMON_PID"
|
|
trap 'die' EXIT
|
|
test_skip_or_die $GIT_TEST_GIT_DAEMON \
|
|
"git daemon failed to start"
|
|
fi
|
|
}
|
|
|
|
stop_git_daemon() {
|
|
if test -z "$GIT_DAEMON_PID"
|
|
then
|
|
return
|
|
fi
|
|
|
|
trap 'die' EXIT
|
|
|
|
# kill git-daemon child of git
|
|
say >&3 "Stopping git daemon ..."
|
|
kill "$GIT_DAEMON_PID"
|
|
wait "$GIT_DAEMON_PID" >&3 2>&4
|
|
ret=$?
|
|
# expect exit with status 143 = 128+15 for signal TERM=15
|
|
if test $ret -ne 143
|
|
then
|
|
error "git daemon exited with status: $ret"
|
|
fi
|
|
GIT_DAEMON_PID=
|
|
rm -f git_daemon_output
|
|
}
|