]> git.ipfire.org Git - thirdparty/git.git/commit - pretty.h
log: avoid loading decorations for userformats that don't need it
authorJeff King <peff@peff.net>
Tue, 22 Jun 2021 16:04:50 +0000 (12:04 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 29 Jun 2021 03:30:17 +0000 (20:30 -0700)
commitb2086b518366ed71caac498857b9c5765dd73ed1
tree8e47d1a2368c3a1d758dacec201f9669928e4f37
parent3c7e2e8f0acfe94220cdd3bbd3a35a955ae80294
log: avoid loading decorations for userformats that don't need it

If no --decorate option is given, we default to auto-decoration. And
when that kicks in, cmd_log_init_finish() will unconditionally load the
decoration refs.

However, if we are using a user-format that does not include "%d" or
"%D", we won't show the decorations at all, so we don't need to load
them. We can detect this case and auto-disable them by adding a new
field to our userformat_want helper. We can do this even when the user
explicitly asked for --decorate, because it can't affect the output at
all.

This patch consistently reduces the time to run "git log -1 --format=%H"
on my git.git clone (with ~2k refs) from 34ms to 7ms. On a much more
extreme real-world repository (with ~220k refs), it goes from 2.5s to
4ms.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/log.c
pretty.c
pretty.h