From: Junio C Hamano Date: Fri, 25 Mar 2022 23:38:24 +0000 (-0700) Subject: Merge branch 'ns/core-fsyncmethod' X-Git-Tag: v2.36.0-rc0~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eb804cd405618ef78b772072685c39392aea4ac1;p=thirdparty%2Fgit.git Merge branch 'ns/core-fsyncmethod' Replace core.fsyncObjectFiles with two new configuration variables, core.fsync and core.fsyncMethod. * ns/core-fsyncmethod: core.fsync: documentation and user-friendly aggregate options core.fsync: new option to harden the index core.fsync: add configuration parsing core.fsync: introduce granular fsync control infrastructure core.fsyncmethod: add writeout-only mode wrapper: make inclusion of Windows csprng header tightly scoped --- eb804cd405618ef78b772072685c39392aea4ac1 diff --cc git-compat-util.h index e50e2fafae,00356476a9..0892e209a2 --- a/git-compat-util.h +++ b/git-compat-util.h @@@ -1262,7 -1265,36 +1256,31 @@@ extern int BUG_exit_code __attribute__((format (printf, 3, 4))) NORETURN void BUG_fl(const char *file, int line, const char *fmt, ...); #define BUG(...) BUG_fl(__FILE__, __LINE__, __VA_ARGS__) -#else -__attribute__((format (printf, 1, 2))) NORETURN -void BUG(const char *fmt, ...); -#endif + #ifdef __APPLE__ + #define FSYNC_METHOD_DEFAULT FSYNC_METHOD_WRITEOUT_ONLY + #else + #define FSYNC_METHOD_DEFAULT FSYNC_METHOD_FSYNC + #endif + + enum fsync_action { + FSYNC_WRITEOUT_ONLY, + FSYNC_HARDWARE_FLUSH + }; + + /* + * Issues an fsync against the specified file according to the specified mode. + * + * FSYNC_WRITEOUT_ONLY attempts to use interfaces available on some operating + * systems to flush the OS cache without issuing a flush command to the storage + * controller. If those interfaces are unavailable, the function fails with + * ENOSYS. + * + * FSYNC_HARDWARE_FLUSH does an OS writeout and hardware flush to ensure that + * changes are durable. It is not expected to fail. + */ + int git_fsync(int fd, enum fsync_action action); + /* * Preserves errno, prints a message, but gives no warning for ENOENT. * Returns 0 on success, which includes trying to unlink an object that does