X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=shallow.c;h=4d90eda19efe0a80c1cb39e8897ab3ed5e6fcf56;hb=48c250a121a425a1860226b6a7061aecfbab5246;hp=58a7b20d793cbc71ab924d5f5aedf28cd01ca32a;hpb=f53514bc2d82f2f5cc7b447575e74aa266ed46f0;p=git.git diff --git a/shallow.c b/shallow.c index 58a7b20d7..4d90eda19 100644 --- a/shallow.c +++ b/shallow.c @@ -1,5 +1,6 @@ #include "cache.h" #include "commit.h" +#include "tag.h" static int is_shallow = -1; @@ -16,7 +17,7 @@ int register_shallow(const unsigned char *sha1) return register_commit_graft(graft, 0); } -int is_repository_shallow() +int is_repository_shallow(void) { FILE *fp; char buf[1024]; @@ -54,12 +55,14 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth, if (!commit) { if (i < heads->nr) { commit = (struct commit *) - heads->objects[i++].item; - if (commit->object.type != OBJ_COMMIT) { + deref_tag(heads->objects[i++].item, NULL, 0); + if (!commit || commit->object.type != OBJ_COMMIT) { commit = NULL; continue; } - commit->util = xcalloc(1, sizeof(int)); + if (!commit->util) + commit->util = xmalloc(sizeof(int)); + *(int *)commit->util = 0; cur_depth = 0; } else { commit = (struct commit *) @@ -67,7 +70,8 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth, cur_depth = *(int *)commit->util; } } - parse_commit(commit); + if (parse_commit(commit)) + die("invalid commit"); commit->object.flags |= not_shallow_flag; cur_depth++; for (p = commit->parents, commit = NULL; p; p = p->next) { @@ -98,4 +102,3 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth, return result; } -