#!/bin/sh test_description='update-index refresh tests related to racy timestamps' TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh reset_files () { echo content >file && echo content >other && test_set_magic_mtime file && test_set_magic_mtime other } update_assert_changed () { test_set_magic_mtime .git/index && test_might_fail git update-index "$1" && ! test_is_magic_mtime .git/index } test_expect_success 'setup' ' reset_files && # we are calling reset_files() a couple of times during tests; # test-tool chmtime does not change the ctime; to not weaken # or even break our tests, disable ctime-checks entirely git config core.trustctime false && git add file other && git commit -m "initial import" ' test_expect_success '--refresh has no racy timestamps to fix' ' reset_files && # set the index time far enough to the future; # it must be at least 3 seconds for VFAT test_set_magic_mtime .git/index +60 && git update-index --refresh && test_is_magic_mtime .git/index +60 ' test_expect_success '--refresh should fix racy timestamp' ' reset_files && update_assert_changed --refresh ' test_expect_success '--really-refresh should fix racy timestamp' ' reset_files && update_assert_changed --really-refresh ' test_expect_success '--refresh should fix racy timestamp if other file needs update' ' reset_files && echo content2 >other && test_set_magic_mtime other && update_assert_changed --refresh ' test_expect_success '--refresh should fix racy timestamp if racy file needs update' ' reset_files && echo content2 >file && test_set_magic_mtime file && update_assert_changed --refresh ' test_done