t5400: avoid concurrent writes into a trace file
authorJeff King <peff@peff.net>
Thu, 18 May 2017 05:02:09 +0000 (01:02 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 18 May 2017 05:09:23 +0000 (14:09 +0900)
commit71406ed4d6d21fbe0ee0e068159739a7476f3039
tree0aed47493a1efee71f84fb156b85c94241bda417
parent63d428e656edcd670fa87e74136726096ff3de6f
t5400: avoid concurrent writes into a trace file

One test in t5400 examines the packet exchange between git-push and
git-receive-pack. The latter inherits the GIT_TRACE_PACKET environment
variable, so that both processes dump trace data into the same file
concurrently. This should not be a problem because the trace file is
opened with O_APPEND.

On Windows, however, O_APPEND is not atomic as it should be: it is
emulated as lseek(SEEK_END) followed by write(). For this reason, the
test is unreliable: it can happen that one process overwrites a line
that was just written by the other process. As a consequence, the test
sometimes does not find one or another line that is expected (and it is
also successful occasionally).

The test case is actually only interested in the output of git-push.
To ensure that only git-push writes to the trace file, override the
receive-pack command such that it does not even open the trace file.

Reported-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t5400-send-pack.sh