diff options
author | Derrick Stolee <derrickstolee@github.com> | 2022-11-07 18:35:44 +0000 |
---|---|---|
committer | Taylor Blau <me@ttaylorr.com> | 2022-11-07 13:53:52 -0500 |
commit | 7056e7f0c8e55d5c3fae5648d5434d83436e8977 (patch) | |
tree | 2f16f6da118aaabbbcd7bd025f300cd6cc353dc0 /commit-graph.c | |
parent | a17ad58dfc28442816321c22d150f0944bc75584 (diff) | |
download | git-7056e7f0c8e55d5c3fae5648d5434d83436e8977.tar.gz |
chunk-format: allow trailing table of contents
The existing chunk formats use the table of contents at the beginning of
the file. This is intended as a way to speed up the initial loading of
the file, but comes at a cost during writes. Each example needs to fully
compute how big each chunk will be in advance, which usually requires
storing the full file contents in memory.
Future file formats may want to use the chunk format API in cases where
the writing stage is critical to performance, so we may want to stream
updates from an existing file and then only write the table of contents
at the end.
Add a new 'flags' parameter to write_chunkfile() that allows this
behavior. When this is specified, the defensive programming that checks
that the chunks are written with the precomputed sizes is disabled.
Then, the table of contents is written in reverse order at the end of
the hashfile, so a parser can read the chunk list starting from the end
of the file (minus the hash).
The parsing of these table of contents will come in a later change.
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Diffstat (limited to 'commit-graph.c')
-rw-r--r-- | commit-graph.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/commit-graph.c b/commit-graph.c index a7d8755932..c927b81250 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -1932,7 +1932,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx) get_num_chunks(cf) * ctx->commits.nr); } - write_chunkfile(cf, ctx); + write_chunkfile(cf, 0, ctx); stop_progress(&ctx->progress); strbuf_release(&progress_title); |