Files
git/builtin
Kristofer Karlsson 93e5b1680e commit-reach: early exit paint_down_to_common for single merge-base
Commits not in the commit-graph get GENERATION_NUMBER_INFINITY and
sort to the top of the priority queue.  After those, commits with
finite generation numbers are popped in non-increasing order.
When MERGE_BASE_FIND_ALL is not set the first doubly-painted commit
with a finite generation is therefore a best merge-base: no commit
still in the queue can be a descendant of it.  Skip the expensive
STALE drain in this case.

Add MERGE_BASE_FIND_ALL to the merge_base_flags enum.  Callers that
need every merge-base (repo_get_merge_bases_many, repo_get_merge_bases,
repo_in_merge_bases_many, remove_redundant_no_gen) pass the flag to
preserve existing behavior.  git merge-base (without --all) passes 0,
triggering the early exit.

On a 2.2M-commit merge-heavy monorepo with commit-graph:

  HEAD vs ~500:   5,229ms -> 24ms
  HEAD vs ~1000:  4,214ms -> 39ms
  HEAD vs ~5000:  3,799ms -> 46ms
  HEAD vs ~10000: 3,827ms -> 61ms

Signed-off-by: Kristofer Karlsson <krka@spotify.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-05-12 09:33:43 +09:00
..
2026-03-24 12:31:32 -07:00
2026-04-01 10:28:18 -07:00
2026-02-20 08:13:58 -08:00
2026-03-31 20:43:14 -07:00
2025-07-23 08:15:18 -07:00
2026-03-24 12:31:32 -07:00
2025-09-29 11:40:35 -07:00
2025-07-23 08:15:18 -07:00
2026-03-24 12:31:32 -07:00
2025-07-23 08:15:18 -07:00
2025-07-23 08:15:18 -07:00
2025-07-01 14:46:38 -07:00
2026-03-31 20:43:14 -07:00
2025-08-22 13:13:20 -07:00
2026-04-08 10:19:17 -07:00
2026-03-25 12:58:05 -07:00
2026-03-12 14:09:07 -07:00
2026-03-23 09:20:30 -07:00
2026-04-08 10:19:17 -07:00
2026-03-23 08:33:10 -07:00
2025-08-21 13:47:00 -07:00
2026-03-23 08:33:10 -07:00
2026-03-31 20:43:14 -07:00
2025-07-23 08:15:18 -07:00
2026-02-20 08:13:58 -08:00
2026-03-31 20:43:14 -07:00
2025-07-23 08:15:18 -07:00
2026-03-24 12:31:31 -07:00
2026-04-08 10:19:17 -07:00
2025-09-16 11:37:06 -07:00
2025-08-21 13:46:59 -07:00