Merge branch 'rs/parse-tree-indirect'
authorJunio C Hamano <gitster@pobox.com>
Mon, 30 Sep 2019 04:19:26 +0000 (13:19 +0900)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Sep 2019 04:19:26 +0000 (13:19 +0900)
Code cleanup.

* rs/parse-tree-indirect:
tree: simplify parse_tree_indirect()

tree.c
diff --git a/tree.c b/tree.c
index 4720945e6a68c4311458cc60e22c25edb07c375e..1466bcc6a8cf093970dc3d39e5554a61112548fd 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -244,19 +244,7 @@ void free_tree_buffer(struct tree *tree)
 
 struct tree *parse_tree_indirect(const struct object_id *oid)
 {
-       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);
+       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);
 }