summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 26e47f2)
raw | patch | inline | side by side (parent: 26e47f2)
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | |
Mon, 27 Apr 2009 22:32:25 +0000 (00:32 +0200) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Wed, 29 Apr 2009 23:50:07 +0000 (16:50 -0700) |
"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>
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>
Documentation/config.txt | patch | blob | history | |
Makefile | patch | blob | history | |
cache.h | patch | blob | history | |
config.c | patch | blob | history | |
environment.c | patch | blob | history | |
sha1_file.c | patch | blob | history |
index d31adb6719eeff3009a2799b89d5ae6d343d3e88..5dcad94f841c395beb21961ebdacd341d76b25c9 100644 (file)
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
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.
diff --git a/Makefile b/Makefile
index 6b80f81d6005a5ef47cf29c1b92312a445ab8162..6e216436c36f4dcbe1121d02a291e9f568ca6071 100644 (file)
--- a/Makefile
+++ b/Makefile
# 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
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\"
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
index ff9e145be0a869546d309fb16db651f6b30a70e9..d0d48b4c88b8f359be7c271dbe7ef8f816999960 100644 (file)
--- a/cache.h
+++ b/cache.h
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;
diff --git a/config.c b/config.c
index 1750cfb85e34214533af13069853b7159cead2e8..563a91594dd7f0a801ade8b7ac4587aad481679e 100644 (file)
--- a/config.c
+++ b/config.c
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;
}
diff --git a/environment.c b/environment.c
index 10578d24d77de08bde2cbda7616d14f1705d490d..801a005ef1b23ef13cfa9ece676c550fe35dedc0 100644 (file)
--- a/environment.c
+++ b/environment.c
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;
diff --git a/sha1_file.c b/sha1_file.c
index 11969fc161bb56af410a76f0791dc9cb3bec0e1b..f708cf4f674fdf393044d6c36c7d97f1fa7dcd0c 100644 (file)
--- a/sha1_file.c
+++ b/sha1_file.c
{
int ret = 0;
- if (unreliable_hardlinks)
+ if (object_creation_mode == OBJECT_CREATION_USES_RENAMES)
goto try_rename;
else if (link(tmpfile, filename))
ret = errno;