Skip to content

Commit

Permalink
create_symref: if symlink fails, fall back to writing a "symbolic ref"
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Schindelin authored and Junio C Hamano committed Oct 26, 2005
1 parent f89ad67 commit 303958d
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,14 +116,17 @@ const char *resolve_ref(const char *path, unsigned char *sha1, int reading)

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);
Expand All @@ -144,7 +147,6 @@ int create_symref(const char *git_HEAD, const char *refs_heads_master)
return -3;
}
return 0;
#endif
}

int read_ref(const char *filename, unsigned char *sha1)
Expand Down

0 comments on commit 303958d

Please sign in to comment.