git/t/lib-git-daemon.sh
Jonathan Nieder c74c72034f test: replace shebangs with descriptions in shell libraries
A #! line in these files is misleading, since these scriptlets are
meant to be sourced with '.' (using whatever shell sources them)
instead of run directly using the interpreter named on the #! line.

Removing the #! line shouldn't hurt syntax highlighting since
these files have filenames ending with '.sh'.  For documentation,
add a brief description of how the files are meant to be used in
place of the shebang line.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-11-26 14:23:52 -08:00

85 lines
1.7 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
if test -z "$GIT_TEST_GIT_DAEMON"
then
skip_all="git-daemon testing disabled (define GIT_TEST_GIT_DAEMON to enable)"
test_done
fi
LIB_GIT_DAEMON_PORT=${LIB_GIT_DAEMON_PORT-'8121'}
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
error "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
}