diff options
Diffstat (limited to 'builtin/clone.c')
| -rw-r--r-- | builtin/clone.c | 13 | 
1 files changed, 10 insertions, 3 deletions
| diff --git a/builtin/clone.c b/builtin/clone.c index 578da85254..3e14491a34 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -294,9 +294,14 @@ static int add_one_reference(struct string_list_item *item, void *cb_data)  		char *ref_git_git = mkpathdup("%s/.git", ref_git);  		free(ref_git);  		ref_git = ref_git_git; -	} else if (!is_directory(mkpath("%s/objects", ref_git))) +	} else if (!is_directory(mkpath("%s/objects", ref_git))) { +		struct strbuf sb = STRBUF_INIT; +		if (get_common_dir(&sb, ref_git)) +			die(_("reference repository '%s' as a linked checkout is not supported yet."), +			    item->string);  		die(_("reference repository '%s' is not a local repository."),  		    item->string); +	}  	if (!access(mkpath("%s/shallow", ref_git), F_OK))  		die(_("reference repository '%s' is shallow"), item->string); @@ -424,8 +429,10 @@ static void clone_local(const char *src_repo, const char *dest_repo)  	} else {  		struct strbuf src = STRBUF_INIT;  		struct strbuf dest = STRBUF_INIT; -		strbuf_addf(&src, "%s/objects", src_repo); -		strbuf_addf(&dest, "%s/objects", dest_repo); +		get_common_dir(&src, src_repo); +		get_common_dir(&dest, dest_repo); +		strbuf_addstr(&src, "/objects"); +		strbuf_addstr(&dest, "/objects");  		copy_or_link_directory(&src, &dest, src_repo, src.len);  		strbuf_release(&src);  		strbuf_release(&dest); | 
