From 436b2d8ff093874a29103ae69948e0fdfdc643d3 Mon Sep 17 00:00:00 2001 From: tommaso-moro Date: Mon, 23 Feb 2026 10:43:46 +0000 Subject: [PATCH] add minimal types for get_files --- pkg/github/minimal_types.go | 28 ++++++++++++++++++++++++++++ pkg/github/pullrequests.go | 7 ++----- pkg/github/pullrequests_test.go | 10 +++++----- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/pkg/github/minimal_types.go b/pkg/github/minimal_types.go index f8c82d78e..731ff6bdf 100644 --- a/pkg/github/minimal_types.go +++ b/pkg/github/minimal_types.go @@ -79,6 +79,18 @@ type MinimalCommitFile struct { Changes int `json:"changes,omitempty"` } +// MinimalPRFile represents a file changed in a pull request. +// Compared to MinimalCommitFile, it includes the patch diff and previous filename for renames. +type MinimalPRFile struct { + Filename string `json:"filename"` + Status string `json:"status,omitempty"` + Additions int `json:"additions,omitempty"` + Deletions int `json:"deletions,omitempty"` + Changes int `json:"changes,omitempty"` + Patch string `json:"patch,omitempty"` + PreviousFilename string `json:"previous_filename,omitempty"` +} + // MinimalCommit is the trimmed output type for commit objects. type MinimalCommit struct { SHA string `json:"sha"` @@ -600,6 +612,22 @@ func convertToMinimalCommit(commit *github.RepositoryCommit, includeDiffs bool) return minimalCommit } +func convertToMinimalPRFiles(files []*github.CommitFile) []MinimalPRFile { + result := make([]MinimalPRFile, 0, len(files)) + for _, f := range files { + result = append(result, MinimalPRFile{ + Filename: f.GetFilename(), + Status: f.GetStatus(), + Additions: f.GetAdditions(), + Deletions: f.GetDeletions(), + Changes: f.GetChanges(), + Patch: f.GetPatch(), + PreviousFilename: f.GetPreviousFilename(), + }) + } + return result +} + // convertToMinimalBranch converts a GitHub API Branch to MinimalBranch func convertToMinimalBranch(branch *github.Branch) MinimalBranch { return MinimalBranch{ diff --git a/pkg/github/pullrequests.go b/pkg/github/pullrequests.go index 58edc07dc..6e6b0f24c 100644 --- a/pkg/github/pullrequests.go +++ b/pkg/github/pullrequests.go @@ -290,12 +290,9 @@ func GetPullRequestFiles(ctx context.Context, client *github.Client, owner, repo return ghErrors.NewGitHubAPIStatusErrorResponse(ctx, "failed to get pull request files", resp, body), nil } - r, err := json.Marshal(files) - if err != nil { - return nil, fmt.Errorf("failed to marshal response: %w", err) - } + minimalFiles := convertToMinimalPRFiles(files) - return utils.NewToolResultText(string(r)), nil + return MarshalledTextResult(minimalFiles), nil } // GraphQL types for review threads query diff --git a/pkg/github/pullrequests_test.go b/pkg/github/pullrequests_test.go index 570b1906f..2e21eefed 100644 --- a/pkg/github/pullrequests_test.go +++ b/pkg/github/pullrequests_test.go @@ -1229,15 +1229,15 @@ func Test_GetPullRequestFiles(t *testing.T) { textContent := getTextResult(t, result) // Unmarshal and verify the result - var returnedFiles []*github.CommitFile + var returnedFiles []MinimalPRFile err = json.Unmarshal([]byte(textContent.Text), &returnedFiles) require.NoError(t, err) assert.Len(t, returnedFiles, len(tc.expectedFiles)) for i, file := range returnedFiles { - assert.Equal(t, *tc.expectedFiles[i].Filename, *file.Filename) - assert.Equal(t, *tc.expectedFiles[i].Status, *file.Status) - assert.Equal(t, *tc.expectedFiles[i].Additions, *file.Additions) - assert.Equal(t, *tc.expectedFiles[i].Deletions, *file.Deletions) + assert.Equal(t, tc.expectedFiles[i].GetFilename(), file.Filename) + assert.Equal(t, tc.expectedFiles[i].GetStatus(), file.Status) + assert.Equal(t, tc.expectedFiles[i].GetAdditions(), file.Additions) + assert.Equal(t, tc.expectedFiles[i].GetDeletions(), file.Deletions) } }) }