]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t/helper/test-chmtime: skip directories on Windows
authorJeff Hostetler <jeffhost@microsoft.com>
Fri, 25 Mar 2022 18:03:06 +0000 (18:03 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 25 Mar 2022 23:04:17 +0000 (16:04 -0700)
Teach `test-tool.exe chmtime` to ignore errors when setting the mtime
on a directory on Windows.

NEEDSWORK: The Windows version of `utime()` (aka `mingw_utime()`) does
not properly handle directories because it uses `_wopen()`.  It should
be converted to using `CreateFileW()` and backup semantics at a minimum.
Since I'm already in the middle of a large patch series, I did not want
to destabilize other callers of `utime()` right now.  The problem has
only been observed in the t/perf/p7519 test when the test repo contains
an empty directory on disk.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/helper/test-chmtime.c

index 524b55ca496cab66031eb21f83548a2817280ee6..dc28890a183f1d123b3356131e90fd588aa5a439 100644 (file)
@@ -134,6 +134,21 @@ int cmd__chmtime(int argc, const char **argv)
                }
 
                if (utb.modtime != sb.st_mtime && utime(argv[i], &utb) < 0) {
+#ifdef GIT_WINDOWS_NATIVE
+                       if (S_ISDIR(sb.st_mode)) {
+                               /*
+                                * NEEDSWORK: The Windows version of `utime()`
+                                * (aka `mingw_utime()`) does not correctly
+                                * handle directory arguments, since it uses
+                                * `_wopen()`.  Ignore it for now since this
+                                * is just a test.
+                                */
+                               fprintf(stderr,
+                                       ("Failed to modify time on directory %s. "
+                                        "Skipping\n"), argv[i]);
+                               continue;
+                       }
+#endif
                        fprintf(stderr, "Failed to modify time on %s: %s\n",
                                argv[i], strerror(errno));
                        return 1;