2016-11-04 01:16:01 +03:00
// Copyright 2015 The Gogs Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2016-11-04 01:16:01 +03:00
package git
import (
"fmt"
2020-03-28 07:13:18 +03:00
"strings"
2016-11-04 01:16:01 +03:00
"time"
2022-10-18 08:50:37 +03:00
"code.gitea.io/gitea/modules/util"
2016-11-04 01:16:01 +03:00
)
2016-12-22 12:30:52 +03:00
// ErrExecTimeout error when exec timed out
2016-11-04 01:16:01 +03:00
type ErrExecTimeout struct {
Duration time . Duration
}
2016-12-22 12:30:52 +03:00
// IsErrExecTimeout if some error is ErrExecTimeout
2016-11-04 01:16:01 +03:00
func IsErrExecTimeout ( err error ) bool {
_ , ok := err . ( ErrExecTimeout )
return ok
}
func ( err ErrExecTimeout ) Error ( ) string {
return fmt . Sprintf ( "execution is timeout [duration: %v]" , err . Duration )
}
2016-12-22 12:30:52 +03:00
// ErrNotExist commit not exist error
2016-11-04 01:16:01 +03:00
type ErrNotExist struct {
ID string
RelPath string
}
2016-12-22 12:30:52 +03:00
// IsErrNotExist if some error is ErrNotExist
2016-11-04 01:16:01 +03:00
func IsErrNotExist ( err error ) bool {
_ , ok := err . ( ErrNotExist )
return ok
}
func ( err ErrNotExist ) Error ( ) string {
return fmt . Sprintf ( "object does not exist [id: %s, rel_path: %s]" , err . ID , err . RelPath )
}
2022-10-18 08:50:37 +03:00
func ( err ErrNotExist ) Unwrap ( ) error {
return util . ErrNotExist
}
2018-05-01 10:04:36 +03:00
// ErrBadLink entry.FollowLink error
type ErrBadLink struct {
Name string
Message string
}
func ( err ErrBadLink ) Error ( ) string {
return fmt . Sprintf ( "%s: %s" , err . Name , err . Message )
}
2020-02-22 02:04:20 +03:00
// IsErrBadLink if some error is ErrBadLink
func IsErrBadLink ( err error ) bool {
_ , ok := err . ( ErrBadLink )
return ok
}
2016-12-22 12:30:52 +03:00
// ErrUnsupportedVersion error when required git version not matched
2016-11-04 01:16:01 +03:00
type ErrUnsupportedVersion struct {
Required string
}
2016-12-22 12:30:52 +03:00
// IsErrUnsupportedVersion if some error is ErrUnsupportedVersion
2016-11-04 01:16:01 +03:00
func IsErrUnsupportedVersion ( err error ) bool {
_ , ok := err . ( ErrUnsupportedVersion )
return ok
}
func ( err ErrUnsupportedVersion ) Error ( ) string {
return fmt . Sprintf ( "Operation requires higher version [required: %s]" , err . Required )
}
2019-04-19 15:17:27 +03:00
// ErrBranchNotExist represents a "BranchNotExist" kind of error.
type ErrBranchNotExist struct {
Name string
}
// IsErrBranchNotExist checks if an error is a ErrBranchNotExist.
func IsErrBranchNotExist ( err error ) bool {
_ , ok := err . ( ErrBranchNotExist )
return ok
}
func ( err ErrBranchNotExist ) Error ( ) string {
return fmt . Sprintf ( "branch does not exist [name: %s]" , err . Name )
}
2020-03-28 07:13:18 +03:00
2022-10-18 08:50:37 +03:00
func ( err ErrBranchNotExist ) Unwrap ( ) error {
return util . ErrNotExist
}
2024-02-13 01:37:23 +03:00
// ErrPushOutOfDate represents an error if merging fails due to the base branch being updated
2020-03-28 07:13:18 +03:00
type ErrPushOutOfDate struct {
StdOut string
StdErr string
Err error
}
// IsErrPushOutOfDate checks if an error is a ErrPushOutOfDate.
func IsErrPushOutOfDate ( err error ) bool {
_ , ok := err . ( * ErrPushOutOfDate )
return ok
}
func ( err * ErrPushOutOfDate ) Error ( ) string {
return fmt . Sprintf ( "PushOutOfDate Error: %v: %s\n%s" , err . Err , err . StdErr , err . StdOut )
}
// Unwrap unwraps the underlying error
func ( err * ErrPushOutOfDate ) Unwrap ( ) error {
2022-10-24 22:29:17 +03:00
return fmt . Errorf ( "%w - %s" , err . Err , err . StdErr )
2020-03-28 07:13:18 +03:00
}
// ErrPushRejected represents an error if merging fails due to rejection from a hook
type ErrPushRejected struct {
Message string
StdOut string
StdErr string
Err error
}
// IsErrPushRejected checks if an error is a ErrPushRejected.
func IsErrPushRejected ( err error ) bool {
_ , ok := err . ( * ErrPushRejected )
return ok
}
func ( err * ErrPushRejected ) Error ( ) string {
return fmt . Sprintf ( "PushRejected Error: %v: %s\n%s" , err . Err , err . StdErr , err . StdOut )
}
// Unwrap unwraps the underlying error
func ( err * ErrPushRejected ) Unwrap ( ) error {
2022-10-24 22:29:17 +03:00
return fmt . Errorf ( "%w - %s" , err . Err , err . StdErr )
2020-03-28 07:13:18 +03:00
}
// GenerateMessage generates the remote message from the stderr
func ( err * ErrPushRejected ) GenerateMessage ( ) {
messageBuilder := & strings . Builder { }
i := strings . Index ( err . StdErr , "remote: " )
if i < 0 {
err . Message = ""
return
}
for {
if len ( err . StdErr ) <= i + 8 {
break
}
if err . StdErr [ i : i + 8 ] != "remote: " {
break
}
i += 8
nl := strings . IndexByte ( err . StdErr [ i : ] , '\n' )
if nl >= 0 {
messageBuilder . WriteString ( err . StdErr [ i : i + nl + 1 ] )
i = i + nl + 1
} else {
messageBuilder . WriteString ( err . StdErr [ i : ] )
i = len ( err . StdErr )
}
}
err . Message = strings . TrimSpace ( messageBuilder . String ( ) )
}
2021-06-24 00:08:26 +03:00
// ErrMoreThanOne represents an error if pull request fails when there are more than one sources (branch, tag) with the same name
type ErrMoreThanOne struct {
StdOut string
StdErr string
Err error
}
// IsErrMoreThanOne checks if an error is a ErrMoreThanOne
func IsErrMoreThanOne ( err error ) bool {
_ , ok := err . ( * ErrMoreThanOne )
return ok
}
func ( err * ErrMoreThanOne ) Error ( ) string {
return fmt . Sprintf ( "ErrMoreThanOne Error: %v: %s\n%s" , err . Err , err . StdErr , err . StdOut )
}