summaryrefslogtreecommitdiff
path: root/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'tree.c')
-rw-r--r--tree.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/tree.c b/tree.c
index 58ebfce1bc..f79ff9813e 100644
--- a/tree.c
+++ b/tree.c
@@ -102,7 +102,7 @@ static int read_tree_1(struct tree *tree, struct strbuf *base,
sha1_to_hex(entry.sha1),
base->buf, entry.path);
- hashcpy(sha1, commit->tree->object.sha1);
+ hashcpy(sha1, commit->tree->object.oid.hash);
}
else
continue;
@@ -204,7 +204,7 @@ int parse_tree_buffer(struct tree *item, void *buffer, unsigned long size)
return 0;
}
-int parse_tree(struct tree *item)
+int parse_tree_gently(struct tree *item, int quiet_on_missing)
{
enum object_type type;
void *buffer;
@@ -212,14 +212,15 @@ int parse_tree(struct tree *item)
if (item->object.parsed)
return 0;
- buffer = read_sha1_file(item->object.sha1, &type, &size);
+ buffer = read_sha1_file(item->object.oid.hash, &type, &size);
if (!buffer)
- return error("Could not read %s",
- sha1_to_hex(item->object.sha1));
+ return quiet_on_missing ? -1 :
+ error("Could not read %s",
+ oid_to_hex(&item->object.oid));
if (type != OBJ_TREE) {
free(buffer);
return error("Object %s not a tree",
- sha1_to_hex(item->object.sha1));
+ oid_to_hex(&item->object.oid));
}
return parse_tree_buffer(item, buffer, size);
}
@@ -247,6 +248,6 @@ struct tree *parse_tree_indirect(const unsigned char *sha1)
else
return NULL;
if (!obj->parsed)
- parse_object(obj->sha1);
+ parse_object(obj->oid.hash);
} while (1);
}