summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fetch.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/fetch.c b/fetch.c
index 1291bbac94..e040ef97b6 100644
--- a/fetch.c
+++ b/fetch.c
@@ -47,13 +47,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;