Integrate CommitsFinder with GitalyKeysetPager
## Summary Update `GitalyKeysetPager` to recognize and work with the new `CommitsFinder` class, enabling standard keyset pagination header generation. ## Parent Issue This is part of #595504 (Epic: Refactor Commits API to use standard keyset pagination patterns) ## Background GitLab's `GitalyKeysetPager` orchestrates keyset pagination for git objects, handling: - Detecting when keyset pagination is requested - Calling the finder with `gitaly_pagination: true` - Generating `Link` and `X-NEXT-CURSOR` headers via `HeaderBuilder` We need to integrate `CommitsFinder` with this existing infrastructure. ## Proposed Implementation ### Update `lib/gitlab/pagination/gitaly_keyset_pager.rb` The pager should recognize `CommitsFinder` and handle its `CommitCollectionWithNextCursor` response type. ```ruby # In GitalyKeysetPager, add support for CommitsFinder def paginate(finder) return paginate_via_gitaly(finder) if keyset_pagination_enabled?(finder) # ... existing offset pagination end private def keyset_pagination_enabled?(finder) return false unless params[:pagination] == 'keyset' finder.is_a?(CommitsFinder) || finder.is_a?(BranchesFinder) || finder.is_a?(TagsFinder) || finder.is_a?(Repositories::TreeFinder) end ``` ### Update `lib/gitlab/pagination/keyset/header_builder.rb` Ensure `HeaderBuilder` can extract cursor from `CommitCollectionWithNextCursor`: ```ruby def next_cursor(collection) case collection when Repositories::CommitCollectionWithNextCursor collection.next_cursor # ... existing cases end end ``` ## Acceptance Criteria - [ ] `GitalyKeysetPager` recognizes `CommitsFinder` - [ ] `HeaderBuilder` extracts cursor from `CommitCollectionWithNextCursor` - [ ] Add feature flag `commits_keyset_pagination` for safe rollout - [ ] Unit tests for pager integration - [ ] Integration tests verifying header generation ## Reference Files - `lib/gitlab/pagination/gitaly_keyset_pager.rb` - `lib/gitlab/pagination/keyset/header_builder.rb` - `lib/gitlab/pagination/keyset/pager.rb` ## References - Parent epic: #595504 - Depends on: CommitsFinder issue
issue