#include "cache.h"
#include "commit.h"
+#include "tag.h"
static int is_shallow = -1;
return register_commit_graft(graft, 0);
}
-int is_repository_shallow()
+int is_repository_shallow(void)
{
FILE *fp;
char buf[1024];
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;
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 *)
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) {
commit = p->item;
cur_depth = *(int *)commit->util;
}
- } else
+ } else {
commit_list_insert(p->item, &result);
+ p->item->object.flags |= shallow_flag;
+ }
}
}
return result;
}
-