mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
fetch.c: do not call process_tree() from process_tree().
This function reads a freshly fetched tree object, and schedules the objects pointed by it for further fetching, so doing lookup_tree() and process_tree() recursively from there does not make much sense. We need to use process() on it to make sure we fetch it first, and leave the recursive processing to later stages. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
4c068a9831
commit
6f9012b625
15
fetch.c
15
fetch.c
@ -46,13 +46,20 @@ static int process_tree(struct tree *tree)
|
||||
desc.buf = tree->buffer;
|
||||
desc.size = tree->size;
|
||||
while (tree_entry(&desc, &entry)) {
|
||||
struct object *obj = NULL;
|
||||
|
||||
if (S_ISDIR(entry.mode)) {
|
||||
struct tree *tree = lookup_tree(entry.sha1);
|
||||
process_tree(tree);
|
||||
} else {
|
||||
struct blob *blob = lookup_blob(entry.sha1);
|
||||
process(&blob->object);
|
||||
if (tree)
|
||||
obj = &tree->object;
|
||||
}
|
||||
else {
|
||||
struct blob *blob = lookup_blob(entry.sha1);
|
||||
if (blob)
|
||||
obj = &blob->object;
|
||||
}
|
||||
if (!obj || process(obj))
|
||||
return -1;
|
||||
}
|
||||
free(tree->buffer);
|
||||
tree->buffer = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user