3 test_description
='update-index refresh tests related to racy timestamps'
5 TEST_PASSES_SANITIZE_LEAK
=true
10 echo content
>other
&&
11 test_set_magic_mtime
file &&
12 test_set_magic_mtime other
15 update_assert_changed
() {
16 test_set_magic_mtime .git
/index
&&
17 test_might_fail git update-index
"$1" &&
18 ! test_is_magic_mtime .git
/index
21 test_expect_success
'setup' '
23 # we are calling reset_files() a couple of times during tests;
24 # test-tool chmtime does not change the ctime; to not weaken
25 # or even break our tests, disable ctime-checks entirely
26 git config core.trustctime false &&
28 git commit -m "initial import"
31 test_expect_success
'--refresh has no racy timestamps to fix' '
33 # set the index time far enough to the future;
34 # it must be at least 3 seconds for VFAT
35 test_set_magic_mtime .git/index +60 &&
36 git update-index --refresh &&
37 test_is_magic_mtime .git/index +60
40 test_expect_success
'--refresh should fix racy timestamp' '
42 update_assert_changed --refresh
45 test_expect_success
'--really-refresh should fix racy timestamp' '
47 update_assert_changed --really-refresh
50 test_expect_success
'--refresh should fix racy timestamp if other file needs update' '
52 echo content2 >other &&
53 test_set_magic_mtime other &&
54 update_assert_changed --refresh
57 test_expect_success
'--refresh should fix racy timestamp if racy file needs update' '
59 echo content2 >file &&
60 test_set_magic_mtime file &&
61 update_assert_changed --refresh