Skip to content

Commit 168e7c6

Browse files
Anant rustagiAnant rustagi
authored andcommitted
feat: add pagination support to get_pull_request_files tool
- Add WithPagination() to tool definition - Use OptionalPaginationParams to handle page and perPage parameters - Pass pagination parameters to GitHub API ListFiles call - Update tests to include pagination scenarios - Update tool schema snapshot Fixes #527
1 parent 3fe88ee commit 168e7c6

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

pkg/github/__toolsnaps__/get_pull_request_files.snap

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@
1010
"description": "Repository owner",
1111
"type": "string"
1212
},
13+
"page": {
14+
"description": "Page number for pagination (min 1)",
15+
"minimum": 1,
16+
"type": "number"
17+
},
18+
"perPage": {
19+
"description": "Results per page for pagination (min 1, max 100)",
20+
"maximum": 100,
21+
"minimum": 1,
22+
"type": "number"
23+
},
1324
"pullNumber": {
1425
"description": "Pull request number",
1526
"type": "number"

pkg/github/pullrequests.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,7 @@ func GetPullRequestFiles(getClient GetClientFn, t translations.TranslationHelper
532532
mcp.Required(),
533533
mcp.Description("Pull request number"),
534534
),
535+
WithPagination(),
535536
),
536537
func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
537538
owner, err := RequiredParam[string](request, "owner")
@@ -546,12 +547,19 @@ func GetPullRequestFiles(getClient GetClientFn, t translations.TranslationHelper
546547
if err != nil {
547548
return mcp.NewToolResultError(err.Error()), nil
548549
}
550+
pagination, err := OptionalPaginationParams(request)
551+
if err != nil {
552+
return mcp.NewToolResultError(err.Error()), nil
553+
}
549554

550555
client, err := getClient(ctx)
551556
if err != nil {
552557
return nil, fmt.Errorf("failed to get GitHub client: %w", err)
553558
}
554-
opts := &github.ListOptions{}
559+
opts := &github.ListOptions{
560+
PerPage: pagination.perPage,
561+
Page: pagination.page,
562+
}
555563
files, resp, err := client.PullRequests.ListFiles(ctx, owner, repo, pullNumber, opts)
556564
if err != nil {
557565
return nil, fmt.Errorf("failed to get pull request files: %w", err)

pkg/github/pullrequests_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,8 @@ func Test_GetPullRequestFiles(t *testing.T) {
568568
assert.Contains(t, tool.InputSchema.Properties, "owner")
569569
assert.Contains(t, tool.InputSchema.Properties, "repo")
570570
assert.Contains(t, tool.InputSchema.Properties, "pullNumber")
571+
assert.Contains(t, tool.InputSchema.Properties, "page")
572+
assert.Contains(t, tool.InputSchema.Properties, "perPage")
571573
assert.ElementsMatch(t, tool.InputSchema.Required, []string{"owner", "repo", "pullNumber"})
572574

573575
// Setup mock PR files for success case
@@ -614,6 +616,24 @@ func Test_GetPullRequestFiles(t *testing.T) {
614616
expectError: false,
615617
expectedFiles: mockFiles,
616618
},
619+
{
620+
name: "successful files fetch with pagination",
621+
mockedClient: mock.NewMockedHTTPClient(
622+
mock.WithRequestMatch(
623+
mock.GetReposPullsFilesByOwnerByRepoByPullNumber,
624+
mockFiles,
625+
),
626+
),
627+
requestArgs: map[string]interface{}{
628+
"owner": "owner",
629+
"repo": "repo",
630+
"pullNumber": float64(42),
631+
"page": float64(2),
632+
"perPage": float64(10),
633+
},
634+
expectError: false,
635+
expectedFiles: mockFiles,
636+
},
617637
{
618638
name: "files fetch fails",
619639
mockedClient: mock.NewMockedHTTPClient(

0 commit comments

Comments
 (0)