Re: [PATCH 2/6] t/lib-git-daemon: record daemon log
- From
Lucas Werkmeister <mail@lucaswerkmeister.de>
- Date
- Jan 25, 2018, 11:56 UTC
- Message-ID
- <38b41541-5758-d013-3d64-314eec7e31ed@lucaswerkmeister.de>
- In-Reply-To
- <20180125005511.GB26850@sigill.intra.peff.net>
On 25.01.2018 01:55, Jeff King wrote:
Show 15 quoted lines
> When we start git-daemon for our tests, we send its stderr > log stream to a named pipe. We synchronously read the first > line to make sure that the daemon started, and then dump the > rest to descriptor 4. This is handy for debugging test > output with "--verbose", but the tests themselves can't > access the log data. > > Let's dump the log into a file, as well, so that future > tests can check the log. There are two subtleties worth > calling out here: > > - we replace "cat" with a subshell loop around "read" to > ensure that there's no buffering (so that tests can be > sure that after a request has been served, the matching > log entries will have made it to the file)
POSIX specifies the -u option for that behavior, can’t you use that? (GNU coreutils’ cat ignores it, since writing without delay is apparently its default behavior already.)
Show 40 quoted lines
>
> - we open the logfile for append, rather than just output.
> That makes it OK for tests to truncate the logfile
> without restarting the daemon (the OS will atomically
> seek to the end of the file when outputting each line).
> That allows tests to look at the log without worrying
> about pollution from earlier tests.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> t/lib-git-daemon.sh | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh
> index 987d40680b..19f3ffdbb1 100644
> --- a/t/lib-git-daemon.sh
> +++ b/t/lib-git-daemon.sh
> @@ -53,11 +53,19 @@ start_git_daemon() {
> "$@" "$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
> >&3 2>git_daemon_output &
> GIT_DAEMON_PID=$!
> + >daemon.log
> {
> read line <&7
> + echo "$line"
> echo >&4 "$line"
> - cat <&7 >&4 &
> - } 7<git_daemon_output &&
> + (
> + while read line <&7
> + do
> + echo "$line"
> + echo >&4 "$line"
> + done
> + ) &
> + } 7<git_daemon_output >>"$TRASH_DIRECTORY/daemon.log" &&
>
> # Check expected output
> if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble"
> read without -r clobbers backslashes, and echo may interpret escape sequences. To faithfully reproduce the output, it would be better to use read -r and printf '%s\n' "$line", I think. (However, it looks like the existing code already uses read+echo, so I guess you could also keep that pattern in this change and then fix it in a later one.)