diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-10 15:09:46 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-10 15:09:46 -0700 |
commit | 454fbbcde3beb5eb36a4554e5b7074f8d501a6f1 (patch) | |
tree | 4049b0a8cba4bd0d4bb436bc1641ce54b4d61ac3 /rev-list.c | |
parent | 167a4a3308f4a1606e268c2204c98d6999046ae0 (diff) | |
download | git-454fbbcde3beb5eb36a4554e5b7074f8d501a6f1.tar.gz git-454fbbcde3beb5eb36a4554e5b7074f8d501a6f1.tar.xz |
git-rev-list: allow missing objects when the parent is marked UNINTERESTING
We still want the "top-most" uninteresting object to exist, so that we
know that we have reached it.
Diffstat (limited to 'rev-list.c')
-rw-r--r-- | rev-list.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/rev-list.c b/rev-list.c index dfa093382..0c0bdc2fd 100644 --- a/rev-list.c +++ b/rev-list.c @@ -203,6 +203,8 @@ static void mark_tree_uninteresting(struct tree *tree) 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; @@ -224,6 +226,17 @@ static void mark_parents_uninteresting(struct commit *commit) 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; } |