Skip to content

Commit 45c9bda

Browse files
Merge pull request #3 from prefapp/fix/1-weird-file-processing
fix: Performance and logic
2 parents fd2b3c2 + efc324e commit 45c9bda

4 files changed

Lines changed: 189 additions & 87 deletions

File tree

git/git.go

Lines changed: 91 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,47 @@ package git
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"os"
7-
"path/filepath"
88
"strings"
99

1010
"github.com/cli/go-gh/v2/pkg/repository"
11+
"github.com/go-git/go-git/v6"
1112
"github.com/google/go-github/v67/github"
12-
"github.com/prefapp/gh-commit/utils"
1313
)
1414

15+
func getGitPorcelain(dirPath string) (git.Status, error) {
16+
repo, err := git.PlainOpen(dirPath)
17+
if err != nil {
18+
return nil, err
19+
}
20+
wt, err := repo.Worktree()
21+
if err != nil {
22+
return nil, err
23+
}
24+
status, err := wt.Status()
25+
if err != nil {
26+
return nil, err
27+
}
28+
return status, nil
29+
}
30+
31+
func GetHeadBranch(repoPath string) (string, error) {
32+
repo, err := git.PlainOpen(repoPath)
33+
if err != nil {
34+
return "", err
35+
}
36+
37+
head, err := repo.Head()
38+
if err != nil {
39+
return "", err
40+
}
41+
headBranchName := strings.Split(head.Name().String(), "/")[2]
42+
43+
return headBranchName, nil
44+
}
45+
1546
func getCurrentCommit(ctx context.Context, client *github.Client, repo repository.Repository, branch string) (*github.RepositoryCommit, error) {
1647

1748
// Get the branch reference
@@ -94,112 +125,105 @@ func setBranchToCommit(ctx context.Context, client *github.Client, repo reposito
94125

95126
ref := fmt.Sprintf("refs/heads/%s", branch)
96127

97-
return client.Git.UpdateRef(ctx, repo.Owner, repo.Name, &github.Reference{
98-
Ref: github.String(ref),
99-
Object: &github.GitObject{
100-
SHA: commit.SHA,
101-
},
102-
}, true)
103-
}
104-
105-
func listFilesOrigin(ctx context.Context, client *github.Client, repo repository.Repository, branch string) ([]string, error) {
128+
refExists, _, _ := client.Git.GetRef(ctx, repo.Owner, repo.Name, ref)
106129

107-
// Get the current commit
108-
currentCommit, err := getCurrentCommit(ctx, client, repo, branch)
109-
if err != nil {
110-
return nil, err
111-
}
112-
113-
// Get the tree
114-
tree, _, err := client.Git.GetTree(ctx, repo.Owner, repo.Name, *currentCommit.Commit.Tree.SHA, true)
115-
// If there is an error here most likely the tree is not found and the repository is empty
116-
if err != nil {
117-
return []string{}, nil
118-
}
119-
120-
// Get the files
121-
files := []string{}
122-
for _, entry := range tree.Entries {
123-
files = append(files, *entry.Path)
130+
if refExists == nil {
131+
return client.Git.CreateRef(ctx, repo.Owner, repo.Name, &github.Reference{
132+
Ref: github.String(ref),
133+
Object: &github.GitObject{
134+
SHA: commit.SHA,
135+
},
136+
})
137+
} else {
138+
return client.Git.UpdateRef(ctx, repo.Owner, repo.Name, &github.Reference{
139+
Ref: github.String(ref),
140+
Object: &github.GitObject{
141+
SHA: commit.SHA,
142+
},
143+
}, true)
124144
}
125145

126-
return files, nil
127146
}
128147

129-
func getDeletedFiles(basePath string, originFiles []string, deletedPath string, updatedFiles []string) []string {
130-
131-
files := []string{}
132-
fmt.Println("--- Origin files--")
133-
fmt.Println(originFiles)
134-
for _, f := range originFiles {
135-
if deletedPath == "" && !utils.FileExistsInList(updatedFiles, filepath.Join(basePath, f)) && (strings.HasSuffix(f, ".yml") || strings.HasSuffix(f, ".yaml")) {
136-
files = append(files, f)
137-
continue
138-
}
139-
if strings.HasPrefix(f, deletedPath) && !utils.FileExistsInList(updatedFiles, filepath.Join(basePath, f)) {
140-
files = append(files, f)
141-
continue
148+
func getGroupedFiles(fileStatuses git.Status) ([]string, []string, []string, error) {
149+
addedFiles := []string{}
150+
updatedFiles := []string{}
151+
deletedFiles := []string{}
152+
153+
for file, status := range fileStatuses {
154+
switch fmt.Sprintf("%c", status.Worktree) {
155+
case "D":
156+
deletedFiles = append(deletedFiles, file)
157+
case "M", "R", "C", "U":
158+
updatedFiles = append(updatedFiles, file)
159+
case "?", "A":
160+
addedFiles = append(addedFiles, file)
161+
default:
162+
return nil, nil, nil, errors.New(
163+
fmt.Sprintf(
164+
"Unsupported status code %c for file %s",
165+
status.Worktree,
166+
file,
167+
),
168+
)
142169
}
143170
}
144171

145-
return files
146-
172+
return addedFiles, updatedFiles, deletedFiles, nil
147173
}
148174

149-
func UploadToRepo(ctx context.Context, client *github.Client, repo repository.Repository, path string, deletePath string, branch string, message string) (*github.Reference, *github.Response, error) {
175+
func UploadToRepo(ctx context.Context, client *github.Client, repo repository.Repository, path string, deletePath string, branch string, headBranch string, message string) (*github.Reference, *github.Response, error) {
150176

151177
// Get the current currentCommit
152-
currentCommit, err := getCurrentCommit(ctx, client, repo, branch)
178+
currentCommit, err := getCurrentCommit(ctx, client, repo, headBranch)
153179
if err != nil {
154-
panic(err)
180+
return nil, nil, err
155181
}
156182

157-
// List all files in the path
158-
files := utils.ListFiles(path, []string{".git"})
159-
fmt.Println("--- Files--")
160-
fmt.Println(files)
161-
// Get a list of deleted files, this means that the files that are in the origin repository inspecting the tree but in the files list
162-
// are not present
163-
originFiles, err := listFilesOrigin(ctx, client, repo, branch)
183+
fileStatuses, err := getGitPorcelain(path)
164184

185+
addedFiles, updatedFiles, deletedFiles, err := getGroupedFiles(fileStatuses)
165186
if err != nil {
166187
return nil, nil, err
167188
}
168189

169190
// Create a blob for each file
170191
blobs := []*github.Blob{}
171-
blobPaths := []string{}
192+
filePaths := []string{}
172193

173194
// Delete the files
174195
// Get the files that are deleted
175-
deletedFiles := getDeletedFiles(path, originFiles, deletePath, files)
176196
fmt.Println("--- Deleted files--")
177197
fmt.Println(deletedFiles)
178198

179-
for _, f := range deletedFiles {
180-
blobs = append(blobs, &github.Blob{
181-
SHA: nil,
182-
})
183-
blobPaths = append(blobPaths, f)
199+
for _, file := range deletedFiles {
200+
if strings.HasPrefix(file, deletePath) {
201+
blobs = append(blobs, &github.Blob{
202+
SHA: nil,
203+
})
204+
205+
filePaths = append(filePaths, file)
206+
}
184207
}
185208

209+
addedAndUpdatedFiles := append(updatedFiles, addedFiles...)
186210
// Get the updated files
187211
fmt.Println("--- Updated files--")
188-
fmt.Println(files)
212+
fmt.Println(addedAndUpdatedFiles)
189213

190-
for _, file := range files {
191-
blob, _, _ := createBlobForFile(ctx, client, repo, file)
214+
for _, file := range addedAndUpdatedFiles {
215+
blob, _, err := createBlobForFile(ctx, client, repo, file)
192216

193217
blobs = append(blobs, blob)
194-
relativePath, err := filepath.Rel(path, file)
195218

196219
if err != nil {
197220
return nil, nil, err
198221
}
199-
blobPaths = append(blobPaths, relativePath)
222+
223+
filePaths = append(filePaths, file)
200224
}
201225

202-
tree, _, err := createNewTree(ctx, client, repo, blobs, blobPaths, currentCommit.GetSHA())
226+
tree, _, err := createNewTree(ctx, client, repo, blobs, filePaths, currentCommit.GetSHA())
203227
if err != nil {
204228
return nil, nil, err
205229
}
@@ -210,5 +234,4 @@ func UploadToRepo(ctx context.Context, client *github.Client, repo repository.Re
210234
}
211235

212236
return setBranchToCommit(ctx, client, repo, branch, commit)
213-
214237
}

go.mod

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,33 @@
11
module github.com/prefapp/gh-commit
22

3-
go 1.23
3+
go 1.23.6
44

55
require (
66
github.com/cli/go-gh/v2 v2.11.1
7+
github.com/go-git/go-git/v6 v6.0.0-20250701074610-5d6af409877b
8+
github.com/gofri/go-github-ratelimit v1.1.0
79
github.com/google/go-github/v67 v67.0.0
810
)
911

1012
require (
13+
dario.cat/mergo v1.0.1 // indirect
14+
github.com/Microsoft/go-winio v0.6.2 // indirect
15+
github.com/ProtonMail/go-crypto v1.3.0 // indirect
1116
github.com/cli/safeexec v1.0.1 // indirect
12-
github.com/gofri/go-github-ratelimit v1.1.0 // indirect
17+
github.com/cloudflare/circl v1.6.1 // indirect
18+
github.com/cyphar/filepath-securejoin v0.4.1 // indirect
19+
github.com/emirpasic/gods v1.18.1 // indirect
20+
github.com/go-git/gcfg/v2 v2.0.2 // indirect
21+
github.com/go-git/go-billy/v6 v6.0.0-20250627091229-31e2a16eef30 // indirect
22+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
1323
github.com/google/go-querystring v1.1.0 // indirect
24+
github.com/kevinburke/ssh_config v1.2.0 // indirect
1425
github.com/kr/text v0.2.0 // indirect
15-
github.com/samber/lo v1.47.0 // indirect
16-
golang.org/x/text v0.16.0 // indirect
26+
github.com/pjbgf/sha1cd v0.3.2 // indirect
27+
github.com/sergi/go-diff v1.4.0 // indirect
28+
golang.org/x/crypto v0.39.0 // indirect
29+
golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b // indirect
30+
golang.org/x/net v0.41.0 // indirect
31+
golang.org/x/sys v0.33.0 // indirect
1732
gopkg.in/yaml.v3 v3.0.1 // indirect
1833
)

go.sum

Lines changed: 64 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,91 @@
1+
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
2+
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
13
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
24
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
5+
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
6+
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
7+
github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw=
8+
github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
9+
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
10+
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
11+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
12+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
313
github.com/cli/go-gh/v2 v2.11.1 h1:amAyfqMWQTBdue8iTmDUegGZK7c8kk6WCxD9l/wLtGI=
414
github.com/cli/go-gh/v2 v2.11.1/go.mod h1:MeRoKzXff3ygHu7zP+NVTT+imcHW6p3tpuxHAzRM2xE=
515
github.com/cli/safeexec v1.0.1 h1:e/C79PbXF4yYTN/wauC4tviMxEV13BwljGj0N9j+N00=
616
github.com/cli/safeexec v1.0.1/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q=
17+
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
18+
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
719
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
20+
github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
21+
github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
22+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
823
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
924
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
25+
github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o=
26+
github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE=
27+
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
28+
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
29+
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
30+
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
31+
github.com/go-git/gcfg/v2 v2.0.2 h1:MY5SIIfTGGEMhdA7d7JePuVVxtKL7Hp+ApGDJAJ7dpo=
32+
github.com/go-git/gcfg/v2 v2.0.2/go.mod h1:/lv2NsxvhepuMrldsFilrgct6pxzpGdSRC13ydTLSLs=
33+
github.com/go-git/go-billy/v6 v6.0.0-20250627091229-31e2a16eef30 h1:4KqVJTL5eanN8Sgg3BV6f2/QzfZEFbCd+rTak1fGRRA=
34+
github.com/go-git/go-billy/v6 v6.0.0-20250627091229-31e2a16eef30/go.mod h1:snwvGrbywVFy2d6KJdQ132zapq4aLyzLMgpo79XdEfM=
35+
github.com/go-git/go-git-fixtures/v5 v5.1.0 h1:b8cWxDLTk0s09Ihm9x1HvNGUzxUVlRwIH7EAM0gGDKg=
36+
github.com/go-git/go-git-fixtures/v5 v5.1.0/go.mod h1:CdmU0oQeDuy4Xh8V0i9Ym+vsTkgDDPKEiofBFEVT+aE=
37+
github.com/go-git/go-git/v6 v6.0.0-20250701074610-5d6af409877b h1:RiPGp79QhrlyuvPZMrw5itS09dHWfGJXZO8ZdTj3c/8=
38+
github.com/go-git/go-git/v6 v6.0.0-20250701074610-5d6af409877b/go.mod h1:tpkc29U+XwnSF0vlxB0LUFedJdFT63Vzws7fA5qr1Hg=
1039
github.com/gofri/go-github-ratelimit v1.1.0 h1:ijQ2bcv5pjZXNil5FiwglCg8wc9s8EgjTmNkqjw8nuk=
1140
github.com/gofri/go-github-ratelimit v1.1.0/go.mod h1:OnCi5gV+hAG/LMR7llGhU7yHt44se9sYgKPnafoL7RY=
41+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
42+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
1243
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
1344
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
1445
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
1546
github.com/google/go-github/v67 v67.0.0 h1:g11NDAmfaBaCO8qYdI9fsmbaRipHNWRIU/2YGvlh4rg=
1647
github.com/google/go-github/v67 v67.0.0/go.mod h1:zH3K7BxjFndr9QSeFibx4lTKkYS3K9nDanoI1NjaOtY=
1748
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
1849
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
19-
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
50+
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
51+
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
2052
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
53+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
54+
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
55+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
56+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
2157
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
2258
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
59+
github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
60+
github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
2361
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2462
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
25-
github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
26-
github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
27-
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
28-
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
29-
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
30-
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
63+
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
64+
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
65+
github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
66+
github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
67+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
68+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
69+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
70+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
71+
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
72+
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
73+
golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b h1:QoALfVG9rhQ/M7vYDScfPdWjGL9dlsVVM5VGh7aKoAA=
74+
golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ=
75+
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
76+
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
77+
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
78+
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
79+
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
80+
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
81+
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
82+
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
3183
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
3284
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
33-
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
34-
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
85+
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
86+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
87+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
88+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
89+
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
3590
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
3691
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)