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

[PATCH v2] Windows: Fix intermittent failures of t7701

From
Johannes Sixt <j.sixt@viscovery.net>
Date
Jan 28, 2009, 09:52 UTC
Message-ID
<49802ADA.6030401@viscovery.net>
In-Reply-To
<7v3af3vnti.fsf@gitster.siamese.dyndns.org>
From: Johannes Sixt <j6t@kdbg.org>

The last test case checks whether unpacked objects receive the time stamp of the pack file. Due to different implementations of stat(2) by MSYS and our version in compat/mingw.c, the test fails in about half of the test runs.

Note the following facts:
- The test uses perl's -M operator to compare the time stamps. Since we
  depend on MSYS perl, the result of this operator is based on MSYS's
  implementation of the stat(2) call.
- NTFS on Windows records fractional seconds.
- The MSYS implementation of stat(2) *rounds* fractional seconds to full
  seconds instead of truncating them. This becomes obvious by comparing the
  modification times reported by 'ls --full-time $f' and 'stat $f' for
  various files $f.
- Our implementation of stat(2) in compat/mingw.c *truncates* to full
  seconds.
The consequence of this is that
- add_packed_git() picks up a truncated whole second modification time
  from the pack file time stamp, which is then used for the loose objects,
  while the pack file retains its time stamp in fractional seconds;
- but the test case compared the pack file's rounded modification times
  to the loose objects' truncated modification times.

And half of the time the rounded modification time is not the same as its truncated modification time.

The fix is that we replace perl by 'test-chmtime -v +0', which prints the truncated whole-second mtime without modifying it.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---
Junio C Hamano schrieb:
> Care to reroll with the simpler, dumber but clearer version?
OK. This time I use an intermediate file and dquotes around $t.
-- Hannes
 t/t7701-repack-unpack-unreachable.sh |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/t/t7701-repack-unpack-unreachable.sh b/t/t7701-repack-unpack-unreachable.sh
index 63a8225..5babdf2 100755
--- a/t/t7701-repack-unpack-unreachable.sh
+++ b/t/t7701-repack-unpack-unreachable.sh
@@ -50,12 +50,10 @@ test_expect_success '-A with -d option leaves unreachable objects unpacked' '

 compare_mtimes ()
 {
-	perl -e 'my $reference = shift;
-		 foreach my $file (@ARGV) {
-			exit(1) unless(-f $file && -M $file == -M $reference);
-		 }
-		 exit(0);
-		' -- "$@"
+	read tref rest &&
+	while read t rest; do
+		test "$tref" = "$t" || break
+	done
 }

 test_expect_success '-A without -d option leaves unreachable objects packed' '
@@ -87,7 +85,9 @@ test_expect_success 'unpacked objects receive timestamp of pack file' '
 	tmppack=".git/objects/pack/tmp_pack" &&
 	ln "$packfile" "$tmppack" &&
 	git repack -A -l -d &&
-	compare_mtimes "$tmppack" "$fsha1path" "$csha1path" "$tsha1path"
+	test-chmtime -v +0 "$tmppack" "$fsha1path" "$csha1path" "$tsha1path" \
+		> mtimes &&
+	compare_mtimes < mtimes
 '

 test_done
-- 
1.6.1.1.1203.g5882
Previous: Junio C Hamano
Message 7 of 7 in “Windows: Fix intermittent failures of t7701”
  1. Windows: Fix intermittent failures of t7701Johannes Sixt, Jan 27, 2009
  2. Johannes SchindelinJan 27, 2009
  3. Jeff KingJan 28, 2009
  4. Johannes SchindelinJan 28, 2009
  5. Johannes SixtJan 28, 2009
  6. Junio C HamanoJan 28, 2009
  7. Windows: Fix intermittent failures of t7701Johannes Sixt, Jan 28, 2009

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.