summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2021-07-28 20:17:58 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-07-28 20:17:58 (GMT)
commitc9d6d8a1938f86594b33785a8228d9f35ad457c8 (patch)
tree2b658bf0a8be2b3c2a736e6e4032acdb778da1aa /object.c
parent01369fdfd3d0deec41c55306dae42f00dfbfa582 (diff)
parentd1ed8d6cee57c91ec770a8a183ed40c3ec867ac1 (diff)
downloadgit-c9d6d8a1938f86594b33785a8228d9f35ad457c8.zip
git-c9d6d8a1938f86594b33785a8228d9f35ad457c8.tar.gz
git-c9d6d8a1938f86594b33785a8228d9f35ad457c8.tar.bz2
Merge branch 'jk/log-decorate-optim'
Optimize "git log" for cases where we wasted cycles to load ref decoration data that may not be needed. * jk/log-decorate-optim: load_ref_decorations(): fix decoration with tags add_ref_decoration(): rename s/type/deco_type/ load_ref_decorations(): avoid parsing non-tag objects object.h: add lookup_object_by_type() function object.h: expand docstring for lookup_unknown_object() log: avoid loading decorations for userformats that don't need it pretty.h: update and expand docstring for userformat_find_requirements()
Diffstat (limited to 'object.c')
-rw-r--r--object.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/object.c b/object.c
index 2b3c075..4e85955 100644
--- a/object.c
+++ b/object.c
@@ -185,6 +185,24 @@ struct object *lookup_unknown_object(struct repository *r, const struct object_i
return obj;
}
+struct object *lookup_object_by_type(struct repository *r,
+ const struct object_id *oid,
+ enum object_type type)
+{
+ switch (type) {
+ case OBJ_COMMIT:
+ return (struct object *)lookup_commit(r, oid);
+ case OBJ_TREE:
+ return (struct object *)lookup_tree(r, oid);
+ case OBJ_TAG:
+ return (struct object *)lookup_tag(r, oid);
+ case OBJ_BLOB:
+ return (struct object *)lookup_blob(r, oid);
+ default:
+ die("BUG: unknown object type %d", type);
+ }
+}
+
struct object *parse_object_buffer(struct repository *r, const struct object_id *oid, enum object_type type, unsigned long size, void *buffer, int *eaten_p)
{
struct object *obj;