summaryrefslogtreecommitdiff
path: root/builtin/clone.c
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2013-12-05 13:02:31 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-12-11 00:14:16 (GMT)
commit606e435a0a11634744282068174240caf2926fec (patch)
tree2de854c037ffcfd5fd82a6c655f6e129ebcaa9e8 /builtin/clone.c
parent0b854bcc2a3b34c09835393234cd807fde08722f (diff)
downloadgit-606e435a0a11634744282068174240caf2926fec.zip
git-606e435a0a11634744282068174240caf2926fec.tar.gz
git-606e435a0a11634744282068174240caf2926fec.tar.bz2
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 <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/clone.c')
-rw-r--r--builtin/clone.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/builtin/clone.c b/builtin/clone.c
index 874e0fd..900f564 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);