From 03106768afa0be60346bb335f9fd11063622c91d Mon Sep 17 00:00:00 2001 From: Phil Hord Date: Tue, 4 Oct 2011 16:05:17 -0400 Subject: [PATCH] Learn to handle gitfiles in enter_repo The enter_repo() function is used to navigate into a .git directory. It knows how to find standard alternatives (DWIM) but it doesn't handle gitfiles created by git init --separate-git-dir. This means that git-fetch and others do not work with repositories using the separate-git-dir mechanism. Teach enter_repo() to deal with the gitfile mechanism by resolving the path to the redirected path and continuing tests on that path instead of the found file. Signed-off-by: Phil Hord Signed-off-by: Junio C Hamano --- path.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/path.c b/path.c index 01028f282..b6f71d108 100644 --- a/path.c +++ b/path.c @@ -295,6 +295,7 @@ const char *enter_repo(const char *path, int strict) static const char *suffix[] = { ".git/.git", "/.git", ".git", "", NULL, }; + const char *gitfile; int len = strlen(path); int i; while ((1 < len) && (path[len-1] == '/')) @@ -329,7 +330,12 @@ const char *enter_repo(const char *path, int strict) break; } } - if (!suffix[i] || chdir(used_path)) + if (!suffix[i]) + return NULL; + gitfile = read_gitfile(used_path) ; + if (gitfile) + strcpy(used_path, gitfile); + if (chdir(used_path)) return NULL; path = validated_path; } -- 2.30.2