clone: support 'clone --shared' from a worktree
When worktree functionality was originally implemented, the possibility of 'clone --local' from within a worktree was overlooked, with the result that the location of the "objects" directory of the source repository was computed incorrectly, thus the objects could not be copied or hard-linked by the clone. This shortcoming was addressed by744e469755
(clone: allow --local from a linked checkout, 2015-09-28). However, the related case of 'clone --shared' (despite being handled only a few lines away from the 'clone --local' case) was not fixed by744e469755
, with a similar result of the "objects" directory location being incorrectly computed for insertion into the 'alternates' file. Fix this. Reported-by: Marc-André Lureau <marcandre.lureau@gmail.com> Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d78db8424e
commit
b3b05971c1
@ -423,7 +423,8 @@ static void clone_local(const char *src_repo, const char *dest_repo)
|
|||||||
{
|
{
|
||||||
if (option_shared) {
|
if (option_shared) {
|
||||||
struct strbuf alt = STRBUF_INIT;
|
struct strbuf alt = STRBUF_INIT;
|
||||||
strbuf_addf(&alt, "%s/objects", src_repo);
|
get_common_dir(&alt, src_repo);
|
||||||
|
strbuf_addstr(&alt, "/objects");
|
||||||
add_to_alternates_file(alt.buf);
|
add_to_alternates_file(alt.buf);
|
||||||
strbuf_release(&alt);
|
strbuf_release(&alt);
|
||||||
} else {
|
} else {
|
||||||
|
@ -198,4 +198,10 @@ test_expect_success 'local clone from linked checkout' '
|
|||||||
( cd here-clone && git fsck )
|
( cd here-clone && git fsck )
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'local clone --shared from linked checkout' '
|
||||||
|
git -C bare worktree add --detach ../baretree &&
|
||||||
|
git clone --local --shared baretree bare-clone &&
|
||||||
|
grep /bare/ bare-clone/.git/objects/info/alternates
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user