We have a couple of calls to `stop_git_daemon ()` outside of specific
test cases that will kill a backgrounded git-daemon(1) process and
expect the process with a specific error code. While these function
calls do end up killing git-daemon(1), the error handling we have in
those contexts is basically ineffective. So while we expect the process
to exit with a specific error code, we will just continue with any error
in case it doesn't.
This will change once we enable `set -e` in a subsequent commit. There's
two issues though that will make this _always_ fail:
- Our call to `wait` is expected to fail, but because it's not part of
a condition it will cause us to bail out immediately with `set -e`.
- We try to kill git-daemon(1) a second time via the pidfile. We can
generally expect that this is the same PID though as we had in the
"GIT_DAEMON_PID" environment variable, and thus it's more likely
than not that we have already killed it, and the call to kill will
fail.
Prepare for this change by handling the failure of `wait` with `||` and
by silencing failures of the second call to `kill`.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
# kill git-daemon child of git
say >&3 "Stopping git daemon ..."
+
kill "$GIT_DAEMON_PID"
- wait "$GIT_DAEMON_PID" >&3 2>&4
- ret=$?
+ ret=0; wait "$GIT_DAEMON_PID" >&3 2>&4 || ret=$?
+
if ! test_match_signal 15 $ret
then
error "git daemon exited with status: $ret"
fi
- kill "$(cat "$GIT_DAEMON_PIDFILE")" 2>/dev/null
+
+ kill "$(cat "$GIT_DAEMON_PIDFILE")" 2>/dev/null || :
GIT_DAEMON_PID=
rm -f git_daemon_output "$GIT_DAEMON_PIDFILE"
}