Skip to content
  • Jeff King's avatar
    check_everything_connected: assume alternate ref tips are valid · 39b44ba7
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    When we receive a remote ref update to sha1 "X", we want to check that
    we have all of the objects needed by "X". We can assume that our
    repository is not currently corrupted, and therefore if we have a ref
    pointing at "Y", we have all of its objects. So we can stop our
    traversal from "X" as soon as we hit "Y".
    
    If we make the same non-corruption assumption about any repositories we
    use to store alternates, then we can also use their ref tips to shorten
    the traversal.
    
    This is especially useful when cloning with "--reference", as we
    otherwise do not have any local refs to check against, and have to
    traverse the whole history, even though the other side may have sent us
    few or no objects. Here are results for the included perf test (which
    shows off more or less the maximal savings, getting one new commit and
    sharing the whole history):
    
    Test                        HEAD^             HEAD
    --------------------------------------------------------------------
    [on git.git]
    5600.3: clone --reference   2.94(2.86+0.08)   0.09(0.08+0.01) -96.9%
    [on linux.git]
    5600.3: clone --reference   45.74(45.34+0.41)   0.36(0.30+0.08) -99.2%
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    39b44ba7