Skip to content

Commit 69f5ee9

Browse files
lunnywxiaoguang
andauthored
Move some functions to gitrepo package (#35543)
Refactor Git command functions to use WithXXX methods instead of exposing RunOpts. This change simplifies reuse across gitrepo and improves consistency, encapsulation, and maintainability of command options. --------- Co-authored-by: wxiaoguang <[email protected]>
1 parent c9e7fde commit 69f5ee9

File tree

114 files changed

+1187
-918
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+1187
-918
lines changed

cmd/admin.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ func runRepoSyncReleases(ctx context.Context, _ *cli.Command) error {
121121
}
122122
log.Trace("Processing next %d repos of %d", len(repos), count)
123123
for _, repo := range repos {
124-
log.Trace("Synchronizing repo %s with path %s", repo.FullName(), repo.RepoPath())
124+
log.Trace("Synchronizing repo %s with path %s", repo.FullName(), repo.RelativePath())
125125
gitRepo, err := gitrepo.OpenRepository(ctx, repo)
126126
if err != nil {
127127
log.Warn("OpenRepository: %v", err)
@@ -147,7 +147,7 @@ func runRepoSyncReleases(ctx context.Context, _ *cli.Command) error {
147147
continue
148148
}
149149

150-
log.Trace(" repo %s releases synchronized to tags: from %d to %d",
150+
log.Trace("repo %s releases synchronized to tags: from %d to %d",
151151
repo.FullName(), oldnum, count)
152152
gitRepo.Close()
153153
}

cmd/hook.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ func runHookPostReceive(ctx context.Context, c *cli.Command) error {
313313
setup(ctx, c.Bool("debug"))
314314

315315
// First of all run update-server-info no matter what
316-
if _, _, err := gitcmd.NewCommand("update-server-info").RunStdString(ctx, nil); err != nil {
316+
if _, _, err := gitcmd.NewCommand("update-server-info").RunStdString(ctx); err != nil {
317317
return fmt.Errorf("failed to call 'git update-server-info': %w", err)
318318
}
319319

models/migrations/v1_12/v128.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,17 @@ func FixMergeBase(ctx context.Context, x *xorm.Engine) error {
8484

8585
if !pr.HasMerged {
8686
var err error
87-
pr.MergeBase, _, err = gitcmd.NewCommand("merge-base").AddDashesAndList(pr.BaseBranch, gitRefName).RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
87+
pr.MergeBase, _, err = gitcmd.NewCommand("merge-base").AddDashesAndList(pr.BaseBranch, gitRefName).WithDir(repoPath).RunStdString(ctx)
8888
if err != nil {
8989
var err2 error
90-
pr.MergeBase, _, err2 = gitcmd.NewCommand("rev-parse").AddDynamicArguments(git.BranchPrefix+pr.BaseBranch).RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
90+
pr.MergeBase, _, err2 = gitcmd.NewCommand("rev-parse").AddDynamicArguments(git.BranchPrefix + pr.BaseBranch).WithDir(repoPath).RunStdString(ctx)
9191
if err2 != nil {
9292
log.Error("Unable to get merge base for PR ID %d, Index %d in %s/%s. Error: %v & %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err, err2)
9393
continue
9494
}
9595
}
9696
} else {
97-
parentsString, _, err := gitcmd.NewCommand("rev-list", "--parents", "-n", "1").AddDynamicArguments(pr.MergedCommitID).RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
97+
parentsString, _, err := gitcmd.NewCommand("rev-list", "--parents", "-n", "1").AddDynamicArguments(pr.MergedCommitID).WithDir(repoPath).RunStdString(ctx)
9898
if err != nil {
9999
log.Error("Unable to get parents for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
100100
continue
@@ -108,7 +108,7 @@ func FixMergeBase(ctx context.Context, x *xorm.Engine) error {
108108
refs = append(refs, gitRefName)
109109
cmd := gitcmd.NewCommand("merge-base").AddDashesAndList(refs...)
110110

111-
pr.MergeBase, _, err = cmd.RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
111+
pr.MergeBase, _, err = cmd.WithDir(repoPath).RunStdString(ctx)
112112
if err != nil {
113113
log.Error("Unable to get merge base for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
114114
continue

models/migrations/v1_12/v134.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func RefixMergeBase(ctx context.Context, x *xorm.Engine) error {
8080

8181
gitRefName := fmt.Sprintf("refs/pull/%d/head", pr.Index)
8282

83-
parentsString, _, err := gitcmd.NewCommand("rev-list", "--parents", "-n", "1").AddDynamicArguments(pr.MergedCommitID).RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
83+
parentsString, _, err := gitcmd.NewCommand("rev-list", "--parents", "-n", "1").AddDynamicArguments(pr.MergedCommitID).WithDir(repoPath).RunStdString(ctx)
8484
if err != nil {
8585
log.Error("Unable to get parents for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
8686
continue
@@ -95,7 +95,7 @@ func RefixMergeBase(ctx context.Context, x *xorm.Engine) error {
9595
refs = append(refs, gitRefName)
9696
cmd := gitcmd.NewCommand("merge-base").AddDashesAndList(refs...)
9797

98-
pr.MergeBase, _, err = cmd.RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
98+
pr.MergeBase, _, err = cmd.WithDir(repoPath).RunStdString(ctx)
9999
if err != nil {
100100
log.Error("Unable to get merge base for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
101101
continue

modules/git/attribute/batch.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,12 @@ func NewBatchChecker(repo *git.Repository, treeish string, attributes []string)
7777
_ = lw.Close()
7878
}()
7979
stdErr := new(bytes.Buffer)
80-
err := cmd.Run(ctx, &gitcmd.RunOpts{
81-
Env: envs,
82-
Dir: repo.Path,
83-
Stdin: stdinReader,
84-
Stdout: lw,
85-
Stderr: stdErr,
86-
})
80+
err := cmd.WithEnv(envs).
81+
WithDir(repo.Path).
82+
WithStdin(stdinReader).
83+
WithStdout(lw).
84+
WithStderr(stdErr).
85+
Run(ctx)
8786

8887
if err != nil && !git.IsErrCanceledOrKilled(err) {
8988
log.Error("Attribute checker for commit %s exits with error: %v", treeish, err)

modules/git/attribute/checker.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,11 @@ func CheckAttributes(ctx context.Context, gitRepo *git.Repository, treeish strin
7171
stdOut := new(bytes.Buffer)
7272
stdErr := new(bytes.Buffer)
7373

74-
if err := cmd.Run(ctx, &gitcmd.RunOpts{
75-
Env: append(os.Environ(), envs...),
76-
Dir: gitRepo.Path,
77-
Stdout: stdOut,
78-
Stderr: stdErr,
79-
}); err != nil {
74+
if err := cmd.WithEnv(append(os.Environ(), envs...)).
75+
WithDir(gitRepo.Path).
76+
WithStdout(stdOut).
77+
WithStderr(stdErr).
78+
Run(ctx); err != nil {
8079
return nil, fmt.Errorf("failed to run check-attr: %w\n%s\n%s", err, stdOut.String(), stdErr.String())
8180
}
8281

modules/git/batch_reader.go

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,9 @@ type WriteCloserError interface {
3131
func ensureValidGitRepository(ctx context.Context, repoPath string) error {
3232
stderr := strings.Builder{}
3333
err := gitcmd.NewCommand("rev-parse").
34-
Run(ctx, &gitcmd.RunOpts{
35-
Dir: repoPath,
36-
Stderr: &stderr,
37-
})
34+
WithDir(repoPath).
35+
WithStderr(&stderr).
36+
Run(ctx)
3837
if err != nil {
3938
return gitcmd.ConcatenateError(err, (&stderr).String())
4039
}
@@ -63,14 +62,12 @@ func catFileBatchCheck(ctx context.Context, repoPath string) (WriteCloserError,
6362
go func() {
6463
stderr := strings.Builder{}
6564
err := gitcmd.NewCommand("cat-file", "--batch-check").
66-
Run(ctx, &gitcmd.RunOpts{
67-
Dir: repoPath,
68-
Stdin: batchStdinReader,
69-
Stdout: batchStdoutWriter,
70-
Stderr: &stderr,
71-
72-
UseContextTimeout: true,
73-
})
65+
WithDir(repoPath).
66+
WithStdin(batchStdinReader).
67+
WithStdout(batchStdoutWriter).
68+
WithStderr(&stderr).
69+
WithUseContextTimeout(true).
70+
Run(ctx)
7471
if err != nil {
7572
_ = batchStdoutWriter.CloseWithError(gitcmd.ConcatenateError(err, (&stderr).String()))
7673
_ = batchStdinReader.CloseWithError(gitcmd.ConcatenateError(err, (&stderr).String()))
@@ -111,14 +108,12 @@ func catFileBatch(ctx context.Context, repoPath string) (WriteCloserError, *bufi
111108
go func() {
112109
stderr := strings.Builder{}
113110
err := gitcmd.NewCommand("cat-file", "--batch").
114-
Run(ctx, &gitcmd.RunOpts{
115-
Dir: repoPath,
116-
Stdin: batchStdinReader,
117-
Stdout: batchStdoutWriter,
118-
Stderr: &stderr,
119-
120-
UseContextTimeout: true,
121-
})
111+
WithDir(repoPath).
112+
WithStdin(batchStdinReader).
113+
WithStdout(batchStdoutWriter).
114+
WithStderr(&stderr).
115+
WithUseContextTimeout(true).
116+
Run(ctx)
122117
if err != nil {
123118
_ = batchStdoutWriter.CloseWithError(gitcmd.ConcatenateError(err, (&stderr).String()))
124119
_ = batchStdinReader.CloseWithError(gitcmd.ConcatenateError(err, (&stderr).String()))

modules/git/blame.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,11 @@ func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath
166166
go func() {
167167
stderr := bytes.Buffer{}
168168
// TODO: it doesn't work for directories (the directories shouldn't be "blamed"), and the "err" should be returned by "Read" but not by "Close"
169-
err := cmd.Run(ctx, &gitcmd.RunOpts{
170-
UseContextTimeout: true,
171-
Dir: repoPath,
172-
Stdout: stdout,
173-
Stderr: &stderr,
174-
})
169+
err := cmd.WithDir(repoPath).
170+
WithUseContextTimeout(true).
171+
WithStdout(stdout).
172+
WithStderr(&stderr).
173+
Run(ctx)
175174
done <- err
176175
_ = stdout.Close()
177176
if err != nil {

modules/git/commit.go

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func AddChanges(ctx context.Context, repoPath string, all bool, files ...string)
9393
cmd.AddArguments("--all")
9494
}
9595
cmd.AddDashesAndList(files...)
96-
_, _, err := cmd.RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
96+
_, _, err := cmd.WithDir(repoPath).RunStdString(ctx)
9797
return err
9898
}
9999

@@ -122,7 +122,7 @@ func CommitChanges(ctx context.Context, repoPath string, opts CommitChangesOptio
122122
}
123123
cmd.AddOptionFormat("--message=%s", opts.Message)
124124

125-
_, _, err := cmd.RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
125+
_, _, err := cmd.WithDir(repoPath).RunStdString(ctx)
126126
// No stderr but exit status 1 means nothing to commit.
127127
if err != nil && err.Error() == "exit status 1" {
128128
return nil
@@ -141,7 +141,7 @@ func AllCommitsCount(ctx context.Context, repoPath string, hidePRRefs bool, file
141141
cmd.AddDashesAndList(files...)
142142
}
143143

144-
stdout, _, err := cmd.RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
144+
stdout, _, err := cmd.WithDir(repoPath).RunStdString(ctx)
145145
if err != nil {
146146
return 0, err
147147
}
@@ -173,7 +173,7 @@ func CommitsCount(ctx context.Context, opts CommitsCountOptions) (int64, error)
173173
cmd.AddDashesAndList(opts.RelPath...)
174174
}
175175

176-
stdout, _, err := cmd.RunStdString(ctx, &gitcmd.RunOpts{Dir: opts.RepoPath})
176+
stdout, _, err := cmd.WithDir(opts.RepoPath).RunStdString(ctx)
177177
if err != nil {
178178
return 0, err
179179
}
@@ -208,7 +208,10 @@ func (c *Commit) HasPreviousCommit(objectID ObjectID) (bool, error) {
208208
return false, nil
209209
}
210210

211-
_, _, err := gitcmd.NewCommand("merge-base", "--is-ancestor").AddDynamicArguments(that, this).RunStdString(c.repo.Ctx, &gitcmd.RunOpts{Dir: c.repo.Path})
211+
_, _, err := gitcmd.NewCommand("merge-base", "--is-ancestor").
212+
AddDynamicArguments(that, this).
213+
WithDir(c.repo.Path).
214+
RunStdString(c.repo.Ctx)
212215
if err == nil {
213216
return true, nil
214217
}
@@ -354,7 +357,7 @@ func (c *Commit) GetBranchName() (string, error) {
354357
cmd.AddArguments("--exclude", "refs/tags/*")
355358
}
356359
cmd.AddArguments("--name-only", "--no-undefined").AddDynamicArguments(c.ID.String())
357-
data, _, err := cmd.RunStdString(c.repo.Ctx, &gitcmd.RunOpts{Dir: c.repo.Path})
360+
data, _, err := cmd.WithDir(c.repo.Path).RunStdString(c.repo.Ctx)
358361
if err != nil {
359362
// handle special case where git can not describe commit
360363
if strings.Contains(err.Error(), "cannot describe") {
@@ -432,11 +435,12 @@ func GetCommitFileStatus(ctx context.Context, repoPath, commitID string) (*Commi
432435
}()
433436

434437
stderr := new(bytes.Buffer)
435-
err := gitcmd.NewCommand("log", "--name-status", "-m", "--pretty=format:", "--first-parent", "--no-renames", "-z", "-1").AddDynamicArguments(commitID).Run(ctx, &gitcmd.RunOpts{
436-
Dir: repoPath,
437-
Stdout: w,
438-
Stderr: stderr,
439-
})
438+
err := gitcmd.NewCommand("log", "--name-status", "-m", "--pretty=format:", "--first-parent", "--no-renames", "-z", "-1").
439+
AddDynamicArguments(commitID).
440+
WithDir(repoPath).
441+
WithStdout(w).
442+
WithStderr(stderr).
443+
Run(ctx)
440444
w.Close() // Close writer to exit parsing goroutine
441445
if err != nil {
442446
return nil, gitcmd.ConcatenateError(err, stderr.String())
@@ -448,7 +452,10 @@ func GetCommitFileStatus(ctx context.Context, repoPath, commitID string) (*Commi
448452

449453
// GetFullCommitID returns full length (40) of commit ID by given short SHA in a repository.
450454
func GetFullCommitID(ctx context.Context, repoPath, shortID string) (string, error) {
451-
commitID, _, err := gitcmd.NewCommand("rev-parse").AddDynamicArguments(shortID).RunStdString(ctx, &gitcmd.RunOpts{Dir: repoPath})
455+
commitID, _, err := gitcmd.NewCommand("rev-parse").
456+
AddDynamicArguments(shortID).
457+
WithDir(repoPath).
458+
RunStdString(ctx)
452459
if err != nil {
453460
if strings.Contains(err.Error(), "exit status 128") {
454461
return "", ErrNotExist{shortID, ""}

modules/git/config.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ func syncGitConfig(ctx context.Context) (err error) {
118118
}
119119

120120
func configSet(ctx context.Context, key, value string) error {
121-
stdout, _, err := gitcmd.NewCommand("config", "--global", "--get").AddDynamicArguments(key).RunStdString(ctx, nil)
121+
stdout, _, err := gitcmd.NewCommand("config", "--global", "--get").
122+
AddDynamicArguments(key).
123+
RunStdString(ctx)
122124
if err != nil && !gitcmd.IsErrorExitCode(err, 1) {
123125
return fmt.Errorf("failed to get git config %s, err: %w", key, err)
124126
}
@@ -128,23 +130,24 @@ func configSet(ctx context.Context, key, value string) error {
128130
return nil
129131
}
130132

131-
_, _, err = gitcmd.NewCommand("config", "--global").AddDynamicArguments(key, value).RunStdString(ctx, nil)
132-
if err != nil {
133+
if _, _, err = gitcmd.NewCommand("config", "--global").
134+
AddDynamicArguments(key, value).
135+
RunStdString(ctx); err != nil {
133136
return fmt.Errorf("failed to set git global config %s, err: %w", key, err)
134137
}
135138

136139
return nil
137140
}
138141

139142
func configSetNonExist(ctx context.Context, key, value string) error {
140-
_, _, err := gitcmd.NewCommand("config", "--global", "--get").AddDynamicArguments(key).RunStdString(ctx, nil)
143+
_, _, err := gitcmd.NewCommand("config", "--global", "--get").AddDynamicArguments(key).RunStdString(ctx)
141144
if err == nil {
142145
// already exist
143146
return nil
144147
}
145148
if gitcmd.IsErrorExitCode(err, 1) {
146149
// not exist, set new config
147-
_, _, err = gitcmd.NewCommand("config", "--global").AddDynamicArguments(key, value).RunStdString(ctx, nil)
150+
_, _, err = gitcmd.NewCommand("config", "--global").AddDynamicArguments(key, value).RunStdString(ctx)
148151
if err != nil {
149152
return fmt.Errorf("failed to set git global config %s, err: %w", key, err)
150153
}
@@ -155,14 +158,14 @@ func configSetNonExist(ctx context.Context, key, value string) error {
155158
}
156159

157160
func configAddNonExist(ctx context.Context, key, value string) error {
158-
_, _, err := gitcmd.NewCommand("config", "--global", "--get").AddDynamicArguments(key, regexp.QuoteMeta(value)).RunStdString(ctx, nil)
161+
_, _, err := gitcmd.NewCommand("config", "--global", "--get").AddDynamicArguments(key, regexp.QuoteMeta(value)).RunStdString(ctx)
159162
if err == nil {
160163
// already exist
161164
return nil
162165
}
163166
if gitcmd.IsErrorExitCode(err, 1) {
164167
// not exist, add new config
165-
_, _, err = gitcmd.NewCommand("config", "--global", "--add").AddDynamicArguments(key, value).RunStdString(ctx, nil)
168+
_, _, err = gitcmd.NewCommand("config", "--global", "--add").AddDynamicArguments(key, value).RunStdString(ctx)
166169
if err != nil {
167170
return fmt.Errorf("failed to add git global config %s, err: %w", key, err)
168171
}
@@ -172,10 +175,10 @@ func configAddNonExist(ctx context.Context, key, value string) error {
172175
}
173176

174177
func configUnsetAll(ctx context.Context, key, value string) error {
175-
_, _, err := gitcmd.NewCommand("config", "--global", "--get").AddDynamicArguments(key).RunStdString(ctx, nil)
178+
_, _, err := gitcmd.NewCommand("config", "--global", "--get").AddDynamicArguments(key).RunStdString(ctx)
176179
if err == nil {
177180
// exist, need to remove
178-
_, _, err = gitcmd.NewCommand("config", "--global", "--unset-all").AddDynamicArguments(key, regexp.QuoteMeta(value)).RunStdString(ctx, nil)
181+
_, _, err = gitcmd.NewCommand("config", "--global", "--unset-all").AddDynamicArguments(key, regexp.QuoteMeta(value)).RunStdString(ctx)
179182
if err != nil {
180183
return fmt.Errorf("failed to unset git global config %s, err: %w", key, err)
181184
}

0 commit comments

Comments
 (0)