From: Nguyễn Thái Ngọc Duy Date: Thu, 5 Dec 2013 13:02:31 +0000 (+0700) Subject: clone: prevent --reference to a shallow repository X-Git-Tag: v1.9-rc0~3^2~27 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=606e435a0a11634744282068174240caf2926fec;p=git clone: prevent --reference to a shallow repository If we borrow objects from another repository, we should also pay attention to their $GIT_DIR/shallow (and even info/grafts). But current alternates code does not. Reject alternate repos that are shallow because we do not do it right. In future the alternate code may be updated to check $GIT_DIR/shallow properly so that this restriction could be lifted. Signed-off-by: Nguyễn Thái Ngọc Duy Signed-off-by: Junio C Hamano --- diff --git a/builtin/clone.c b/builtin/clone.c index 874e0fd0b6..900f56476a 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -252,6 +252,12 @@ static int add_one_reference(struct string_list_item *item, void *cb_data) 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); + + if (!access(mkpath("%s/info/grafts", ref_git), F_OK)) + die(_("reference repository '%s' is grafted"), item->string); + strbuf_addf(&alternate, "%s/objects", ref_git); add_to_alternates_file(alternate.buf); strbuf_release(&alternate);