X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=shallow.c;h=4d90eda19efe0a80c1cb39e8897ab3ed5e6fcf56;hb=48c250a121a425a1860226b6a7061aecfbab5246;hp=3cf2127134787586ac30e16764f6b639fa315a59;hpb=ed09aef06fda2ba06a7412e3fa43ab1c3449f723;p=git.git diff --git a/shallow.c b/shallow.c index 3cf212713..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]; @@ -41,7 +42,8 @@ int is_repository_shallow() return is_shallow; } -struct commit_list *get_shallow_commits(struct object_array *heads, int depth) +struct commit_list *get_shallow_commits(struct object_array *heads, int depth, + int shallow_flag, int not_shallow_flag) { int i = 0, cur_depth = 0; struct commit_list *result = NULL; @@ -53,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 *) @@ -66,7 +70,9 @@ 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) { if (!p->item->util) { @@ -87,11 +93,12 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth) commit = p->item; cur_depth = *(int *)commit->util; } - } else + } else { commit_list_insert(p->item, &result); + p->item->object.flags |= shallow_flag; + } } } return result; } -