summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f89ad67)
raw | patch | inline | side by side (parent: f89ad67)
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | |
Tue, 25 Oct 2005 23:40:31 +0000 (01:40 +0200) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Wed, 26 Oct 2005 06:46:15 +0000 (23:46 -0700) |
There are filesystems out there which do not understand symlinks, even if
the OS is perfectly capable of writing them. So, do not fail right away,
but try to write a symbolic ref first. If that fails, you can die().
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
the OS is perfectly capable of writing them. So, do not fail right away,
but try to write a symbolic ref first. If that fails, you can die().
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
refs.c | patch | blob | history |
index 97506a4ebdfbd164abad6be76d7160db171d9148..a52b038eefdf22fce20d1a81180c97def0613cdb 100644 (file)
--- a/refs.c
+++ b/refs.c
int create_symref(const char *git_HEAD, const char *refs_heads_master)
{
-#if USE_SYMLINK_HEAD
- unlink(git_HEAD);
- return symlink(refs_heads_master, git_HEAD);
-#else
const char *lockpath;
char ref[1000];
int fd, len, written;
+#if USE_SYMLINK_HEAD
+ unlink(git_HEAD);
+ if (!symlink(refs_heads_master, git_HEAD))
+ return 0;
+ fprintf(stderr, "no symlink - falling back to symbolic ref\n");
+#endif
+
len = snprintf(ref, sizeof(ref), "ref: %s\n", refs_heads_master);
if (sizeof(ref) <= len) {
error("refname too long: %s", refs_heads_master);
return -3;
}
return 0;
-#endif
}
int read_ref(const char *filename, unsigned char *sha1)