[PATCH] Allow reading "symbolic refs" that point to other refs
This extends the ref reading to understand a "symbolic ref": a ref file that starts with "ref: " and points to another ref file, and thus introduces the notion of ref aliases. This is in preparation of allowing HEAD to eventually not be a symlink, but one of these symbolic refs instead. [jc: Linus originally required the prefix to be "ref: " five bytes and nothing else, but I changed it to allow and strip any number of leading whitespaces to match what update-ref.c does.] Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
9b143c6e15
commit
ca8db1424d
17
sha1_name.c
17
sha1_name.c
@ -119,21 +119,6 @@ static int get_short_sha1(const char *name, int len, unsigned char *sha1)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int get_sha1_file(const char *path, unsigned char *result)
|
||||
{
|
||||
char buffer[60];
|
||||
int fd = open(path, O_RDONLY);
|
||||
int len;
|
||||
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
len = read(fd, buffer, sizeof(buffer));
|
||||
close(fd);
|
||||
if (len < 40)
|
||||
return -1;
|
||||
return get_sha1_hex(buffer, result);
|
||||
}
|
||||
|
||||
static int get_sha1_basic(const char *str, int len, unsigned char *sha1)
|
||||
{
|
||||
static const char *prefix[] = {
|
||||
@ -150,7 +135,7 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1)
|
||||
|
||||
for (p = prefix; *p; p++) {
|
||||
char *pathname = git_path("%s/%.*s", *p, len, str);
|
||||
if (!get_sha1_file(pathname, sha1))
|
||||
if (!read_ref(pathname, sha1))
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user