165 lines · 3.9 KB · Go
RawDownload
// Copyright 2015 The Gogs Authors. All rights reserved.// SPDX-License-Identifier: MIT package git import (	"context"	"errors"	"fmt"	"strings" 	"code.gitea.io/gitea/modules/util") // ErrNotExist commit not exist errortype ErrNotExist struct {	ID      string	RelPath string} // IsErrNotExist if some error is ErrNotExistfunc 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)} func (err ErrNotExist) Unwrap() error {	return util.ErrNotExist} // ErrBadLink entry.FollowLink errortype ErrBadLink struct {	Name    string	Message string} func (err ErrBadLink) Error() string {	return fmt.Sprintf("%s: %s", err.Name, err.Message)} // IsErrBadLink if some error is ErrBadLinkfunc IsErrBadLink(err error) bool {	_, ok := err.(ErrBadLink)	return ok} // 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)} func (err ErrBranchNotExist) Unwrap() error {	return util.ErrNotExist} // ErrPushOutOfDate represents an error if merging fails due to the base branch being updatedtype 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 errorfunc (err *ErrPushOutOfDate) Unwrap() error {	return fmt.Errorf("%w - %s", err.Err, err.StdErr)} // ErrPushRejected represents an error if merging fails due to rejection from a hooktype 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 errorfunc (err *ErrPushRejected) Unwrap() error {	return fmt.Errorf("%w - %s", err.Err, err.StdErr)} // GenerateMessage generates the remote message from the stderrfunc (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())} // ErrMoreThanOne represents an error if pull request fails when there are more than one sources (branch, tag) with the same nametype ErrMoreThanOne struct {	StdOut string	StdErr string	Err    error} // IsErrMoreThanOne checks if an error is a ErrMoreThanOnefunc 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)} func IsErrCanceledOrKilled(err error) bool {	// When "cancel()" a git command's context, the returned error of "Run()" could be one of them:	// - context.Canceled	// - *exec.ExitError: "signal: killed"	return err != nil && (errors.Is(err, context.Canceled) || err.Error() == "signal: killed")}