- while ((p = *pp) != NULL) {
- if (p->parent == parent_rev)
- return 0;
- pp = &p->next;
- }
-
- p = malloc(sizeof(*p));
- p->parent = parent_rev;
- p->next = NULL;
- *pp = p;
- return 1;
-}
-
-static int parse_commit(unsigned char *sha1)
-{
- struct revision *rev = lookup_rev(sha1);
-
- if (!(rev->flags & SEEN)) {
- void *buffer;
- unsigned long size;
- char type[20];
- unsigned char parent[20];
-
- rev->flags |= SEEN;
- buffer = read_sha1_file(sha1, type, &size);
- if (!buffer || strcmp(type, "commit"))
- return -1;
- buffer += 46; /* "tree " + "hex sha1" + "\n" */
- while (!memcmp(buffer, "parent ", 7) && !get_sha1_hex(buffer+7, parent)) {
- add_relationship(rev, parent);
- parse_commit(parent);
- buffer += 48; /* "parent " + "hex sha1" + "\n" */