From ce0ec3b96506c8cb9125722ceb985e999235feac Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 22 Mar 2025 16:12:25 -0700 Subject: [PATCH 1/2] Move duplicated functions --- modules/git/batch_reader.go | 11 +++++---- modules/git/command.go | 2 +- modules/git/commit.go | 2 +- modules/git/hook.go | 30 ++++++++++++++++++----- modules/git/log_name_status.go | 3 ++- modules/git/pipeline/lfs_nogogit.go | 3 ++- modules/git/repo.go | 3 ++- modules/git/repo_archive.go | 4 +++- modules/git/repo_base_gogit.go | 7 +++++- modules/git/repo_base_nogogit.go | 7 +++++- modules/git/repo_branch_nogogit.go | 3 ++- modules/git/repo_commit.go | 3 ++- modules/git/repo_ref_nogogit.go | 4 +++- modules/git/repo_tag.go | 2 +- modules/git/repo_tree.go | 4 +++- modules/git/utils.go | 37 ----------------------------- modules/util/error.go | 8 +++++++ services/pull/patch_unmerged.go | 3 ++- services/pull/pull.go | 2 +- 19 files changed, 75 insertions(+), 63 deletions(-) diff --git a/modules/git/batch_reader.go b/modules/git/batch_reader.go index 7bbab76bb821c..8ba5473d70ded 100644 --- a/modules/git/batch_reader.go +++ b/modules/git/batch_reader.go @@ -13,6 +13,7 @@ import ( "strings" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/util" "github.com/djherbis/buffer" "github.com/djherbis/nio/v3" @@ -35,7 +36,7 @@ func ensureValidGitRepository(ctx context.Context, repoPath string) error { Stderr: &stderr, }) if err != nil { - return ConcatenateError(err, (&stderr).String()) + return util.ConcatenateError(err, (&stderr).String()) } return nil } @@ -71,8 +72,8 @@ func catFileBatchCheck(ctx context.Context, repoPath string) (WriteCloserError, UseContextTimeout: true, }) if err != nil { - _ = batchStdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String())) - _ = batchStdinReader.CloseWithError(ConcatenateError(err, (&stderr).String())) + _ = batchStdoutWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) + _ = batchStdinReader.CloseWithError(util.ConcatenateError(err, (&stderr).String())) } else { _ = batchStdoutWriter.Close() _ = batchStdinReader.Close() @@ -119,8 +120,8 @@ func catFileBatch(ctx context.Context, repoPath string) (WriteCloserError, *bufi UseContextTimeout: true, }) if err != nil { - _ = batchStdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String())) - _ = batchStdinReader.CloseWithError(ConcatenateError(err, (&stderr).String())) + _ = batchStdoutWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) + _ = batchStdinReader.CloseWithError(util.ConcatenateError(err, (&stderr).String())) } else { _ = batchStdoutWriter.Close() _ = batchStdinReader.Close() diff --git a/modules/git/command.go b/modules/git/command.go index d85a91804aac8..aee4780caa369 100644 --- a/modules/git/command.go +++ b/modules/git/command.go @@ -380,7 +380,7 @@ type runStdError struct { func (r *runStdError) Error() string { // the stderr must be in the returned error text, some code only checks `strings.Contains(err.Error(), "git error")` if r.errMsg == "" { - r.errMsg = ConcatenateError(r.err, r.stderr).Error() + r.errMsg = util.ConcatenateError(r.err, r.stderr).Error() } return r.errMsg } diff --git a/modules/git/commit.go b/modules/git/commit.go index 3e790e89d92d1..00423e3966189 100644 --- a/modules/git/commit.go +++ b/modules/git/commit.go @@ -448,7 +448,7 @@ func GetCommitFileStatus(ctx context.Context, repoPath, commitID string) (*Commi }) w.Close() // Close writer to exit parsing goroutine if err != nil { - return nil, ConcatenateError(err, stderr.String()) + return nil, util.ConcatenateError(err, stderr.String()) } <-done diff --git a/modules/git/hook.go b/modules/git/hook.go index 46f93ce13ec09..17484814d7c60 100644 --- a/modules/git/hook.go +++ b/modules/git/hook.go @@ -51,17 +51,28 @@ func GetHook(repoPath, name string) (*Hook, error) { } h := &Hook{ name: name, - path: path.Join(repoPath, "hooks", name+".d", name), + path: filepath.Join(repoPath, "hooks", name+".d", name), } - samplePath := filepath.Join(repoPath, "hooks", name+".sample") - if isFile(h.path) { + isFile, err := util.IsFile(h.path) + if err != nil { + return nil, err + } + if isFile { data, err := os.ReadFile(h.path) if err != nil { return nil, err } h.IsActive = true h.Content = string(data) - } else if isFile(samplePath) { + return h, nil + } + + samplePath := filepath.Join(repoPath, "hooks", name+".sample") + isFile, err = util.IsFile(samplePath) + if err != nil { + return nil, err + } + if isFile { data, err := os.ReadFile(samplePath) if err != nil { return nil, err @@ -79,7 +90,11 @@ func (h *Hook) Name() string { // Update updates hook settings. func (h *Hook) Update() error { if len(strings.TrimSpace(h.Content)) == 0 { - if isExist(h.path) { + exist, err := util.IsExist(h.path) + if err != nil { + return err + } + if exist { err := util.Remove(h.path) if err != nil { return err @@ -103,7 +118,10 @@ func (h *Hook) Update() error { // ListHooks returns a list of Git hooks of given repository. func ListHooks(repoPath string) (_ []*Hook, err error) { - if !isDir(path.Join(repoPath, "hooks")) { + exist, err := util.IsDir(filepath.Join(repoPath, "hooks")) + if err != nil { + return nil, err + } else if !exist { return nil, errors.New("hooks path does not exist") } diff --git a/modules/git/log_name_status.go b/modules/git/log_name_status.go index 0e9e22f1dc454..61c7177ed9496 100644 --- a/modules/git/log_name_status.go +++ b/modules/git/log_name_status.go @@ -14,6 +14,7 @@ import ( "strings" "code.gitea.io/gitea/modules/container" + "code.gitea.io/gitea/modules/util" "github.com/djherbis/buffer" "github.com/djherbis/nio/v3" @@ -70,7 +71,7 @@ func LogNameStatusRepo(ctx context.Context, repository, head, treepath string, p Stderr: &stderr, }) if err != nil { - _ = stdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String())) + _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) return } diff --git a/modules/git/pipeline/lfs_nogogit.go b/modules/git/pipeline/lfs_nogogit.go index c5eed737011a6..12eb15b315ec1 100644 --- a/modules/git/pipeline/lfs_nogogit.go +++ b/modules/git/pipeline/lfs_nogogit.go @@ -14,6 +14,7 @@ import ( "sync" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/util" ) // FindLFSFile finds commits that contain a provided pointer file hash @@ -38,7 +39,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err Stderr: &stderr, }) if err != nil { - _ = revListWriter.CloseWithError(git.ConcatenateError(err, (&stderr).String())) + _ = revListWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) } else { _ = revListWriter.Close() } diff --git a/modules/git/repo.go b/modules/git/repo.go index 6459adf851807..2a4cfa81afac9 100644 --- a/modules/git/repo.go +++ b/modules/git/repo.go @@ -18,6 +18,7 @@ import ( "time" "code.gitea.io/gitea/modules/proxy" + "code.gitea.io/gitea/modules/util" ) // GPGSettings represents the default GPG settings for this repository @@ -176,7 +177,7 @@ func CloneWithArgs(ctx context.Context, args TrustedCmdArgs, from, to string, op Stdout: io.Discard, Stderr: stderr, }); err != nil { - return ConcatenateError(err, stderr.String()) + return util.ConcatenateError(err, stderr.String()) } return nil } diff --git a/modules/git/repo_archive.go b/modules/git/repo_archive.go index 0b2f6f2a45323..a241f5ac97b0e 100644 --- a/modules/git/repo_archive.go +++ b/modules/git/repo_archive.go @@ -10,6 +10,8 @@ import ( "io" "path/filepath" "strings" + + "code.gitea.io/gitea/modules/util" ) // ArchiveType archive types @@ -67,7 +69,7 @@ func (repo *Repository) CreateArchive(ctx context.Context, format ArchiveType, t Stderr: &stderr, }) if err != nil { - return ConcatenateError(err, stderr.String()) + return util.ConcatenateError(err, stderr.String()) } return nil } diff --git a/modules/git/repo_base_gogit.go b/modules/git/repo_base_gogit.go index 0ca1ea79c21aa..293aca159c913 100644 --- a/modules/git/repo_base_gogit.go +++ b/modules/git/repo_base_gogit.go @@ -49,7 +49,12 @@ func OpenRepository(ctx context.Context, repoPath string) (*Repository, error) { repoPath, err := filepath.Abs(repoPath) if err != nil { return nil, err - } else if !isDir(repoPath) { + } + exist, err := util.IsDir(repoPath) + if err != nil { + return nil, err + } + if !exist { return nil, util.NewNotExistErrorf("no such file or directory") } diff --git a/modules/git/repo_base_nogogit.go b/modules/git/repo_base_nogogit.go index 477e3b8742976..f5606346c4099 100644 --- a/modules/git/repo_base_nogogit.go +++ b/modules/git/repo_base_nogogit.go @@ -47,7 +47,12 @@ func OpenRepository(ctx context.Context, repoPath string) (*Repository, error) { repoPath, err := filepath.Abs(repoPath) if err != nil { return nil, err - } else if !isDir(repoPath) { + } + exist, err := util.IsDir(repoPath) + if err != nil { + return nil, err + } + if !exist { return nil, util.NewNotExistErrorf("no such file or directory") } diff --git a/modules/git/repo_branch_nogogit.go b/modules/git/repo_branch_nogogit.go index 0d11198523515..ec987c5887cdb 100644 --- a/modules/git/repo_branch_nogogit.go +++ b/modules/git/repo_branch_nogogit.go @@ -14,6 +14,7 @@ import ( "strings" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/util" ) // IsObjectExist returns true if the given object exists in the repository. @@ -119,7 +120,7 @@ func WalkShowRef(ctx context.Context, repoPath string, extraArgs TrustedCmdArgs, _ = stdoutWriter.Close() return } - _ = stdoutWriter.CloseWithError(ConcatenateError(err, stderrBuilder.String())) + _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, stderrBuilder.String())) } else { _ = stdoutWriter.Close() } diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go index 72f35711f0fd6..1eb5e21d181fa 100644 --- a/modules/git/repo_commit.go +++ b/modules/git/repo_commit.go @@ -13,6 +13,7 @@ import ( "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/util" ) // GetBranchCommitID returns last commit ID string of given branch. @@ -239,7 +240,7 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions) Stderr: &stderr, }) if err != nil { - _ = stdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String())) + _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) } else { _ = stdoutWriter.Close() } diff --git a/modules/git/repo_ref_nogogit.go b/modules/git/repo_ref_nogogit.go index 8d34713eaf319..e0ad1153d164d 100644 --- a/modules/git/repo_ref_nogogit.go +++ b/modules/git/repo_ref_nogogit.go @@ -9,6 +9,8 @@ import ( "bufio" "io" "strings" + + "code.gitea.io/gitea/modules/util" ) // GetRefsFiltered returns all references of the repository that matches patterm exactly or starting with. @@ -27,7 +29,7 @@ func (repo *Repository) GetRefsFiltered(pattern string) ([]*Reference, error) { Stderr: stderrBuilder, }) if err != nil { - _ = stdoutWriter.CloseWithError(ConcatenateError(err, stderrBuilder.String())) + _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, stderrBuilder.String())) } else { _ = stdoutWriter.Close() } diff --git a/modules/git/repo_tag.go b/modules/git/repo_tag.go index c74618471a047..416d1896206b4 100644 --- a/modules/git/repo_tag.go +++ b/modules/git/repo_tag.go @@ -121,7 +121,7 @@ func (repo *Repository) GetTagInfos(page, pageSize int) ([]*Tag, int, error) { AddOptionFormat("--format=%s", forEachRefFmt.Flag()). AddArguments("--sort", "-*creatordate", "refs/tags").Run(repo.Ctx, rc) if err != nil { - _ = stdoutWriter.CloseWithError(ConcatenateError(err, stderr.String())) + _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, stderr.String())) } else { _ = stdoutWriter.Close() } diff --git a/modules/git/repo_tree.go b/modules/git/repo_tree.go index 70e5aee02353f..69423cf41874c 100644 --- a/modules/git/repo_tree.go +++ b/modules/git/repo_tree.go @@ -9,6 +9,8 @@ import ( "os" "strings" "time" + + "code.gitea.io/gitea/modules/util" ) // CommitTreeOpts represents the possible options to CommitTree @@ -61,7 +63,7 @@ func (repo *Repository) CommitTree(author, committer *Signature, tree *Tree, opt Stderr: stderr, }) if err != nil { - return nil, ConcatenateError(err, stderr.String()) + return nil, util.ConcatenateError(err, stderr.String()) } return NewIDFromString(strings.TrimSpace(stdout.String())) } diff --git a/modules/git/utils.go b/modules/git/utils.go index 56cba9087a35a..7f94c932c32d2 100644 --- a/modules/git/utils.go +++ b/modules/git/utils.go @@ -6,9 +6,7 @@ package git import ( "crypto/sha1" "encoding/hex" - "fmt" "io" - "os" "strconv" "strings" "sync" @@ -41,41 +39,6 @@ func (oc *ObjectCache[T]) Get(id string) (T, bool) { return obj, has } -// isDir returns true if given path is a directory, -// or returns false when it's a file or does not exist. -func isDir(dir string) bool { - f, e := os.Stat(dir) - if e != nil { - return false - } - return f.IsDir() -} - -// isFile returns true if given path is a file, -// or returns false when it's a directory or does not exist. -func isFile(filePath string) bool { - f, e := os.Stat(filePath) - if e != nil { - return false - } - return !f.IsDir() -} - -// isExist checks whether a file or directory exists. -// It returns false when the file or directory does not exist. -func isExist(path string) bool { - _, err := os.Stat(path) - return err == nil || os.IsExist(err) -} - -// ConcatenateError concatenats an error with stderr string -func ConcatenateError(err error, stderr string) error { - if len(stderr) == 0 { - return err - } - return fmt.Errorf("%w - %s", err, stderr) -} - // ParseBool returns the boolean value represented by the string as per git's git_config_bool // true will be returned for the result if the string is empty, but valid will be false. // "true", "yes", "on" are all true, true diff --git a/modules/util/error.go b/modules/util/error.go index 8e67d5a82fb6d..b292020c495d6 100644 --- a/modules/util/error.go +++ b/modules/util/error.go @@ -95,3 +95,11 @@ func ErrorAsLocale(err error) *LocaleWrapper { } return nil } + +// ConcatenateError concatenats an error with stderr string +func ConcatenateError(err error, stderr string) error { + if len(stderr) == 0 { + return err + } + return fmt.Errorf("%w - %s", err, stderr) +} diff --git a/services/pull/patch_unmerged.go b/services/pull/patch_unmerged.go index 200d2233e9345..cd28a170d8f9f 100644 --- a/services/pull/patch_unmerged.go +++ b/services/pull/patch_unmerged.go @@ -15,6 +15,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/util" ) // lsFileLine is a Quadruplet struct (+error) representing a partially parsed line from ls-files @@ -116,7 +117,7 @@ func readUnmergedLsFileLines(ctx context.Context, tmpBasePath string, outputChan }, }) if err != nil { - outputChan <- &lsFileLine{err: fmt.Errorf("git ls-files -u -z: %w", git.ConcatenateError(err, stderr.String()))} + outputChan <- &lsFileLine{err: fmt.Errorf("git ls-files -u -z: %w", util.ConcatenateError(err, stderr.String()))} } } diff --git a/services/pull/pull.go b/services/pull/pull.go index 4641d4ac40491..3f6a2cc9c97d3 100644 --- a/services/pull/pull.go +++ b/services/pull/pull.go @@ -551,7 +551,7 @@ func checkIfPRContentChanged(ctx context.Context, pr *issues_model.PullRequest, if err == util.ErrNotEmpty { return true, nil } - err = git.ConcatenateError(err, stderr.String()) + err = util.ConcatenateError(err, stderr.String()) log.Error("Unable to run diff on %s %s %s in tempRepo for PR[%d]%s/%s...%s/%s: Error: %v", newCommitID, oldCommitID, base, From ace647d1b454a4fcb47f291671c6cbc25c21dfb4 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 22 Mar 2025 23:06:43 -0700 Subject: [PATCH 2/2] Revert change of ConcatenateError --- modules/git/batch_reader.go | 11 +++++------ modules/git/command.go | 2 +- modules/git/commit.go | 2 +- modules/git/log_name_status.go | 3 +-- modules/git/pipeline/lfs_nogogit.go | 3 +-- modules/git/repo.go | 3 +-- modules/git/repo_archive.go | 4 +--- modules/git/repo_branch_nogogit.go | 3 +-- modules/git/repo_commit.go | 3 +-- modules/git/repo_ref_nogogit.go | 4 +--- modules/git/repo_tag.go | 2 +- modules/git/repo_tree.go | 4 +--- modules/git/utils.go | 9 +++++++++ modules/util/error.go | 8 -------- services/pull/patch_unmerged.go | 3 +-- services/pull/pull.go | 2 +- 16 files changed, 27 insertions(+), 39 deletions(-) diff --git a/modules/git/batch_reader.go b/modules/git/batch_reader.go index 8ba5473d70ded..7bbab76bb821c 100644 --- a/modules/git/batch_reader.go +++ b/modules/git/batch_reader.go @@ -13,7 +13,6 @@ import ( "strings" "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/util" "github.com/djherbis/buffer" "github.com/djherbis/nio/v3" @@ -36,7 +35,7 @@ func ensureValidGitRepository(ctx context.Context, repoPath string) error { Stderr: &stderr, }) if err != nil { - return util.ConcatenateError(err, (&stderr).String()) + return ConcatenateError(err, (&stderr).String()) } return nil } @@ -72,8 +71,8 @@ func catFileBatchCheck(ctx context.Context, repoPath string) (WriteCloserError, UseContextTimeout: true, }) if err != nil { - _ = batchStdoutWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) - _ = batchStdinReader.CloseWithError(util.ConcatenateError(err, (&stderr).String())) + _ = batchStdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String())) + _ = batchStdinReader.CloseWithError(ConcatenateError(err, (&stderr).String())) } else { _ = batchStdoutWriter.Close() _ = batchStdinReader.Close() @@ -120,8 +119,8 @@ func catFileBatch(ctx context.Context, repoPath string) (WriteCloserError, *bufi UseContextTimeout: true, }) if err != nil { - _ = batchStdoutWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) - _ = batchStdinReader.CloseWithError(util.ConcatenateError(err, (&stderr).String())) + _ = batchStdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String())) + _ = batchStdinReader.CloseWithError(ConcatenateError(err, (&stderr).String())) } else { _ = batchStdoutWriter.Close() _ = batchStdinReader.Close() diff --git a/modules/git/command.go b/modules/git/command.go index aee4780caa369..d85a91804aac8 100644 --- a/modules/git/command.go +++ b/modules/git/command.go @@ -380,7 +380,7 @@ type runStdError struct { func (r *runStdError) Error() string { // the stderr must be in the returned error text, some code only checks `strings.Contains(err.Error(), "git error")` if r.errMsg == "" { - r.errMsg = util.ConcatenateError(r.err, r.stderr).Error() + r.errMsg = ConcatenateError(r.err, r.stderr).Error() } return r.errMsg } diff --git a/modules/git/commit.go b/modules/git/commit.go index 00423e3966189..3e790e89d92d1 100644 --- a/modules/git/commit.go +++ b/modules/git/commit.go @@ -448,7 +448,7 @@ func GetCommitFileStatus(ctx context.Context, repoPath, commitID string) (*Commi }) w.Close() // Close writer to exit parsing goroutine if err != nil { - return nil, util.ConcatenateError(err, stderr.String()) + return nil, ConcatenateError(err, stderr.String()) } <-done diff --git a/modules/git/log_name_status.go b/modules/git/log_name_status.go index 61c7177ed9496..0e9e22f1dc454 100644 --- a/modules/git/log_name_status.go +++ b/modules/git/log_name_status.go @@ -14,7 +14,6 @@ import ( "strings" "code.gitea.io/gitea/modules/container" - "code.gitea.io/gitea/modules/util" "github.com/djherbis/buffer" "github.com/djherbis/nio/v3" @@ -71,7 +70,7 @@ func LogNameStatusRepo(ctx context.Context, repository, head, treepath string, p Stderr: &stderr, }) if err != nil { - _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) + _ = stdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String())) return } diff --git a/modules/git/pipeline/lfs_nogogit.go b/modules/git/pipeline/lfs_nogogit.go index 12eb15b315ec1..c5eed737011a6 100644 --- a/modules/git/pipeline/lfs_nogogit.go +++ b/modules/git/pipeline/lfs_nogogit.go @@ -14,7 +14,6 @@ import ( "sync" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/util" ) // FindLFSFile finds commits that contain a provided pointer file hash @@ -39,7 +38,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err Stderr: &stderr, }) if err != nil { - _ = revListWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) + _ = revListWriter.CloseWithError(git.ConcatenateError(err, (&stderr).String())) } else { _ = revListWriter.Close() } diff --git a/modules/git/repo.go b/modules/git/repo.go index 2a4cfa81afac9..6459adf851807 100644 --- a/modules/git/repo.go +++ b/modules/git/repo.go @@ -18,7 +18,6 @@ import ( "time" "code.gitea.io/gitea/modules/proxy" - "code.gitea.io/gitea/modules/util" ) // GPGSettings represents the default GPG settings for this repository @@ -177,7 +176,7 @@ func CloneWithArgs(ctx context.Context, args TrustedCmdArgs, from, to string, op Stdout: io.Discard, Stderr: stderr, }); err != nil { - return util.ConcatenateError(err, stderr.String()) + return ConcatenateError(err, stderr.String()) } return nil } diff --git a/modules/git/repo_archive.go b/modules/git/repo_archive.go index a241f5ac97b0e..0b2f6f2a45323 100644 --- a/modules/git/repo_archive.go +++ b/modules/git/repo_archive.go @@ -10,8 +10,6 @@ import ( "io" "path/filepath" "strings" - - "code.gitea.io/gitea/modules/util" ) // ArchiveType archive types @@ -69,7 +67,7 @@ func (repo *Repository) CreateArchive(ctx context.Context, format ArchiveType, t Stderr: &stderr, }) if err != nil { - return util.ConcatenateError(err, stderr.String()) + return ConcatenateError(err, stderr.String()) } return nil } diff --git a/modules/git/repo_branch_nogogit.go b/modules/git/repo_branch_nogogit.go index ec987c5887cdb..0d11198523515 100644 --- a/modules/git/repo_branch_nogogit.go +++ b/modules/git/repo_branch_nogogit.go @@ -14,7 +14,6 @@ import ( "strings" "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/util" ) // IsObjectExist returns true if the given object exists in the repository. @@ -120,7 +119,7 @@ func WalkShowRef(ctx context.Context, repoPath string, extraArgs TrustedCmdArgs, _ = stdoutWriter.Close() return } - _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, stderrBuilder.String())) + _ = stdoutWriter.CloseWithError(ConcatenateError(err, stderrBuilder.String())) } else { _ = stdoutWriter.Close() } diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go index 1eb5e21d181fa..72f35711f0fd6 100644 --- a/modules/git/repo_commit.go +++ b/modules/git/repo_commit.go @@ -13,7 +13,6 @@ import ( "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/modules/util" ) // GetBranchCommitID returns last commit ID string of given branch. @@ -240,7 +239,7 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions) Stderr: &stderr, }) if err != nil { - _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, (&stderr).String())) + _ = stdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String())) } else { _ = stdoutWriter.Close() } diff --git a/modules/git/repo_ref_nogogit.go b/modules/git/repo_ref_nogogit.go index e0ad1153d164d..8d34713eaf319 100644 --- a/modules/git/repo_ref_nogogit.go +++ b/modules/git/repo_ref_nogogit.go @@ -9,8 +9,6 @@ import ( "bufio" "io" "strings" - - "code.gitea.io/gitea/modules/util" ) // GetRefsFiltered returns all references of the repository that matches patterm exactly or starting with. @@ -29,7 +27,7 @@ func (repo *Repository) GetRefsFiltered(pattern string) ([]*Reference, error) { Stderr: stderrBuilder, }) if err != nil { - _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, stderrBuilder.String())) + _ = stdoutWriter.CloseWithError(ConcatenateError(err, stderrBuilder.String())) } else { _ = stdoutWriter.Close() } diff --git a/modules/git/repo_tag.go b/modules/git/repo_tag.go index 416d1896206b4..c74618471a047 100644 --- a/modules/git/repo_tag.go +++ b/modules/git/repo_tag.go @@ -121,7 +121,7 @@ func (repo *Repository) GetTagInfos(page, pageSize int) ([]*Tag, int, error) { AddOptionFormat("--format=%s", forEachRefFmt.Flag()). AddArguments("--sort", "-*creatordate", "refs/tags").Run(repo.Ctx, rc) if err != nil { - _ = stdoutWriter.CloseWithError(util.ConcatenateError(err, stderr.String())) + _ = stdoutWriter.CloseWithError(ConcatenateError(err, stderr.String())) } else { _ = stdoutWriter.Close() } diff --git a/modules/git/repo_tree.go b/modules/git/repo_tree.go index 69423cf41874c..70e5aee02353f 100644 --- a/modules/git/repo_tree.go +++ b/modules/git/repo_tree.go @@ -9,8 +9,6 @@ import ( "os" "strings" "time" - - "code.gitea.io/gitea/modules/util" ) // CommitTreeOpts represents the possible options to CommitTree @@ -63,7 +61,7 @@ func (repo *Repository) CommitTree(author, committer *Signature, tree *Tree, opt Stderr: stderr, }) if err != nil { - return nil, util.ConcatenateError(err, stderr.String()) + return nil, ConcatenateError(err, stderr.String()) } return NewIDFromString(strings.TrimSpace(stdout.String())) } diff --git a/modules/git/utils.go b/modules/git/utils.go index 7f94c932c32d2..897306efd0192 100644 --- a/modules/git/utils.go +++ b/modules/git/utils.go @@ -6,6 +6,7 @@ package git import ( "crypto/sha1" "encoding/hex" + "fmt" "io" "strconv" "strings" @@ -39,6 +40,14 @@ func (oc *ObjectCache[T]) Get(id string) (T, bool) { return obj, has } +// ConcatenateError concatenats an error with stderr string +func ConcatenateError(err error, stderr string) error { + if len(stderr) == 0 { + return err + } + return fmt.Errorf("%w - %s", err, stderr) +} + // ParseBool returns the boolean value represented by the string as per git's git_config_bool // true will be returned for the result if the string is empty, but valid will be false. // "true", "yes", "on" are all true, true diff --git a/modules/util/error.go b/modules/util/error.go index b292020c495d6..8e67d5a82fb6d 100644 --- a/modules/util/error.go +++ b/modules/util/error.go @@ -95,11 +95,3 @@ func ErrorAsLocale(err error) *LocaleWrapper { } return nil } - -// ConcatenateError concatenats an error with stderr string -func ConcatenateError(err error, stderr string) error { - if len(stderr) == 0 { - return err - } - return fmt.Errorf("%w - %s", err, stderr) -} diff --git a/services/pull/patch_unmerged.go b/services/pull/patch_unmerged.go index cd28a170d8f9f..200d2233e9345 100644 --- a/services/pull/patch_unmerged.go +++ b/services/pull/patch_unmerged.go @@ -15,7 +15,6 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/util" ) // lsFileLine is a Quadruplet struct (+error) representing a partially parsed line from ls-files @@ -117,7 +116,7 @@ func readUnmergedLsFileLines(ctx context.Context, tmpBasePath string, outputChan }, }) if err != nil { - outputChan <- &lsFileLine{err: fmt.Errorf("git ls-files -u -z: %w", util.ConcatenateError(err, stderr.String()))} + outputChan <- &lsFileLine{err: fmt.Errorf("git ls-files -u -z: %w", git.ConcatenateError(err, stderr.String()))} } } diff --git a/services/pull/pull.go b/services/pull/pull.go index 3f6a2cc9c97d3..4641d4ac40491 100644 --- a/services/pull/pull.go +++ b/services/pull/pull.go @@ -551,7 +551,7 @@ func checkIfPRContentChanged(ctx context.Context, pr *issues_model.PullRequest, if err == util.ErrNotEmpty { return true, nil } - err = util.ConcatenateError(err, stderr.String()) + err = git.ConcatenateError(err, stderr.String()) log.Error("Unable to run diff on %s %s %s in tempRepo for PR[%d]%s/%s...%s/%s: Error: %v", newCommitID, oldCommitID, base,