mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-06 18:44:46 +00:00
git_filebuf: optionally fsync when committing
This commit is contained in:
parent
a4b5ac643c
commit
fc77891f63
@ -291,6 +291,9 @@ int git_filebuf_open_withsize(git_filebuf *file, const char *path, int flags, mo
|
|||||||
if (flags & GIT_FILEBUF_DO_NOT_BUFFER)
|
if (flags & GIT_FILEBUF_DO_NOT_BUFFER)
|
||||||
file->do_not_buffer = true;
|
file->do_not_buffer = true;
|
||||||
|
|
||||||
|
if (flags & GIT_FILEBUF_FSYNC)
|
||||||
|
file->do_fsync = true;
|
||||||
|
|
||||||
file->buf_size = size;
|
file->buf_size = size;
|
||||||
file->buf_pos = 0;
|
file->buf_pos = 0;
|
||||||
file->fd = -1;
|
file->fd = -1;
|
||||||
@ -425,6 +428,11 @@ int git_filebuf_commit(git_filebuf *file)
|
|||||||
|
|
||||||
file->fd_is_open = false;
|
file->fd_is_open = false;
|
||||||
|
|
||||||
|
if (file->do_fsync && p_fsync(file->fd) < 0) {
|
||||||
|
giterr_set(GITERR_OS, "failed to fsync '%s'", file->path_lock);
|
||||||
|
goto on_error;
|
||||||
|
}
|
||||||
|
|
||||||
if (p_close(file->fd) < 0) {
|
if (p_close(file->fd) < 0) {
|
||||||
giterr_set(GITERR_OS, "failed to close file at '%s'", file->path_lock);
|
giterr_set(GITERR_OS, "failed to close file at '%s'", file->path_lock);
|
||||||
goto on_error;
|
goto on_error;
|
||||||
|
@ -20,7 +20,8 @@
|
|||||||
#define GIT_FILEBUF_FORCE (1 << 3)
|
#define GIT_FILEBUF_FORCE (1 << 3)
|
||||||
#define GIT_FILEBUF_TEMPORARY (1 << 4)
|
#define GIT_FILEBUF_TEMPORARY (1 << 4)
|
||||||
#define GIT_FILEBUF_DO_NOT_BUFFER (1 << 5)
|
#define GIT_FILEBUF_DO_NOT_BUFFER (1 << 5)
|
||||||
#define GIT_FILEBUF_DEFLATE_SHIFT (6)
|
#define GIT_FILEBUF_FSYNC (1 << 6)
|
||||||
|
#define GIT_FILEBUF_DEFLATE_SHIFT (7)
|
||||||
|
|
||||||
#define GIT_FILELOCK_EXTENSION ".lock\0"
|
#define GIT_FILELOCK_EXTENSION ".lock\0"
|
||||||
#define GIT_FILELOCK_EXTLENGTH 6
|
#define GIT_FILELOCK_EXTLENGTH 6
|
||||||
@ -47,6 +48,7 @@ struct git_filebuf {
|
|||||||
bool created_lock;
|
bool created_lock;
|
||||||
bool did_rename;
|
bool did_rename;
|
||||||
bool do_not_buffer;
|
bool do_not_buffer;
|
||||||
|
bool do_fsync;
|
||||||
int last_error;
|
int last_error;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user