зеркало из https://github.com/microsoft/git.git
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.
This commit is contained in:
Родитель
167a4a3308
Коммит
454fbbcde3
15
rev-list.c
15
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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче