зеркало из https://github.com/microsoft/git.git
create_symref: if symlink fails, fall back to writing a "symbolic ref"
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>
This commit is contained in:
Родитель
f89ad67fb0
Коммит
303958dc42
12
refs.c
12
refs.c
|
@ -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);
|
||||
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче