• D
    commit-reach: replace ref_newer logic · 1e3497a2
    Derrick Stolee 提交于
    The ref_newer method is used by 'git push' to check if a force-push is
    required. This method does not use any kind of cutoff when walking, so
    in the case of a force-push will walk all reachable commits.
    
    The is_descendant_of method already uses paint_down_to_common along with
    cutoffs. By translating the ref_newer arguments into the commit and
    commit_list required by is_descendant_of, we can have one fewer commit
    walk and also improve our performance!
    
    For a copy of the Linux repository, 'test-tool reach ref_newer' presents
    the following improvements with the specified input. In the case that
    ref_newer returns 1, there is no improvement. The improvement is in the
    second case where ref_newer returns 0.
    
    Input:
    A:v4.9
    B:v3.19
    
    Before: 0.09 s
     After: 0.09 s
    
    To test the negative case, add a new commit with parent v3.19,
    regenerate the commit-graph, and then run with B pointing at that
    commit.
    
    Before: 0.43 s
     After: 0.09 s
    Signed-off-by: NDerrick Stolee <dstolee@microsoft.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    1e3497a2
commit-reach.c 15.7 KB