X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=refs.c;h=774f1630fe79b00780be91f7937eb75c16fd3b16;hb=ab90ea5d6e6ef358c8ee5869307c33a939be0e66;hp=7ccd721a4abdfec68fa9cab1f380569152fe61e9;hpb=f4b3a4c30b5ea3a5de2a2597a3c53266017d02ba;p=git.git diff --git a/refs.c b/refs.c index 7ccd721a..774f1630 100644 --- a/refs.c +++ b/refs.c @@ -3,10 +3,10 @@ #include -static int read_ref(const char *path, unsigned char *sha1) +static int read_ref(const char *refname, unsigned char *sha1) { int ret = -1; - int fd = open(path, O_RDONLY); + int fd = open(git_path(refname), O_RDONLY); if (fd >= 0) { char buffer[60]; @@ -20,7 +20,7 @@ static int read_ref(const char *path, unsigned char *sha1) static int do_for_each_ref(const char *base, int (*fn)(const char *path, const unsigned char *sha1)) { int retval = 0; - DIR *dir = opendir(base); + DIR *dir = opendir(git_path(base)); if (dir) { struct dirent *de; @@ -46,7 +46,7 @@ static int do_for_each_ref(const char *base, int (*fn)(const char *path, const u if (namelen > 255) continue; memcpy(path + baselen, de->d_name, namelen+1); - if (lstat(path, &st) < 0) + if (lstat(git_path(path), &st) < 0) continue; if (S_ISDIR(st.st_mode)) { retval = do_for_each_ref(path, fn); @@ -68,9 +68,17 @@ static int do_for_each_ref(const char *base, int (*fn)(const char *path, const u return retval; } +int head_ref(int (*fn)(const char *path, const unsigned char *sha1)) +{ + unsigned char sha1[20]; + if (!read_ref("HEAD", sha1)) + return fn("HEAD", sha1); + return 0; +} + int for_each_ref(int (*fn)(const char *path, const unsigned char *sha1)) { - return do_for_each_ref(get_refs_directory(), fn); + return do_for_each_ref("refs", fn); } static char *ref_file_name(const char *ref)