The commit-graph file format has some shortcomings that were discussed on-list: 1. It doesn't use the 4-byte format ID from the_hash_algo. 2. There is no way to change the reachability index from generation numbers to corrected commit date [1]. 3. The unused byte in the format could be used to signal the file is incremental, but current clients ignore the value even if it is non-zero. This series adds a new version (2) to the commit-graph file. The fifth byte already specified the file format, so existing clients will gracefully respond to files with a different version number. The only real change now is that the header takes 12 bytes instead of 8, due to using the 4-byte format ID for the hash algorithm. The new bytes reserved for the reachability index version and incremental file formats are now expected to be equal to the defaults. When we update these values to be flexible in the future, if a client understands commit-graph v2 but not those new values, then it will fail gracefully. This series is based on ab/commit-graph-write-progress and bc/sha-256. Thanks, -Stolee [1] https://public-inbox.org/git/6367e30a-1b3a-4fe9-611b-d931f51effef@xxxxxxxxx/ Derrick Stolee (6): commit-graph: return with errors during write commit-graph: collapse parameters into flags commit-graph: create new version flags commit-graph: add --version=<n> option commit-graph: implement file format version 2 commit-graph: test verifying a corrupt v2 header Documentation/git-commit-graph.txt | 3 + .../technical/commit-graph-format.txt | 26 ++- builtin/commit-graph.c | 43 +++-- builtin/commit.c | 5 +- builtin/gc.c | 7 +- commit-graph.c | 158 +++++++++++++----- commit-graph.h | 16 +- t/t5318-commit-graph.sh | 42 ++++- 8 files changed, 233 insertions(+), 67 deletions(-) base-commit: 91b3ce35eeb93be1f4406e25ccdc4ab983a8e5af Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-112%2Fderrickstolee%2Fgraph%2Fv2-head-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-112/derrickstolee/graph/v2-head-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/112 -- gitgitgadget