diff options
author | René Scharfe <l.s.r@web.de> | 2019-08-29 21:06:22 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-09-03 15:10:53 -0700 |
commit | 1577dc0f7c1326ce59e1e97fad8a0b1e8c826203 (patch) | |
tree | 3902021af0fa77ff2a87fd1cbaa1c68a45211c82 | |
parent | First batch after Git 2.23 (diff) | |
download | tgif-1577dc0f7c1326ce59e1e97fad8a0b1e8c826203.tar.xz |
tree: simplify parse_tree_indirect()
Reduce code duplication by turning parse_tree_indirect() into a wrapper
of repo_peel_to_type(). This avoids a segfault when handling a broken
tag where ->tagged is NULL. The new version also checks the return
value of parse_object() that was ignored by the old one.
Initial-patch-by: Stefan Sperling <stsp@stsp.name>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | tree.c | 18 |
1 files changed, 3 insertions, 15 deletions
@@ -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); } |