Skip to content

Commit d040993

Browse files
j6tgitster
authored andcommitted
Windows: Fix intermittent failures of t7701
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 297f6a5 commit d040993

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

t/t7701-repack-unpack-unreachable.sh

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,10 @@ test_expect_success '-A with -d option leaves unreachable objects unpacked' '
5050

5151
compare_mtimes ()
5252
{
53-
perl -e 'my $reference = shift;
54-
foreach my $file (@ARGV) {
55-
exit(1) unless(-f $file && -M $file == -M $reference);
56-
}
57-
exit(0);
58-
' -- "$@"
53+
read tref rest &&
54+
while read t rest; do
55+
test "$tref" = "$t" || break
56+
done
5957
}
6058

6159
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' '
8785
tmppack=".git/objects/pack/tmp_pack" &&
8886
ln "$packfile" "$tmppack" &&
8987
git repack -A -l -d &&
90-
compare_mtimes "$tmppack" "$fsha1path" "$csha1path" "$tsha1path"
88+
test-chmtime -v +0 "$tmppack" "$fsha1path" "$csha1path" "$tsha1path" \
89+
> mtimes &&
90+
compare_mtimes < mtimes
9191
'
9292

9393
test_done

0 commit comments

Comments
 (0)