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 <hordp@cisco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1c64b48e67
commit
03106768af
8
path.c
8
path.c
@ -295,6 +295,7 @@ const char *enter_repo(const char *path, int strict)
|
|||||||
static const char *suffix[] = {
|
static const char *suffix[] = {
|
||||||
".git/.git", "/.git", ".git", "", NULL,
|
".git/.git", "/.git", ".git", "", NULL,
|
||||||
};
|
};
|
||||||
|
const char *gitfile;
|
||||||
int len = strlen(path);
|
int len = strlen(path);
|
||||||
int i;
|
int i;
|
||||||
while ((1 < len) && (path[len-1] == '/'))
|
while ((1 < len) && (path[len-1] == '/'))
|
||||||
@ -329,7 +330,12 @@ const char *enter_repo(const char *path, int strict)
|
|||||||
break;
|
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;
|
return NULL;
|
||||||
path = validated_path;
|
path = validated_path;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user