commit-graph: lazy-load trees for commits
commit7b8a21dba1bce44d64bd86427d3d92437adc4707
authorDerrick Stolee <dstolee@microsoft.com>
Fri, 6 Apr 2018 19:09:46 +0000 (6 19:09 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Apr 2018 01:47:16 +0000 (11 10:47 +0900)
treee45261ae8a002fdd4bab8ffc632740b5cee55c8c
parent2e27bd7731d47b374c1c14b53af07b3bfa39fcac
commit-graph: lazy-load trees for commits

The commit-graph file provides quick access to commit data, including
the OID of the root tree for each commit in the graph. When performing
a deep commit-graph walk, we may not need to load most of the trees
for these commits.

Delay loading the tree object for a commit loaded from the graph
until requested via get_commit_tree(). Do not lazy-load trees for
commits not in the graph, since that requires duplicate parsing
and the relative peformance improvement when trees are not needed
is small.

On the Linux repository, performance tests were run for the following
command:

    git log --graph --oneline -1000

    Before: 0.92s
    After:  0.66s
    Rel %: -28.3%

Adding '-- kernel/' to the command requires loading the root tree
for every commit that is walked. There was no measureable performance
change as a result of this patch.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
commit-graph.c
commit-graph.h
commit.c
commit.h