mirror of
https://github.com/go-gitea/gitea.git
synced 2026-01-19 22:12:42 +01:00
49 lines
994 B
Go
49 lines
994 B
Go
// Copyright 2025 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package gitcmd
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"code.gitea.io/gitea/modules/util"
|
|
)
|
|
|
|
// ConcatenateError concatenates an error with stderr string
|
|
// FIXME: use RunStdError instead
|
|
func ConcatenateError(err error, stderr string) error {
|
|
if len(stderr) == 0 {
|
|
return err
|
|
}
|
|
errMsg := fmt.Sprintf("%s - %s", err.Error(), stderr)
|
|
return util.ErrorWrap(&runStdError{err: err, stderr: stderr, errMsg: errMsg}, "%s", errMsg)
|
|
}
|
|
|
|
func safeClosePtrCloser[T *io.ReadCloser | *io.WriteCloser](c T) {
|
|
switch v := any(c).(type) {
|
|
case *io.ReadCloser:
|
|
if v != nil && *v != nil {
|
|
_ = (*v).Close()
|
|
}
|
|
case *io.WriteCloser:
|
|
if v != nil && *v != nil {
|
|
_ = (*v).Close()
|
|
}
|
|
default:
|
|
panic("unsupported type")
|
|
}
|
|
}
|
|
|
|
func safeAssignPipe[T any](p *T, fn func() (T, error)) (bool, error) {
|
|
if p == nil {
|
|
return false, nil
|
|
}
|
|
v, err := fn()
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
*p = v
|
|
return true, nil
|
|
}
|