Subject: [PATCH 0/7] Commit-graph: Generation Number v2 Fixes, v3 implementation

From: "Derrick Stolee via GitGitGadget" <[email-masked]>
Date: Thu, 24 Feb 2022 20:38:29 +0000

This patch series includes two distinct, but similarly-motivated parts:

 * Patches 1-4 fix some bugs in the commit-graph generation number v2.
 * Patches 5-7 add a new generation number v3 by incrementing the
   commit-graph file format.

I had been thinking about generation number v3, which is the same corrected
commit date as generation number v2, but it is stored in the Commit Data
chunk, requiring a new commit-graph file format version. This breaks
compatibility with older versions of Git, so it requires opt-in via the
commitGraph.generationVersion config value. The only improvement over
version 2 is that the commit-graph file is smaller, so I/O time is reduced.

However, while exploring this idea I found bugs in generation number v2. In
particular, Git has been ignoring them since shortly after they were
introduced. This is due to a bug I introduced when trying to make split
commit-graphs safer with mixed generation number versions. I also noticed an
issue with the offset overflows that I only noticed after writing generation
number v3 using a smaller offset size, actually triggering the bug in the
test suite.

I'm submitting these two things together so we can see them all at once, but
I'd be happy to split this into two series. The first four patches are
important bug fixes, so we can consider them as higher-priority.

Thanks, -Stolee

Derrick Stolee (7):
  test-read-graph: include extra post-parse info
  commit-graph: fix ordering bug in generation numbers
  commit-graph: start parsing generation v2 (again)
  commit-graph: fix generation number v2 overflow values
  commit-graph: document file format v2
  commit-graph: parse file format v2
  commit-graph: write file format v2

 Documentation/config/commitgraph.txt          |  4 +-
 .../technical/commit-graph-format.txt         | 22 ++++-
 commit-graph.c                                | 98 +++++++++++++++----
 commit-graph.h                                |  6 ++
 commit.h                                      |  1 +
 t/helper/test-read-graph.c                    | 13 +++
 t/t4216-log-bloom.sh                          |  1 +
 t/t5318-commit-graph.sh                       | 65 ++++++++++--
 t/t5324-split-commit-graph.sh                 | 10 ++
 9 files changed, 189 insertions(+), 31 deletions(-)

base-commit: dab1b7905d0b295f1acef9785bb2b9cbb0fdec84
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1163%2Fderrickstolee%2Fgen-v3-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1163/derrickstolee/gen-v3-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1163
-- 
gitgitgadget