Skip to content

Commit 17c8564

Browse files
committed
refactor minimal conversion funcs to minimal_types.go
1 parent 4142f93 commit 17c8564

File tree

2 files changed

+95
-91
lines changed

2 files changed

+95
-91
lines changed

pkg/github/minimal_types.go

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package github
22

3+
import "github.com/google/go-github/v74/github"
4+
35
// MinimalUser is the output type for user and organization search results.
46
type MinimalUser struct {
57
Login string `json:"login"`
@@ -152,3 +154,93 @@ type MinimalGistResponse struct {
152154
Description string `json:"description,omitempty"`
153155
Public bool `json:"public"`
154156
}
157+
158+
// Helper functions
159+
160+
// convertToMinimalCommit converts a GitHub API RepositoryCommit to MinimalCommit
161+
func convertToMinimalCommit(commit *github.RepositoryCommit, includeDiffs bool) MinimalCommit {
162+
minimalCommit := MinimalCommit{
163+
SHA: commit.GetSHA(),
164+
HTMLURL: commit.GetHTMLURL(),
165+
}
166+
167+
if commit.Commit != nil {
168+
minimalCommit.Commit = &MinimalCommitInfo{
169+
Message: commit.Commit.GetMessage(),
170+
}
171+
172+
if commit.Commit.Author != nil {
173+
minimalCommit.Commit.Author = &MinimalCommitAuthor{
174+
Name: commit.Commit.Author.GetName(),
175+
Email: commit.Commit.Author.GetEmail(),
176+
}
177+
if commit.Commit.Author.Date != nil {
178+
minimalCommit.Commit.Author.Date = commit.Commit.Author.Date.Format("2006-01-02T15:04:05Z")
179+
}
180+
}
181+
182+
if commit.Commit.Committer != nil {
183+
minimalCommit.Commit.Committer = &MinimalCommitAuthor{
184+
Name: commit.Commit.Committer.GetName(),
185+
Email: commit.Commit.Committer.GetEmail(),
186+
}
187+
if commit.Commit.Committer.Date != nil {
188+
minimalCommit.Commit.Committer.Date = commit.Commit.Committer.Date.Format("2006-01-02T15:04:05Z")
189+
}
190+
}
191+
}
192+
193+
if commit.Author != nil {
194+
minimalCommit.Author = &MinimalUser{
195+
Login: commit.Author.GetLogin(),
196+
ID: commit.Author.GetID(),
197+
ProfileURL: commit.Author.GetHTMLURL(),
198+
AvatarURL: commit.Author.GetAvatarURL(),
199+
}
200+
}
201+
202+
if commit.Committer != nil {
203+
minimalCommit.Committer = &MinimalUser{
204+
Login: commit.Committer.GetLogin(),
205+
ID: commit.Committer.GetID(),
206+
ProfileURL: commit.Committer.GetHTMLURL(),
207+
AvatarURL: commit.Committer.GetAvatarURL(),
208+
}
209+
}
210+
211+
// Only include stats and files if includeDiffs is true
212+
if includeDiffs {
213+
if commit.Stats != nil {
214+
minimalCommit.Stats = &MinimalCommitStats{
215+
Additions: commit.Stats.GetAdditions(),
216+
Deletions: commit.Stats.GetDeletions(),
217+
Total: commit.Stats.GetTotal(),
218+
}
219+
}
220+
221+
if len(commit.Files) > 0 {
222+
minimalCommit.Files = make([]MinimalCommitFile, 0, len(commit.Files))
223+
for _, file := range commit.Files {
224+
minimalFile := MinimalCommitFile{
225+
Filename: file.GetFilename(),
226+
Status: file.GetStatus(),
227+
Additions: file.GetAdditions(),
228+
Deletions: file.GetDeletions(),
229+
Changes: file.GetChanges(),
230+
}
231+
minimalCommit.Files = append(minimalCommit.Files, minimalFile)
232+
}
233+
}
234+
}
235+
236+
return minimalCommit
237+
}
238+
239+
// convertToMinimalBranch converts a GitHub API Branch to MinimalBranch
240+
func convertToMinimalBranch(branch *github.Branch) MinimalBranch {
241+
return MinimalBranch{
242+
Name: branch.GetName(),
243+
SHA: branch.GetCommit().GetSHA(),
244+
Protected: branch.GetProtected(),
245+
}
246+
}

pkg/github/repositories.go

Lines changed: 3 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -18,94 +18,6 @@ import (
1818
"github.com/mark3labs/mcp-go/server"
1919
)
2020

21-
// convertToMinimalCommit converts a GitHub API RepositoryCommit to MinimalCommit
22-
func convertToMinimalCommit(commit *github.RepositoryCommit, includeDiffs bool) MinimalCommit {
23-
minimalCommit := MinimalCommit{
24-
SHA: commit.GetSHA(),
25-
HTMLURL: commit.GetHTMLURL(),
26-
}
27-
28-
if commit.Commit != nil {
29-
minimalCommit.Commit = &MinimalCommitInfo{
30-
Message: commit.Commit.GetMessage(),
31-
}
32-
33-
if commit.Commit.Author != nil {
34-
minimalCommit.Commit.Author = &MinimalCommitAuthor{
35-
Name: commit.Commit.Author.GetName(),
36-
Email: commit.Commit.Author.GetEmail(),
37-
}
38-
if commit.Commit.Author.Date != nil {
39-
minimalCommit.Commit.Author.Date = commit.Commit.Author.Date.Format("2006-01-02T15:04:05Z")
40-
}
41-
}
42-
43-
if commit.Commit.Committer != nil {
44-
minimalCommit.Commit.Committer = &MinimalCommitAuthor{
45-
Name: commit.Commit.Committer.GetName(),
46-
Email: commit.Commit.Committer.GetEmail(),
47-
}
48-
if commit.Commit.Committer.Date != nil {
49-
minimalCommit.Commit.Committer.Date = commit.Commit.Committer.Date.Format("2006-01-02T15:04:05Z")
50-
}
51-
}
52-
}
53-
54-
if commit.Author != nil {
55-
minimalCommit.Author = &MinimalUser{
56-
Login: commit.Author.GetLogin(),
57-
ID: commit.Author.GetID(),
58-
ProfileURL: commit.Author.GetHTMLURL(),
59-
AvatarURL: commit.Author.GetAvatarURL(),
60-
}
61-
}
62-
63-
if commit.Committer != nil {
64-
minimalCommit.Committer = &MinimalUser{
65-
Login: commit.Committer.GetLogin(),
66-
ID: commit.Committer.GetID(),
67-
ProfileURL: commit.Committer.GetHTMLURL(),
68-
AvatarURL: commit.Committer.GetAvatarURL(),
69-
}
70-
}
71-
72-
// Only include stats and files if includeDiffs is true
73-
if includeDiffs {
74-
if commit.Stats != nil {
75-
minimalCommit.Stats = &MinimalCommitStats{
76-
Additions: commit.Stats.GetAdditions(),
77-
Deletions: commit.Stats.GetDeletions(),
78-
Total: commit.Stats.GetTotal(),
79-
}
80-
}
81-
82-
if len(commit.Files) > 0 {
83-
minimalCommit.Files = make([]MinimalCommitFile, 0, len(commit.Files))
84-
for _, file := range commit.Files {
85-
minimalFile := MinimalCommitFile{
86-
Filename: file.GetFilename(),
87-
Status: file.GetStatus(),
88-
Additions: file.GetAdditions(),
89-
Deletions: file.GetDeletions(),
90-
Changes: file.GetChanges(),
91-
}
92-
minimalCommit.Files = append(minimalCommit.Files, minimalFile)
93-
}
94-
}
95-
}
96-
97-
return minimalCommit
98-
}
99-
100-
// convertToMinimalBranch converts a GitHub API Branch to MinimalBranch
101-
func convertToMinimalBranch(branch *github.Branch) MinimalBranch {
102-
return MinimalBranch{
103-
Name: branch.GetName(),
104-
SHA: branch.GetCommit().GetSHA(),
105-
Protected: branch.GetProtected(),
106-
}
107-
}
108-
10921
func GetCommit(getClient GetClientFn, t translations.TranslationHelperFunc) (tool mcp.Tool, handler server.ToolHandlerFunc) {
11022
return mcp.NewTool("get_commit",
11123
mcp.WithDescription(t("TOOL_GET_COMMITS_DESCRIPTION", "Get details for a commit from a GitHub repository")),
@@ -274,9 +186,9 @@ func ListCommits(getClient GetClientFn, t translations.TranslationHelperFunc) (t
274186

275187
// Convert to minimal commits
276188
minimalCommits := make([]MinimalCommit, len(commits))
277-
for i, commit := range commits {
278-
minimalCommits[i] = convertToMinimalCommit(commit, false)
279-
}
189+
for i, commit := range commits {
190+
minimalCommits[i] = convertToMinimalCommit(commit, false)
191+
}
280192

281193
r, err := json.Marshal(minimalCommits)
282194
if err != nil {

0 commit comments

Comments
 (0)