diff options
authorMatt Draisey <>2005-08-16 05:46:34 (GMT)
committerJunio C Hamano <>2005-08-17 01:33:51 (GMT)
commita7e66ae3f70e6e1ae08250d61ff8a968b714754d (patch)
parentabe0582207c72ec848e78707577c61a98f5c633d (diff)
[PATCH] Make do_each_ref() follow symlinks.
Because there is no reason not to, and this makes things a bit safer when running "git prune". [jc: I do not necessarily agree with the reasoning of the original author that it is a good way to keep "git prune" from stomping on objects to have a symlink that points at .git/refs of the repository A in the .git/refs of the repository B when repository A borrows object database from repository B. For one thing, the object database that everybody borrows objects from may not even have its own .git/refs hierarchy. Come to think of it, maybe we should disallow symlink inside .git/refs hierarchy; we update the files there by creat/rename pair, so having symlinks would not work anyway when you do anything that would update them.] Signed-off-by: Junio C Hamano <>
1 files changed, 1 insertions, 1 deletions
diff --git a/refs.c b/refs.c
index a5c8946..1610180 100644
--- a/refs.c
+++ b/refs.c
@@ -46,7 +46,7 @@ static int do_for_each_ref(const char *base, int (*fn)(const char *path, const u
if (namelen > 255)
memcpy(path + baselen, de->d_name, namelen+1);
- if (lstat(git_path("%s", path), &st) < 0)
+ if (stat(git_path("%s", path), &st) < 0)
if (S_ISDIR(st.st_mode)) {
retval = do_for_each_ref(path, fn);