summaryrefslogtreecommitdiff
path: root/progress.c
diff options
context:
space:
mode:
authorLibravatar Patrick Steinhardt <ps@pks.im>2021-09-01 15:09:54 +0200
committerLibravatar Junio C Hamano <gitster@pobox.com>2021-09-01 12:43:56 -0700
commit62b5a35a33ad6a4537e2ae75a49036e4173fcc87 (patch)
tree6a3f53f5f97ad65677c1b5fd4a509f817bbc0cac /progress.c
parentconnected: refactor iterator to return next object ID directly (diff)
downloadtgif-62b5a35a33ad6a4537e2ae75a49036e4173fcc87.tar.xz
fetch-pack: optimize loading of refs via commit graph
In order to negotiate a packfile, we need to dereference refs to see which commits we have in common with the remote. To do so, we first look up the object's type -- if it's a tag, we peel until we hit a non-tag object. If we hit a commit eventually, then we return that commit. In case the object ID points to a commit directly, we can avoid the initial lookup of the object type by opportunistically looking up the commit via the commit-graph, if available, which gives us a slight speed bump of about 2% in a huge repository with about 2.3M refs: Benchmark #1: HEAD~: git-fetch Time (mean ± σ): 31.634 s ± 0.258 s [User: 28.400 s, System: 5.090 s] Range (min … max): 31.280 s … 31.896 s 5 runs Benchmark #2: HEAD: git-fetch Time (mean ± σ): 31.129 s ± 0.543 s [User: 27.976 s, System: 5.056 s] Range (min … max): 30.172 s … 31.479 s 5 runs Summary 'HEAD: git-fetch' ran 1.02 ± 0.02 times faster than 'HEAD~: git-fetch' In case this fails, we fall back to the old code which peels the objects to a commit. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'progress.c')
0 files changed, 0 insertions, 0 deletions