]> git.ipfire.org Git - thirdparty/git.git/commit
packfile: skip unpacking object header for disk size requests
authorPatrick Steinhardt <ps@pks.im>
Mon, 12 Jan 2026 09:00:46 +0000 (10:00 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 12 Jan 2026 14:51:14 +0000 (06:51 -0800)
commit5ff29698e077e712740691a1d15e8320115ebdbf
treee58f113e0c71c7123ab04e3f0679da2df819a3e8
parent8908c303da91400e8d9643da6fc697a081ac7374
packfile: skip unpacking object header for disk size requests

While most of the object info requests for a packed object require us to
unpack its headers, reading its disk size doesn't. We still unpack the
object header in that case though, which is unnecessary work.

Skip reading the header if only the disk size is requested. This leads
to a small speedup when reading disk size, only. The following benchmark
was done in the Git repository:

    Benchmark 1: ./git rev-list --disk-usage HEAD (rev = HEAD~)
      Time (mean ± σ):     105.2 ms ±   0.6 ms    [User: 91.4 ms, System: 13.3 ms]
      Range (min … max):   103.7 ms … 106.0 ms    27 runs

    Benchmark 2: ./git rev-list --disk-usage HEAD (rev = HEAD)
      Time (mean ± σ):      96.7 ms ±   0.4 ms    [User: 86.2 ms, System: 10.0 ms]
      Range (min … max):    96.2 ms …  98.1 ms    30 runs

    Summary
      ./git rev-list --disk-usage HEAD (rev = HEAD) ran
        1.09 ± 0.01 times faster than ./git rev-list --disk-usage HEAD (rev = HEAD~)

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
packfile.c