summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Linus Torvalds <torvalds@g5.osdl.org>2005-07-08 13:56:05 -0700
committerLibravatar Linus Torvalds <torvalds@g5.osdl.org>2005-07-08 13:56:05 -0700
commit99a0a6e09f2c9737d1155f25e8cd4c3bc512a8ea (patch)
tree4314a022fce7bee0e8e849c9e0271d52ddd1a07d
parent[PATCH] Use sq_quote() to properly quote the parameter to call shell. (diff)
downloadtgif-99a0a6e09f2c9737d1155f25e8cd4c3bc512a8ea.tar.xz
Make "for_each_ref()" always use the "canonical" refname.
It always uses a git-relative pathname, ie "refs/heads/master" instead of ".git/refs/heads/master" or whatever your GIT_DIR might be. This way when we send refs back-and-forth between repositories, there's never any question about GIT_DIR on either side.
-rw-r--r--refs.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/refs.c b/refs.c
index 09c9f904f0..774f1630fe 100644
--- a/refs.c
+++ b/refs.c
@@ -3,10 +3,10 @@
#include <errno.h>
-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);
@@ -71,15 +71,14 @@ static int do_for_each_ref(const char *base, int (*fn)(const char *path, const u
int head_ref(int (*fn)(const char *path, const unsigned char *sha1))
{
unsigned char sha1[20];
- const char *headpath = git_path("HEAD");
- if (!read_ref(headpath, sha1))
- return fn(headpath, sha1);
+ 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)