Add config option to enable 'fsync()' of object files
As explained in the documentation[*] this is totally useless on filesystems that do ordered/journalled data writes, but it can be a useful safety feature on filesystems like HFS+ that only journal the metadata, not the actual file contents. It defaults to off, although we could presumably in theory some day auto-enable it on a per-filesystem basis. [*] Yes, I updated the docs for the thing. Hell really _has_ frozen over, and the four horsemen are probably just beyond the horizon. EVERYBODY PANIC! Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1141f4925c
commit
aafe9fbaf4
@ -372,6 +372,14 @@ core.whitespace::
|
|||||||
does not trigger if the character before such a carriage-return
|
does not trigger if the character before such a carriage-return
|
||||||
is not a whitespace (not enabled by default).
|
is not a whitespace (not enabled by default).
|
||||||
|
|
||||||
|
core.fsyncobjectfiles::
|
||||||
|
This boolean will enable 'fsync()' when writing object files.
|
||||||
|
+
|
||||||
|
This is a total waste of time and effort on a filesystem that orders
|
||||||
|
data writes properly, but can be useful for filesystems that do not use
|
||||||
|
journalling (traditional UNIX filesystems) or that only journal metadata
|
||||||
|
and not file contents (OS X's HFS+, or Linux ext3 with "data=writeback").
|
||||||
|
|
||||||
alias.*::
|
alias.*::
|
||||||
Command aliases for the linkgit:git[1] command wrapper - e.g.
|
Command aliases for the linkgit:git[1] command wrapper - e.g.
|
||||||
after defining "alias.last = cat-file commit HEAD", the invocation
|
after defining "alias.last = cat-file commit HEAD", the invocation
|
||||||
|
1
cache.h
1
cache.h
@ -435,6 +435,7 @@ extern size_t packed_git_window_size;
|
|||||||
extern size_t packed_git_limit;
|
extern size_t packed_git_limit;
|
||||||
extern size_t delta_base_cache_limit;
|
extern size_t delta_base_cache_limit;
|
||||||
extern int auto_crlf;
|
extern int auto_crlf;
|
||||||
|
extern int fsync_object_files;
|
||||||
|
|
||||||
enum safe_crlf {
|
enum safe_crlf {
|
||||||
SAFE_CRLF_FALSE = 0,
|
SAFE_CRLF_FALSE = 0,
|
||||||
|
5
config.c
5
config.c
@ -460,6 +460,11 @@ static int git_default_core_config(const char *var, const char *value)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strcmp(var, "core.fsyncobjectfiles")) {
|
||||||
|
fsync_object_files = git_config_bool(var, value);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Add other config variables here and to Documentation/config.txt. */
|
/* Add other config variables here and to Documentation/config.txt. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ const char *apply_default_whitespace;
|
|||||||
int zlib_compression_level = Z_BEST_SPEED;
|
int zlib_compression_level = Z_BEST_SPEED;
|
||||||
int core_compression_level;
|
int core_compression_level;
|
||||||
int core_compression_seen;
|
int core_compression_seen;
|
||||||
|
int fsync_object_files;
|
||||||
size_t packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE;
|
size_t packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE;
|
||||||
size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT;
|
size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT;
|
||||||
size_t delta_base_cache_limit = 16 * 1024 * 1024;
|
size_t delta_base_cache_limit = 16 * 1024 * 1024;
|
||||||
|
@ -2083,7 +2083,8 @@ int hash_sha1_file(const void *buf, unsigned long len, const char *type,
|
|||||||
/* Finalize a file on disk, and close it. */
|
/* Finalize a file on disk, and close it. */
|
||||||
static void close_sha1_file(int fd)
|
static void close_sha1_file(int fd)
|
||||||
{
|
{
|
||||||
/* For safe-mode, we could fsync_or_die(fd, "sha1 file") here */
|
if (fsync_object_files)
|
||||||
|
fsync_or_die(fd, "sha1 file");
|
||||||
fchmod(fd, 0444);
|
fchmod(fd, 0444);
|
||||||
if (close(fd) != 0)
|
if (close(fd) != 0)
|
||||||
die("unable to write sha1 file");
|
die("unable to write sha1 file");
|
||||||
|
Loading…
Reference in New Issue
Block a user