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:
Junio C Hamano 2006-06-02 15:23:47 -07:00
Родитель 4c068a9831
Коммит 6f9012b625
1 изменённых файлов: 11 добавлений и 4 удалений

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;