struct commit *ret = malloc(sizeof(struct commit));
memset(ret, 0, sizeof(struct commit));
created_object(sha1, &ret->object);
+ ret->object.type = commit_type;
return ret;
}
if (obj->parsed && obj->type != commit_type) {
if (strcmp(type, commit_type))
return error("Object %s not a commit",
sha1_to_hex(item->object.sha1));
- item->object.type = commit_type;
get_sha1_hex(bufptr + 5, parent);
item->tree = lookup_tree(parent);
add_ref(&item->object, &item->tree->object);
*list = ret;
}
-struct commit *pop_most_recent_commit(struct commit_list **list)
+struct commit *pop_most_recent_commit(struct commit_list **list,
+ unsigned int mark)
{
struct commit *ret = (*list)->item;
struct commit_list *parents = ret->parents;
free(old);
while (parents) {
- parse_commit(parents->item);
- insert_by_date(list, parents->item);
+ struct commit *commit = parents->item;
+ parse_commit(commit);
+ if (!(commit->object.flags & mark)) {
+ commit->object.flags |= mark;
+ insert_by_date(list, commit);
+ }
parents = parents->next;
}
return ret;