зеркало из 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)
|
if (obj->flags & UNINTERESTING)
|
||||||
return;
|
return;
|
||||||
obj->flags |= UNINTERESTING;
|
obj->flags |= UNINTERESTING;
|
||||||
|
if (!has_sha1_file(obj->sha1))
|
||||||
|
return;
|
||||||
if (parse_tree(tree) < 0)
|
if (parse_tree(tree) < 0)
|
||||||
die("bad tree %s", sha1_to_hex(obj->sha1));
|
die("bad tree %s", sha1_to_hex(obj->sha1));
|
||||||
entry = tree->entries;
|
entry = tree->entries;
|
||||||
|
@ -224,6 +226,17 @@ static void mark_parents_uninteresting(struct commit *commit)
|
||||||
while (parents) {
|
while (parents) {
|
||||||
struct commit *commit = parents->item;
|
struct commit *commit = parents->item;
|
||||||
commit->object.flags |= UNINTERESTING;
|
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;
|
parents = parents->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -371,6 +384,8 @@ static struct commit *get_commit_reference(const char *name, unsigned int flags)
|
||||||
object->flags |= flags;
|
object->flags |= flags;
|
||||||
if (parse_commit(commit) < 0)
|
if (parse_commit(commit) < 0)
|
||||||
die("unable to parse commit %s", name);
|
die("unable to parse commit %s", name);
|
||||||
|
if (flags & UNINTERESTING)
|
||||||
|
mark_parents_uninteresting(commit);
|
||||||
return commit;
|
return commit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче