]> git.ipfire.org Git - thirdparty/git.git/commit - alloc.c
commit: integrate commit graph with commit parsing
authorDerrick Stolee <dstolee@microsoft.com>
Tue, 10 Apr 2018 12:56:05 +0000 (08:56 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Apr 2018 01:43:02 +0000 (10:43 +0900)
commit177722b344256b84f1c97b7363d3f19c04928039
tree9541c4f5026ccda8406afdc89f37e1e51834a12d
parent4f2542b49e1525ebde595a5254743579a28a7382
commit: integrate commit graph with commit parsing

Teach Git to inspect a commit graph file to supply the contents of a
struct commit when calling parse_commit_gently(). This implementation
satisfies all post-conditions on the struct commit, including loading
parents, the root tree, and the commit date.

If core.commitGraph is false, then do not check graph files.

In test script t5318-commit-graph.sh, add output-matching conditions on
read-only graph operations.

By loading commits from the graph instead of parsing commit buffers, we
save a lot of time on long commit walks. Here are some performance
results for a copy of the Linux repository where 'master' has 678,653
reachable commits and is behind 'origin/master' by 59,929 commits.

| Command                          | Before | After  | Rel % |
|----------------------------------|--------|--------|-------|
| log --oneline --topo-order -1000 |  8.31s |  0.94s | -88%  |
| branch -vv                       |  1.02s |  0.14s | -86%  |
| rev-list --all                   |  5.89s |  1.07s | -81%  |
| rev-list --all --objects         | 66.15s | 58.45s | -11%  |

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