commit-reach: fix !FIND_ALL early exit with v1 commit graph
Get series with b4
b4 am [email protected]Versions newest first
- v1 Latest2 patches 4 repliesIn review
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/2 | t6600: add test for merge-base early exit with clock skewt/ | +41 | 0 replies | |
| 2/2 | commit-reach: guard !FIND_ALL early exit with generation ordering checkcommit-reach.c t/ | +8 | 1 reply |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [PATCH 0/2] commit-reach: fix !FIND_ALL early exit with v1 commit graph
Fixes a bug introduced by 93e5b1680e (commit-reach: early exit paint_down_to_common for single merge-base, 2025-04-10) where git merge-base can return the wrong result.
The bug requires all of the following to trigger:
1. A v1 commit graph (topological levels only, no corrected commit dates). Generation v2 with corrected commit dates has been the default since 2021, so only repos that have not rewritten their commit graph in over four years would be affected.
2. git merge-base without --all (the common case, but --all is unaffected because it disables the early exit).
3. A topology with clock skew: the correct merge base has a lower committer date than one of its ancestors that is also a common ancestor. With date ordering, the deeper ancestor pops first and the early exit fires before the correct result is found.
This two-patch series:
1. Adds a test demonstrating the bug (clock-skew topology where the correct merge base has a lower date than its ancestor)
2. Fixes it by tracking whether the queue is generation-ordered and gating the early exit on that flag
Kristofer Karlsson (2):
t6600: add test for merge-base early exit with clock skew
commit-reach: guard !FIND_ALL early exit with generation ordering
check
commit-reach.c | 10 +++++++--- t/t6600-test-reach.sh | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-)
base-commit: 9aa172cd1f113276d360d4e48937dc95ef46b780
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2162%2Fspkrka%2Ffind-all-fix-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2162/spkrka/find-all-fix-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/2162
Signature · 1 line
gitgitgadget