git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] t0610-reftable-basics: mitigate a flaky test on cygwin

From
Ramsay Jones <ramsay@ramsayjones.plus.com>
Date
Jan 16, 2026, 20:39 UTC
Message-ID
<f46e023b-1925-41b2-9842-42e7cb727056@ramsayjones.plus.com>

Test #29 ('ref transaction: corrupted tables cause failure') started to fail intermittently for me (from v2.52.0-rc0) when running the testsuite with '-j8'. (Also, having moved to a new laptop and windows 11, rather than windows 10). If the test is run by hand, or without any parallelism, then it passes without issue.

When the test fails (e.g. 1 out of 32 parallel runs) the cause is due to a permission error while corrupting a table file:

  ./test-lib.sh: line 1010: .git/reftable/0x000000000001-0x000000000002-d89bb8ee.ref: Permission denied

This corruption is done in a shell loop, directly after a 'test_commit', which uses an ': >"$f"' expression to truncate the file. Adding a sleep of one second after the 'test_commit' and before the shell loop fixes the test (it is not clear why). Replacing the redirection shell expression with a 'test-tool truncate "$f" 0' invocation also provides a fix, which could simply be another way to change the timing sufficiently to win the race.

During a debug session, I tried looking at the strace output for the shell redirection:

  $ rm /tmp/hello; echo hello >/tmp/hello; ls -l /tmp/hello
  -rw-r--r-- 1 ramsay None 6 Nov 10 17:25 /tmp/hello
  $
  $ strace -o zzz bash -c ': >/tmp/hello'
  $
Similarly, for the test-tool solution:
  $ strace -o xxx ./t/helper/test-tool truncate /tmp/hello 0
  $

When comparing the output, the differences seemed to be what you would expect and, if anything, the shell redirect probably would have taken longer than the test-tool solution (many fcntl() calls to dup the stdout to the <fd>). The call to the win32 api NtCreateFile() was identical, apart from the first (FileHandle) parameter, of course.

In order to fix this flaky test on cygwin, despite not knowing why it works, replace the shell redirection with the above 'test-tool truncate' invocation.

Helped-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
---
 t/t0610-reftable-basics.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/t/t0610-reftable-basics.sh b/t/t0610-reftable-basics.sh
index 6575528f21..e19e036898 100755
--- a/t/t0610-reftable-basics.sh
+++ b/t/t0610-reftable-basics.sh
@@ -207,7 +207,7 @@ test_expect_success 'ref transaction: corrupted tables cause failure' '
 		test_commit file1 &&
 		for f in .git/reftable/*.ref
 		do
-			: >"$f" || return 1
+			test-tool truncate "$f" 0 || return 1
 		done &&
 		test_must_fail git update-ref refs/heads/main HEAD
 	)
-- 
2.52.0
Next: Patrick Steinhardt
Message 1 of 4 in “t0610-reftable-basics: mitigate a flaky test on cygwin”
  1. 2/2 t0610-reftable-basics: mitigate a flaky test on cygwinRamsay Jones, Jan 16, 2026
  2. Patrick SteinhardtJan 19, 2026
  3. Ramsay JonesJan 19, 2026
  4. Patrick SteinhardtJan 20, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.