From: Phil Hord Date: Tue, 4 Oct 2011 20:05:17 +0000 (-0400) Subject: Learn to handle gitfiles in enter_repo X-Git-Tag: v1.7.8-rc0~31^2~3 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/03106768afa0be60346bb335f9fd11063622c91d 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 --- diff --git a/path.c b/path.c index 01028f2826..b6f71d1086 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; }