Replace sleep calls with backdating of filesystem changes, but first fix the test-tool chmtime functionality to work for directories in Windows. In this third version, a bug with inaccessible-path-handling that Jeff found is fixed, and a relative-path-avoiding strategy that had been added in t7073 is simplified out after Junio's comments revealed it was misguided. Tao Klerks (2): t/helper/test-chmtime: update mingw to support chmtime on directories t7063: mtime-mangling instead of delays in untracked cache testing compat/mingw.c | 23 +++++++++++++++++++---- t/t7063-status-untracked-cache.sh | 21 +++++++++------------ 2 files changed, 28 insertions(+), 16 deletions(-) base-commit: 4c53a8c20f8984adb226293a3ffd7b88c3f4ac1a Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1166%2FTaoK%2Ftaok-untracked-cache-testing-remote-waits-v3 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1166/TaoK/taok-untracked-cache-testing-remote-waits-v3 Pull-Request: https://github.com/gitgitgadget/git/pull/1166 Range-diff vs v2: 1: 7cdef0ad5fb ! 1: 052b3dd9bba t/helper/test-chmtime: update mingw to support chmtime on directories @@ compat/mingw.c: int mingw_utime (const char *file_name, const struct utimbuf *ti - if ((fh = _wopen(wfilename, O_RDWR | O_BINARY)) < 0) { + osfilehandle = CreateFileW(wfilename, -+ 0x100 /*FILE_WRITE_ATTRIBUTES*/, ++ FILE_WRITE_ATTRIBUTES, + 0 /*FileShare.None*/, + NULL, + OPEN_EXISTING, -+ attrs & FILE_ATTRIBUTE_DIRECTORY ? ++ (attrs != INVALID_FILE_ATTRIBUTES && ++ (attrs & FILE_ATTRIBUTE_DIRECTORY)) ? + FILE_FLAG_BACKUP_SEMANTICS : 0, + NULL); + if (osfilehandle == INVALID_HANDLE_VALUE) { @@ compat/mingw.c: int mingw_utime (const char *file_name, const struct utimbuf *ti aft = mft; } - if (!SetFileTime((HANDLE)_get_osfhandle(fh), NULL, &aft, &mft)) { ++ + if (!SetFileTime(osfilehandle, NULL, &aft, &mft)) { errno = EINVAL; rc = -1; 2: 3e3c9c7faac ! 2: dceb2857609 t7063: mtime-mangling instead of delays in untracked cache testing @@ Commit message Signed-off-by: Tao Klerks <tao@xxxxxxxxxx> ## t/t7063-status-untracked-cache.sh ## -@@ t/t7063-status-untracked-cache.sh: sync_mtime () { - find . -type d -exec ls -ld {} + >/dev/null - } - -+chmtime_worktree_root () { -+ # chmtime doesnt handle relative paths on windows, so need -+ # to "hardcode" a reference to the worktree folder name. -+ test-tool -C .. chmtime $1 worktree -+} -+ - avoid_racy() { - sleep 1 - } @@ t/t7063-status-untracked-cache.sh: test_expect_success 'setup' ' cd worktree && mkdir done dtwo dthree && touch one two three done/one dtwo/two dthree/three && + test-tool chmtime =-300 one two three done/one dtwo/two dthree/three && + test-tool chmtime =-300 done dtwo dthree && -+ chmtime_worktree_root =-300 && ++ test-tool chmtime =-300 . && git add one two done/one && : >.git/info/exclude && git update-index --untracked-cache && @@ t/t7063-status-untracked-cache.sh: test_expect_success 'create/modify files, som - rm base && + test-tool chmtime =-180 done/two done/three done/four done/five done && + # we need to ensure that the root dir is touched (in the past); -+ chmtime_worktree_root =-180 && ++ test-tool chmtime =-180 . && sync_mtime ' -- gitgitgadget