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