Skip to content

Commit

Permalink
Rename core.unreliableHardlinks to core.createObject
Browse files Browse the repository at this point in the history
"Unreliable hardlinks" is a misleading description for what is happening.
So rename it to something less misleading.

Suggested by Linus Torvalds.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
dscho authored and gitster committed Apr 29, 2009
1 parent 26e47f2 commit 348df16
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 16 deletions.
12 changes: 8 additions & 4 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -429,10 +429,14 @@ relatively high IO latencies. With this set to 'true', git will do the
index comparison to the filesystem data in parallel, allowing
overlapping IO's.

core.unreliableHardlinks::
Some filesystem drivers cannot properly handle hardlinking a file
and deleting the source right away. In such a case, you need to
set this config variable to 'true'.
core.createObject::
You can set this to 'link', in which case a hardlink followed by
a delete of the source are used to make sure that object creation
will not overwrite existing objects.
+
On some file system/operating system combinations, this is unreliable.
Set this config setting to 'rename' there; However, This will remove the
check that makes sure that existing object files will not get overwritten.

alias.*::
Command aliases for the linkgit:git[1] command wrapper - e.g.
Expand Down
10 changes: 5 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ all::
# information on a not yet closed file that lstat would return for the same
# file after it was closed.
#
# Define UNRELIABLE_HARDLINKS if your operating systems has problems when
# hardlinking a file to another name and unlinking the original file right
# Define OBJECT_CREATION_USES_RENAMES if your operating systems has problems
# when hardlinking a file to another name and unlinking the original file right
# away (some NTFS drivers seem to zero the contents in that scenario).

GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
Expand Down Expand Up @@ -837,7 +837,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
NO_NSEC = YesPlease
USE_WIN32_MMAP = YesPlease
UNRELIABLE_FSTAT = UnfortunatelyYes
UNRELIABLE_HARDLINKS = UnfortunatelySometimes
OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/regex -Icompat/fnmatch
COMPAT_CFLAGS += -DSNPRINTF_SIZE_CORR=1
COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
Expand Down Expand Up @@ -1021,8 +1021,8 @@ else
COMPAT_OBJS += compat/win32mmap.o
endif
endif
ifdef UNRELIABLE_HARDLINKS
COMPAT_CFLAGS += -DUNRELIABLE_HARDLINKS=1
ifdef OBJECT_CREATION_USES_RENAMES
COMPAT_CFLAGS += -DOBJECT_CREATION_MODE=1
endif
ifdef NO_PREAD
COMPAT_CFLAGS += -DNO_PREAD
Expand Down
7 changes: 6 additions & 1 deletion cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,12 @@ extern enum branch_track git_branch_track;
extern enum rebase_setup_type autorebase;
extern enum push_default_type push_default;

extern int unreliable_hardlinks;
enum object_creation_mode {
OBJECT_CREATION_USES_HARDLINKS = 0,
OBJECT_CREATION_USES_RENAMES = 1,
};

extern enum object_creation_mode object_creation_mode;

#define GIT_REPO_VERSION 0
extern int repository_format_version;
Expand Down
9 changes: 7 additions & 2 deletions config.c
Original file line number Diff line number Diff line change
Expand Up @@ -495,8 +495,13 @@ static int git_default_core_config(const char *var, const char *value)
return 0;
}

if (!strcmp(var, "core.unreliablehardlinks")) {
unreliable_hardlinks = git_config_bool(var, value);
if (!strcmp(var, "core.createobject")) {
if (!strcmp(value, "rename"))
object_creation_mode = OBJECT_CREATION_USES_RENAMES;
else if (!strcmp(value, "link"))
object_creation_mode = OBJECT_CREATION_USES_HARDLINKS;
else
die("Invalid mode for object creation: %s", value);
return 0;
}

Expand Down
6 changes: 3 additions & 3 deletions environment.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ unsigned whitespace_rule_cfg = WS_DEFAULT_RULE;
enum branch_track git_branch_track = BRANCH_TRACK_REMOTE;
enum rebase_setup_type autorebase = AUTOREBASE_NEVER;
enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED;
#ifndef UNRELIABLE_HARDLINKS
#define UNRELIABLE_HARDLINKS 0
#ifndef OBJECT_CREATION_MODE
#define OBJECT_CREATION_MODE OBJECT_CREATION_USES_HARDLINKS
#endif
int unreliable_hardlinks = UNRELIABLE_HARDLINKS;
enum object_creation_mode object_creation_mode = OBJECT_CREATION_MODE;

/* Parallel index stat data preload? */
int core_preload_index = 0;
Expand Down
2 changes: 1 addition & 1 deletion sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -2225,7 +2225,7 @@ int move_temp_to_file(const char *tmpfile, const char *filename)
{
int ret = 0;

if (unreliable_hardlinks)
if (object_creation_mode == OBJECT_CREATION_USES_RENAMES)
goto try_rename;
else if (link(tmpfile, filename))
ret = errno;
Expand Down

0 comments on commit 348df16

Please sign in to comment.