clone: allow to clone from .git file
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
13d6ec9133
commit
9b0ebc722c
@ -101,9 +101,26 @@ static char *get_repo_path(const char *repo, int *is_bundle)
|
||||
for (i = 0; i < ARRAY_SIZE(suffix); i++) {
|
||||
const char *path;
|
||||
path = mkpath("%s%s", repo, suffix[i]);
|
||||
if (is_directory(path)) {
|
||||
if (stat(path, &st))
|
||||
continue;
|
||||
if (S_ISDIR(st.st_mode)) {
|
||||
*is_bundle = 0;
|
||||
return xstrdup(absolute_path(path));
|
||||
} else if (S_ISREG(st.st_mode) && st.st_size > 8) {
|
||||
/* Is it a "gitfile"? */
|
||||
char signature[8];
|
||||
int len, fd = open(path, O_RDONLY);
|
||||
if (fd < 0)
|
||||
continue;
|
||||
len = read_in_full(fd, signature, 8);
|
||||
close(fd);
|
||||
if (len != 8 || strncmp(signature, "gitdir: ", 8))
|
||||
continue;
|
||||
path = read_gitfile(path);
|
||||
if (path) {
|
||||
*is_bundle = 0;
|
||||
return xstrdup(absolute_path(path));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -202,6 +202,10 @@ test_expect_success 'clone separate gitdir: output' '
|
||||
test_cmp expected dst/.git
|
||||
'
|
||||
|
||||
test_expect_success 'clone from .git file' '
|
||||
git clone dst/.git dst2
|
||||
'
|
||||
|
||||
test_expect_success 'clone separate gitdir where target already exists' '
|
||||
rm -rf dst &&
|
||||
test_must_fail git clone --separate-git-dir realgitdir src dst
|
||||
|
Loading…
Reference in New Issue
Block a user