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:

committed by
Junio C Hamano

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++) {
|
for (i = 0; i < ARRAY_SIZE(suffix); i++) {
|
||||||
const char *path;
|
const char *path;
|
||||||
path = mkpath("%s%s", repo, suffix[i]);
|
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;
|
*is_bundle = 0;
|
||||||
return xstrdup(absolute_path(path));
|
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_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' '
|
test_expect_success 'clone separate gitdir where target already exists' '
|
||||||
rm -rf dst &&
|
rm -rf dst &&
|
||||||
test_must_fail git clone --separate-git-dir realgitdir src dst
|
test_must_fail git clone --separate-git-dir realgitdir src dst
|
||||||
|
Reference in New Issue
Block a user