threads / patch / 2232

patch, 4 partscreate_symref: if symlink fails, fall back to writing a "symbolic ref"

Subject: [PATCH 2/4] create_symref: if symlink fails, fall back to writing a "symbolic ref"

## tl;dr

One message between Oct 25, 2005 and Oct 25, 2005. Diffs are folded; open one to read it.

replies: 0people: 1as markdown or json

Johannes Schindelin· Oct 25, 2005, 23:40 UTC · lore

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>
---
 refs.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

applies-to: ccd3f478f6bdf8174f7d5d24d54434e66fa9068e 2e920b7169ad9661385ba02412cdbdc4e69e00a1

Show changes to refs.c +6 −5
diff --git a/refs.c b/refs.c
index 97506a4..8b544e0 100644
--- a/refs.c
+++ b/refs.c
@@ -116,14 +116,16 @@ const char *resolve_ref(const char *path
 
 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;
+#endif
+
 	len = snprintf(ref, sizeof(ref), "ref: %s\n", refs_heads_master);
 	if (sizeof(ref) <= len) {
 		error("refname too long: %s", refs_heads_master);
@@ -144,7 +146,6 @@ int create_symref(const char *git_HEAD, 
 		return -3;
 	}
 	return 0;
-#endif
 }
 
 int read_ref(const char *filename, unsigned char *sha1)
---
0.99.8.GIT

← back to recent threads