about summary refs log tree commit diff
path: root/third_party/git/tree.c
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2020-05-25T23·06+0100
committerVincent Ambo <tazjin@google.com>2020-05-25T23·06+0100
commit93ba78d6f4632ef1c5228965e3edc8c0faf88c1e (patch)
tree85730c182a9f5f492ade8e8ccdb1c2356f9900bd /third_party/git/tree.c
parent6f8fbf4aa4b1654ab27d4829e114538761817de0 (diff)
revert(3p/git): Revert merge of git upstream at v2.26.2 r/852
This causes cgit to serve error pages, which is undesirable.

This reverts commit 5229c9b232de5bfa959ad6ebbb4c8192ac513352, reversing
changes made to f2b211131f2347342dde63975b09cf603149f1a3.
Diffstat (limited to 'third_party/git/tree.c')
-rw-r--r--third_party/git/tree.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/third_party/git/tree.c b/third_party/git/tree.c
index 1466bcc6a8..4720945e6a 100644
--- a/third_party/git/tree.c
+++ b/third_party/git/tree.c
@@ -244,7 +244,19 @@ void free_tree_buffer(struct tree *tree)
 
 struct tree *parse_tree_indirect(const struct object_id *oid)
 {
-	struct repository *r = the_repository;
-	struct object *obj = parse_object(r, oid);
-	return (struct tree *)repo_peel_to_type(r, NULL, 0, obj, OBJ_TREE);
+	struct object *obj = parse_object(the_repository, oid);
+	do {
+		if (!obj)
+			return NULL;
+		if (obj->type == OBJ_TREE)
+			return (struct tree *) obj;
+		else if (obj->type == OBJ_COMMIT)
+			obj = &(get_commit_tree(((struct commit *)obj))->object);
+		else if (obj->type == OBJ_TAG)
+			obj = ((struct tag *) obj)->tagged;
+		else
+			return NULL;
+		if (!obj->parsed)
+			parse_object(the_repository, &obj->oid);
+	} while (1);
 }