win32: don't fsync parent directories on Windows Windows doesn't support it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
diff --git a/src/fileops.c b/src/fileops.c
index 881d1be..6565eb4 100644
--- a/src/fileops.c
+++ b/src/fileops.c
@@ -1127,6 +1127,10 @@ void git_futils_filestamp_set_from_stat(
int git_futils_fsync_dir(const char *path)
{
+#ifdef GIT_WIN32
+ GIT_UNUSED(path);
+ return 0;
+#else
int fd, error = -1;
if ((fd = p_open(path, O_RDONLY)) < 0) {
@@ -1139,6 +1143,7 @@ int git_futils_fsync_dir(const char *path)
p_close(fd);
return error;
+#endif
}
int git_futils_fsync_parent(const char *path)
diff --git a/tests/pack/packbuilder.c b/tests/pack/packbuilder.c
index 96d643a..5cdd9a8 100644
--- a/tests/pack/packbuilder.c
+++ b/tests/pack/packbuilder.c
@@ -200,11 +200,20 @@ void test_pack_packbuilder__does_not_fsync_by_default(void)
void test_pack_packbuilder__fsync_when_asked(void)
{
+ /* We fsync the packfile and index. On non-Windows, we also fsync
+ * the parent directories.
+ */
+#ifdef GIT_WIN32
+ int expected = 2;
+#else
+ int expected = 4;
+#endif
+
cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_SYNCHRONOUS_OBJECT_CREATION, 1));
p_fsync__cnt = 0;
seed_packbuilder();
git_packbuilder_write(_packbuilder, ".", 0666, NULL, NULL);
- cl_assert_equal_sz(4, p_fsync__cnt);
+ cl_assert_equal_sz(expected, p_fsync__cnt);
}
static int foreach_cb(void *buf, size_t len, void *payload)
diff --git a/tests/refs/create.c b/tests/refs/create.c
index fdbef9f..6265aee 100644
--- a/tests/refs/create.c
+++ b/tests/refs/create.c
@@ -323,13 +323,24 @@ void test_refs_create__fsyncs_when_requested(void)
git_refdb *refdb;
git_oid id;
+ /* Creating a loose ref involves fsync'ing the reference, the
+ * reflog and (on non-Windows) the containing directories.
+ * Creating a packed ref involves fsync'ing the packed ref file
+ * and (on non-Windows) the containing directory.
+ */
+#ifdef GIT_WIN32
+ int expected_create = 2, expected_compress = 1;
+#else
+ int expected_create = 4, expected_compress = 2;
+#endif
+
cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_SYNCHRONOUS_OBJECT_CREATION, 1));
p_fsync__cnt = 0;
git_oid_fromstr(&id, current_master_tip);
cl_git_pass(git_reference_create(&ref, g_repo, "refs/heads/fsync_test", &id, 0, "log message"));
git_reference_free(ref);
- cl_assert_equal_i(4, p_fsync__cnt);
+ cl_assert_equal_i(expected_create, p_fsync__cnt);
p_fsync__cnt = 0;
@@ -337,5 +348,5 @@ void test_refs_create__fsyncs_when_requested(void)
cl_git_pass(git_refdb_compress(refdb));
git_refdb_free(refdb);
- cl_assert_equal_i(2, p_fsync__cnt);
+ cl_assert_equal_i(expected_compress, p_fsync__cnt);
}