• Lars Schneider's avatar
    convert: add "status=delayed" to filter process protocol · 2841e8f8
    Lars Schneider authored
    Some `clean` / `smudge` filters may require a significant amount of
    time to process a single blob (e.g. the Git LFS smudge filter might
    perform network requests). During this process the Git checkout
    operation is blocked and Git needs to wait until the filter is done to
    continue with the checkout.
    
    Teach the filter process protocol, introduced in edcc8581 ("convert: add
    filter.<driver>.process option", 2016-10-16), to accept the status
    "delayed" as response to a filter request. Upon this response Git
    continues with the checkout operation. After the checkout operation Git
    calls "finish_delayed_checkout" which queries the filter for remaining
    blobs. If the filter is still working on the completion, then the filter
    is expected to block. If the filter has completed all remaining blobs
    then an empty response is expected.
    
    Git has a multiple code paths that checkout a blob. Support delayed
    checkouts only in `clone` (in unpack-trees.c) and `checkout` operations
    for now. The optimization is most effective in these code paths as all
    files of the tree are processed.
    Signed-off-by: default avatarLars Schneider <larsxschneider@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    2841e8f8
entry.c 11.5 KB