summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 167a4a3)
raw | patch | inline | side by side (parent: 167a4a3)
author | Linus Torvalds <torvalds@g5.osdl.org> | |
Sun, 10 Jul 2005 22:09:46 +0000 (15:09 -0700) | ||
committer | Linus Torvalds <torvalds@g5.osdl.org> | |
Sun, 10 Jul 2005 22:09:46 +0000 (15:09 -0700) |
We still want the "top-most" uninteresting object to exist, so that we
know that we have reached it.
know that we have reached it.
rev-list.c | patch | blob | history |
diff --git a/rev-list.c b/rev-list.c
index dfa0933825c5afdcb35e15ee739ba12530fcc9ff..0c0bdc2fd87cb99aa988f2ed68621aaa1a392013 100644 (file)
--- a/rev-list.c
+++ b/rev-list.c
if (obj->flags & UNINTERESTING)
return;
obj->flags |= UNINTERESTING;
+ if (!has_sha1_file(obj->sha1))
+ return;
if (parse_tree(tree) < 0)
die("bad tree %s", sha1_to_hex(obj->sha1));
entry = tree->entries;
while (parents) {
struct commit *commit = parents->item;
commit->object.flags |= UNINTERESTING;
+
+ /*
+ * A missing commit is ok iff its parent is marked
+ * uninteresting.
+ *
+ * We just mark such a thing parsed, so that when
+ * it is popped next time around, we won't be trying
+ * to parse it and get an error.
+ */
+ if (!has_sha1_file(commit->object.sha1))
+ commit->object.parsed = 1;
parents = parents->next;
}
}
@@ -371,6 +384,8 @@ static struct commit *get_commit_reference(const char *name, unsigned int flags)
object->flags |= flags;
if (parse_commit(commit) < 0)
die("unable to parse commit %s", name);
+ if (flags & UNINTERESTING)
+ mark_parents_uninteresting(commit);
return commit;
}