I was recently pointed to a repository where: git log --format="%H %P" old..new was abysmally slow, even though old..new only had a few commits, because load_ref_decorations() takes a long time (and kicks in due to the auto-decorate behavior). Leaving aside that "rev-list" would probably be a better tool here, it seems there's some low-hanging fruit: - a user-format that doesn't show decorations doesn't need to load them (fixed in patch 2 below) - we're pretty eager to parse the objects at the tip of each ref (fixed in patch 5 below) The other commits are just cleanups and preparatory refactors. [1/5]: pretty.h: update and expand docstring for userformat_find_requirements() [2/5]: log: avoid loading decorations for userformats that don't need it [3/5]: object.h: expand docstring for lookup_unknown_object() [4/5]: object.h: add lookup_object_by_type() function [5/5]: load_ref_decorations(): avoid parsing non-tag objects builtin/log.c | 3 +++ log-tree.c | 6 ++++-- object.c | 18 ++++++++++++++++++ object.h | 20 +++++++++++++++++++- pretty.c | 4 ++++ pretty.h | 8 ++++++-- reachable.c | 18 ------------------ 7 files changed, 54 insertions(+), 23 deletions(-) -Peff