summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f6a34cf)
raw | patch | inline | side by side (parent: f6a34cf)
author | Clemens Buchacher <drizzd@aon.at> | |
Sat, 7 Jan 2012 11:42:47 +0000 (12:42 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Sun, 8 Jan 2012 23:08:11 +0000 (15:08 -0800) |
In start_daemon, git-daemon is started as a background process. In
theory, the tests may try to connect before the daemon had a chance
to open a listening socket. Avoid this race condition by waiting
for it to output "Ready to rumble". Any other output is considered
an error and the test is aborted.
Should git-daemon produce no output at all, lib-git-daemon would
block forever. This could be fixed by introducing a timeout. On
the other hand, we have no timeout for other git commands which
could suffer from the same problem. Since such a mechanism adds
some complexity, I have decided against it.
Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
theory, the tests may try to connect before the daemon had a chance
to open a listening socket. Avoid this race condition by waiting
for it to output "Ready to rumble". Any other output is considered
an error and the test is aborted.
Should git-daemon produce no output at all, lib-git-daemon would
block forever. This could be fixed by introducing a timeout. On
the other hand, we have no timeout for other git commands which
could suffer from the same problem. Since such a mechanism adds
some complexity, I have decided against it.
Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/lib-git-daemon.sh | patch | blob | history |
diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh
index 5e81a259426665c69b77c31ea6cdf13ffd2bb9e8..ef2d01f36939199f9720faad06d2b3a01c7cd7f5 100644 (file)
--- a/t/lib-git-daemon.sh
+++ b/t/lib-git-daemon.sh
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>&4 &
+ >&3 2>git_daemon_output &
GIT_DAEMON_PID=$!
+ {
+ read line
+ echo >&4 "$line"
+ cat >&4 &
+
+ # 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
+ } <git_daemon_output
}
stop_git_daemon() {
error "git daemon exited with status: $ret"
fi
GIT_DAEMON_PID=
+ rm -f git_daemon_output
}