summaryrefslogtreecommitdiff
path: root/shell.c
diff options
context:
space:
mode:
authorLibravatar Elijah Newren <newren@gmail.com>2021-06-22 08:04:41 +0000
committerLibravatar Junio C Hamano <gitster@pobox.com>2021-06-28 07:58:25 -0700
commit2bff554b23e8d5c17f4e6827358bb51811fc7137 (patch)
treec5b500f1ac0a768226c25d641e60f71dc3f41993 /shell.c
parentdiffcore-rename: use a different prefetch for basename comparisons (diff)
downloadtgif-2bff554b23e8d5c17f4e6827358bb51811fc7137.tar.xz
merge-ort: add prefetching for content merges
Commit 7fbbcb21b1 ("diff: batch fetching of missing blobs", 2019-04-05) introduced batching of fetching missing blobs, so that the diff machinery would have one fetch subprocess grab N blobs instead of N processes each grabbing 1. However, the diff machinery is not the only thing in a merge that needs to work on blobs. The 3-way content merges need them as well. Rather than download all the blobs 1 at a time, prefetch all the blobs needed for regular content merges. This does not cover all possible paths in merge-ort that might need to download blobs. Others include: - The blob_unchanged() calls to avoid modify/delete conflicts (when blob renormalization results in an "unchanged" file) - Preliminary content merges needed for rename/add and rename/rename(2to1) style conflicts. (Both of these types of conflicts can result in nested conflict markers from the need to do two levels of content merging; the first happens before our new prefetch_for_content_merges() function.) The first of these wouldn't be an extreme amount of work to support, and even the second could be theoretically supported in batching, but all of these cases seem unusual to me, and this is a minor performance optimization anyway; in the worst case we only get some of the fetches batched and have a few additional one-off fetches. So for now, just handle the regular 3-way content merges in our prefetching. For the testcase from the previous commit, the number of downloaded objects remains at 63, but this drops the number of fetches needed from 32 down to 20, a sizeable reduction. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'shell.c')
0 files changed, 0 insertions, 0 deletions