]> git.proxmox.com Git - libgit2.git/commitdiff
win32: don't fsync parent directories on Windows
authorEdward Thomson <ethomson@github.com>
Fri, 17 Feb 2017 16:48:03 +0000 (16:48 +0000)
committerEdward Thomson <ethomson@github.com>
Tue, 28 Feb 2017 13:29:01 +0000 (13:29 +0000)
Windows doesn't support it.

src/fileops.c
tests/pack/packbuilder.c
tests/refs/create.c

index 881d1bed4cf9f3fc9570459a999b3530c63fe704..6565eb4bd36bcd72f4ab312e508de44eed65eda8 100644 (file)
@@ -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)
index 96d643ab7b98bd7400d16fceb45d703b9765b7f4..5cdd9a8d2867d6fac02c88443f23573e1fdceb88 100644 (file)
@@ -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)
index fdbef9f32a80c8f5f8ff4f1d3e18fbeb2cec2b60..6265aee47de9320cf122fc3fc52c9ffa9168a40c 100644 (file)
@@ -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);
 }