fetch.c: do not call process_tree() from process_tree().
authorJunio C Hamano <junkio@cox.net>
Fri, 2 Jun 2006 22:23:47 +0000 (15:23 -0700)
committerJunio C Hamano <junkio@cox.net>
Fri, 2 Jun 2006 22:23:47 +0000 (15:23 -0700)
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>
fetch.c

diff --git a/fetch.c b/fetch.c
index ec2d8c3d9b3db7fff74af6c149db9d93c6882efd..107504b72b741bafa13b5b07009c522d0ee02db7 100644 (file)
--- a/fetch.c
+++ b/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 {
+                       if (tree)
+                               obj = &tree->object;
+               }
+               else {
                        struct blob *blob = lookup_blob(entry.sha1);
-                       process(&blob->object);
+                       if (blob)
+                               obj = &blob->object;
                }
+               if (!obj || process(obj))
+                       return -1;
        }
        free(tree->buffer);
        tree->buffer = NULL;