Thread (269 messages) 269 messages, 9 authors, 2022-03-28

Re: [PATCH v5 23/30] t/helper/test-chmtime: skip directories on Windows

From: Tao Klerks <hidden>
Date: 2022-02-28 09:43:33

Random follow-up on this: in message/patch
76b6216281e3463821e650495f3090c677905f73.1646041236.git.gitgitgadget@gmail.com
I propose a fix to this issue. If accepted, that fix (and related
changes to rely
more heavily on chmtime in t7063) will cause *this* change to cause test
failures.

If that patch is accepted, this commit will simply need to be dropped
as far as I understand.



On Fri, Feb 11, 2022 at 9:57 PM Jeff Hostetler via GitGitGadget
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Jeff Hostetler <redacted>

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 <redacted>
---
 t/helper/test-chmtime.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
diff --git a/t/helper/test-chmtime.c b/t/helper/test-chmtime.c
index 524b55ca496..dc28890a183 100644
--- a/t/helper/test-chmtime.c
+++ b/t/helper/test-chmtime.c
@@ -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;
--
gitgitgadget
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help