mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-02 20:06:06 +01:00 
			
		
		
		
	With this option, it is possible to require a linear commit history with the following benefits over the next best option `Rebase+fast-forward`: The original commits continue existing, with the original signatures continuing to stay valid instead of being rewritten, there is no merge commit, and reverting commits becomes easier. Closes #24906
		
			
				
	
	
		
			553 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			553 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2015 The Gogs Authors. All rights reserved.
 | 
						|
// Copyright 2019 The Gitea Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
package models
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						|
	"code.gitea.io/gitea/modules/git"
 | 
						|
	"code.gitea.io/gitea/modules/util"
 | 
						|
)
 | 
						|
 | 
						|
// ErrUserOwnRepos represents a "UserOwnRepos" kind of error.
 | 
						|
type ErrUserOwnRepos struct {
 | 
						|
	UID int64
 | 
						|
}
 | 
						|
 | 
						|
// IsErrUserOwnRepos checks if an error is a ErrUserOwnRepos.
 | 
						|
func IsErrUserOwnRepos(err error) bool {
 | 
						|
	_, ok := err.(ErrUserOwnRepos)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrUserOwnRepos) Error() string {
 | 
						|
	return fmt.Sprintf("user still has ownership of repositories [uid: %d]", err.UID)
 | 
						|
}
 | 
						|
 | 
						|
// ErrUserHasOrgs represents a "UserHasOrgs" kind of error.
 | 
						|
type ErrUserHasOrgs struct {
 | 
						|
	UID int64
 | 
						|
}
 | 
						|
 | 
						|
// IsErrUserHasOrgs checks if an error is a ErrUserHasOrgs.
 | 
						|
func IsErrUserHasOrgs(err error) bool {
 | 
						|
	_, ok := err.(ErrUserHasOrgs)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrUserHasOrgs) Error() string {
 | 
						|
	return fmt.Sprintf("user still has membership of organizations [uid: %d]", err.UID)
 | 
						|
}
 | 
						|
 | 
						|
// ErrUserOwnPackages notifies that the user (still) owns the packages.
 | 
						|
type ErrUserOwnPackages struct {
 | 
						|
	UID int64
 | 
						|
}
 | 
						|
 | 
						|
// IsErrUserOwnPackages checks if an error is an ErrUserOwnPackages.
 | 
						|
func IsErrUserOwnPackages(err error) bool {
 | 
						|
	_, ok := err.(ErrUserOwnPackages)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrUserOwnPackages) Error() string {
 | 
						|
	return fmt.Sprintf("user still has ownership of packages [uid: %d]", err.UID)
 | 
						|
}
 | 
						|
 | 
						|
// ErrDeleteLastAdminUser represents a "DeleteLastAdminUser" kind of error.
 | 
						|
type ErrDeleteLastAdminUser struct {
 | 
						|
	UID int64
 | 
						|
}
 | 
						|
 | 
						|
// IsErrDeleteLastAdminUser checks if an error is a ErrDeleteLastAdminUser.
 | 
						|
func IsErrDeleteLastAdminUser(err error) bool {
 | 
						|
	_, ok := err.(ErrDeleteLastAdminUser)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrDeleteLastAdminUser) Error() string {
 | 
						|
	return fmt.Sprintf("can not delete the last admin user [uid: %d]", err.UID)
 | 
						|
}
 | 
						|
 | 
						|
// ErrNoPendingRepoTransfer is an error type for repositories without a pending
 | 
						|
// transfer request
 | 
						|
type ErrNoPendingRepoTransfer struct {
 | 
						|
	RepoID int64
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrNoPendingRepoTransfer) Error() string {
 | 
						|
	return fmt.Sprintf("repository doesn't have a pending transfer [repo_id: %d]", err.RepoID)
 | 
						|
}
 | 
						|
 | 
						|
// IsErrNoPendingTransfer is an error type when a repository has no pending
 | 
						|
// transfers
 | 
						|
func IsErrNoPendingTransfer(err error) bool {
 | 
						|
	_, ok := err.(ErrNoPendingRepoTransfer)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrNoPendingRepoTransfer) Unwrap() error {
 | 
						|
	return util.ErrNotExist
 | 
						|
}
 | 
						|
 | 
						|
// ErrRepoTransferInProgress represents the state of a repository that has an
 | 
						|
// ongoing transfer
 | 
						|
type ErrRepoTransferInProgress struct {
 | 
						|
	Uname string
 | 
						|
	Name  string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrRepoTransferInProgress checks if an error is a ErrRepoTransferInProgress.
 | 
						|
func IsErrRepoTransferInProgress(err error) bool {
 | 
						|
	_, ok := err.(ErrRepoTransferInProgress)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrRepoTransferInProgress) Error() string {
 | 
						|
	return fmt.Sprintf("repository is already being transferred [uname: %s, name: %s]", err.Uname, err.Name)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrRepoTransferInProgress) Unwrap() error {
 | 
						|
	return util.ErrAlreadyExist
 | 
						|
}
 | 
						|
 | 
						|
// ErrInvalidCloneAddr represents a "InvalidCloneAddr" kind of error.
 | 
						|
type ErrInvalidCloneAddr struct {
 | 
						|
	Host               string
 | 
						|
	IsURLError         bool
 | 
						|
	IsInvalidPath      bool
 | 
						|
	IsProtocolInvalid  bool
 | 
						|
	IsPermissionDenied bool
 | 
						|
	LocalPath          bool
 | 
						|
}
 | 
						|
 | 
						|
// IsErrInvalidCloneAddr checks if an error is a ErrInvalidCloneAddr.
 | 
						|
func IsErrInvalidCloneAddr(err error) bool {
 | 
						|
	_, ok := err.(*ErrInvalidCloneAddr)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err *ErrInvalidCloneAddr) Error() string {
 | 
						|
	if err.IsInvalidPath {
 | 
						|
		return fmt.Sprintf("migration/cloning from '%s' is not allowed: the provided path is invalid", err.Host)
 | 
						|
	}
 | 
						|
	if err.IsProtocolInvalid {
 | 
						|
		return fmt.Sprintf("migration/cloning from '%s' is not allowed: the provided url protocol is not allowed", err.Host)
 | 
						|
	}
 | 
						|
	if err.IsPermissionDenied {
 | 
						|
		return fmt.Sprintf("migration/cloning from '%s' is not allowed.", err.Host)
 | 
						|
	}
 | 
						|
	if err.IsURLError {
 | 
						|
		return fmt.Sprintf("migration/cloning from '%s' is not allowed: the provided url is invalid", err.Host)
 | 
						|
	}
 | 
						|
 | 
						|
	return fmt.Sprintf("migration/cloning from '%s' is not allowed", err.Host)
 | 
						|
}
 | 
						|
 | 
						|
func (err *ErrInvalidCloneAddr) Unwrap() error {
 | 
						|
	return util.ErrInvalidArgument
 | 
						|
}
 | 
						|
 | 
						|
// ErrUpdateTaskNotExist represents a "UpdateTaskNotExist" kind of error.
 | 
						|
type ErrUpdateTaskNotExist struct {
 | 
						|
	UUID string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrUpdateTaskNotExist checks if an error is a ErrUpdateTaskNotExist.
 | 
						|
func IsErrUpdateTaskNotExist(err error) bool {
 | 
						|
	_, ok := err.(ErrUpdateTaskNotExist)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrUpdateTaskNotExist) Error() string {
 | 
						|
	return fmt.Sprintf("update task does not exist [uuid: %s]", err.UUID)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrUpdateTaskNotExist) Unwrap() error {
 | 
						|
	return util.ErrNotExist
 | 
						|
}
 | 
						|
 | 
						|
// ErrInvalidTagName represents a "InvalidTagName" kind of error.
 | 
						|
type ErrInvalidTagName struct {
 | 
						|
	TagName string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrInvalidTagName checks if an error is a ErrInvalidTagName.
 | 
						|
func IsErrInvalidTagName(err error) bool {
 | 
						|
	_, ok := err.(ErrInvalidTagName)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrInvalidTagName) Error() string {
 | 
						|
	return fmt.Sprintf("release tag name is not valid [tag_name: %s]", err.TagName)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrInvalidTagName) Unwrap() error {
 | 
						|
	return util.ErrInvalidArgument
 | 
						|
}
 | 
						|
 | 
						|
// ErrProtectedTagName represents a "ProtectedTagName" kind of error.
 | 
						|
type ErrProtectedTagName struct {
 | 
						|
	TagName string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrProtectedTagName checks if an error is a ErrProtectedTagName.
 | 
						|
func IsErrProtectedTagName(err error) bool {
 | 
						|
	_, ok := err.(ErrProtectedTagName)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrProtectedTagName) Error() string {
 | 
						|
	return fmt.Sprintf("release tag name is protected [tag_name: %s]", err.TagName)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrProtectedTagName) Unwrap() error {
 | 
						|
	return util.ErrPermissionDenied
 | 
						|
}
 | 
						|
 | 
						|
// ErrRepoFileAlreadyExists represents a "RepoFileAlreadyExist" kind of error.
 | 
						|
type ErrRepoFileAlreadyExists struct {
 | 
						|
	Path string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrRepoFileAlreadyExists checks if an error is a ErrRepoFileAlreadyExists.
 | 
						|
func IsErrRepoFileAlreadyExists(err error) bool {
 | 
						|
	_, ok := err.(ErrRepoFileAlreadyExists)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrRepoFileAlreadyExists) Error() string {
 | 
						|
	return fmt.Sprintf("repository file already exists [path: %s]", err.Path)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrRepoFileAlreadyExists) Unwrap() error {
 | 
						|
	return util.ErrAlreadyExist
 | 
						|
}
 | 
						|
 | 
						|
// ErrRepoFileDoesNotExist represents a "RepoFileDoesNotExist" kind of error.
 | 
						|
type ErrRepoFileDoesNotExist struct {
 | 
						|
	Path string
 | 
						|
	Name string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrRepoFileDoesNotExist checks if an error is a ErrRepoDoesNotExist.
 | 
						|
func IsErrRepoFileDoesNotExist(err error) bool {
 | 
						|
	_, ok := err.(ErrRepoFileDoesNotExist)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrRepoFileDoesNotExist) Error() string {
 | 
						|
	return fmt.Sprintf("repository file does not exist [path: %s]", err.Path)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrRepoFileDoesNotExist) Unwrap() error {
 | 
						|
	return util.ErrNotExist
 | 
						|
}
 | 
						|
 | 
						|
// ErrFilenameInvalid represents a "FilenameInvalid" kind of error.
 | 
						|
type ErrFilenameInvalid struct {
 | 
						|
	Path string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrFilenameInvalid checks if an error is an ErrFilenameInvalid.
 | 
						|
func IsErrFilenameInvalid(err error) bool {
 | 
						|
	_, ok := err.(ErrFilenameInvalid)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrFilenameInvalid) Error() string {
 | 
						|
	return fmt.Sprintf("path contains a malformed path component [path: %s]", err.Path)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrFilenameInvalid) Unwrap() error {
 | 
						|
	return util.ErrInvalidArgument
 | 
						|
}
 | 
						|
 | 
						|
// ErrUserCannotCommit represents "UserCannotCommit" kind of error.
 | 
						|
type ErrUserCannotCommit struct {
 | 
						|
	UserName string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrUserCannotCommit checks if an error is an ErrUserCannotCommit.
 | 
						|
func IsErrUserCannotCommit(err error) bool {
 | 
						|
	_, ok := err.(ErrUserCannotCommit)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrUserCannotCommit) Error() string {
 | 
						|
	return fmt.Sprintf("user cannot commit to repo [user: %s]", err.UserName)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrUserCannotCommit) Unwrap() error {
 | 
						|
	return util.ErrPermissionDenied
 | 
						|
}
 | 
						|
 | 
						|
// ErrFilePathInvalid represents a "FilePathInvalid" kind of error.
 | 
						|
type ErrFilePathInvalid struct {
 | 
						|
	Message string
 | 
						|
	Path    string
 | 
						|
	Name    string
 | 
						|
	Type    git.EntryMode
 | 
						|
}
 | 
						|
 | 
						|
// IsErrFilePathInvalid checks if an error is an ErrFilePathInvalid.
 | 
						|
func IsErrFilePathInvalid(err error) bool {
 | 
						|
	_, ok := err.(ErrFilePathInvalid)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrFilePathInvalid) Error() string {
 | 
						|
	if err.Message != "" {
 | 
						|
		return err.Message
 | 
						|
	}
 | 
						|
	return fmt.Sprintf("path is invalid [path: %s]", err.Path)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrFilePathInvalid) Unwrap() error {
 | 
						|
	return util.ErrInvalidArgument
 | 
						|
}
 | 
						|
 | 
						|
// ErrFilePathProtected represents a "FilePathProtected" kind of error.
 | 
						|
type ErrFilePathProtected struct {
 | 
						|
	Message string
 | 
						|
	Path    string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrFilePathProtected checks if an error is an ErrFilePathProtected.
 | 
						|
func IsErrFilePathProtected(err error) bool {
 | 
						|
	_, ok := err.(ErrFilePathProtected)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrFilePathProtected) Error() string {
 | 
						|
	if err.Message != "" {
 | 
						|
		return err.Message
 | 
						|
	}
 | 
						|
	return fmt.Sprintf("path is protected and can not be changed [path: %s]", err.Path)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrFilePathProtected) Unwrap() error {
 | 
						|
	return util.ErrPermissionDenied
 | 
						|
}
 | 
						|
 | 
						|
// ErrDisallowedToMerge represents an error that a branch is protected and the current user is not allowed to modify it.
 | 
						|
type ErrDisallowedToMerge struct {
 | 
						|
	Reason string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrDisallowedToMerge checks if an error is an ErrDisallowedToMerge.
 | 
						|
func IsErrDisallowedToMerge(err error) bool {
 | 
						|
	_, ok := err.(ErrDisallowedToMerge)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrDisallowedToMerge) Error() string {
 | 
						|
	return fmt.Sprintf("not allowed to merge [reason: %s]", err.Reason)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrDisallowedToMerge) Unwrap() error {
 | 
						|
	return util.ErrPermissionDenied
 | 
						|
}
 | 
						|
 | 
						|
// ErrTagAlreadyExists represents an error that tag with such name already exists.
 | 
						|
type ErrTagAlreadyExists struct {
 | 
						|
	TagName string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrTagAlreadyExists checks if an error is an ErrTagAlreadyExists.
 | 
						|
func IsErrTagAlreadyExists(err error) bool {
 | 
						|
	_, ok := err.(ErrTagAlreadyExists)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrTagAlreadyExists) Error() string {
 | 
						|
	return fmt.Sprintf("tag already exists [name: %s]", err.TagName)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrTagAlreadyExists) Unwrap() error {
 | 
						|
	return util.ErrAlreadyExist
 | 
						|
}
 | 
						|
 | 
						|
// ErrSHADoesNotMatch represents a "SHADoesNotMatch" kind of error.
 | 
						|
type ErrSHADoesNotMatch struct {
 | 
						|
	Path       string
 | 
						|
	GivenSHA   string
 | 
						|
	CurrentSHA string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrSHADoesNotMatch checks if an error is a ErrSHADoesNotMatch.
 | 
						|
func IsErrSHADoesNotMatch(err error) bool {
 | 
						|
	_, ok := err.(ErrSHADoesNotMatch)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrSHADoesNotMatch) Error() string {
 | 
						|
	return fmt.Sprintf("sha does not match [given: %s, expected: %s]", err.GivenSHA, err.CurrentSHA)
 | 
						|
}
 | 
						|
 | 
						|
// ErrSHANotFound represents a "SHADoesNotMatch" kind of error.
 | 
						|
type ErrSHANotFound struct {
 | 
						|
	SHA string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrSHANotFound checks if an error is a ErrSHANotFound.
 | 
						|
func IsErrSHANotFound(err error) bool {
 | 
						|
	_, ok := err.(ErrSHANotFound)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrSHANotFound) Error() string {
 | 
						|
	return fmt.Sprintf("sha not found [%s]", err.SHA)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrSHANotFound) Unwrap() error {
 | 
						|
	return util.ErrNotExist
 | 
						|
}
 | 
						|
 | 
						|
// ErrCommitIDDoesNotMatch represents a "CommitIDDoesNotMatch" kind of error.
 | 
						|
type ErrCommitIDDoesNotMatch struct {
 | 
						|
	GivenCommitID   string
 | 
						|
	CurrentCommitID string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrCommitIDDoesNotMatch checks if an error is a ErrCommitIDDoesNotMatch.
 | 
						|
func IsErrCommitIDDoesNotMatch(err error) bool {
 | 
						|
	_, ok := err.(ErrCommitIDDoesNotMatch)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrCommitIDDoesNotMatch) Error() string {
 | 
						|
	return fmt.Sprintf("file CommitID does not match [given: %s, expected: %s]", err.GivenCommitID, err.CurrentCommitID)
 | 
						|
}
 | 
						|
 | 
						|
// ErrSHAOrCommitIDNotProvided represents a "SHAOrCommitIDNotProvided" kind of error.
 | 
						|
type ErrSHAOrCommitIDNotProvided struct{}
 | 
						|
 | 
						|
// IsErrSHAOrCommitIDNotProvided checks if an error is a ErrSHAOrCommitIDNotProvided.
 | 
						|
func IsErrSHAOrCommitIDNotProvided(err error) bool {
 | 
						|
	_, ok := err.(ErrSHAOrCommitIDNotProvided)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrSHAOrCommitIDNotProvided) Error() string {
 | 
						|
	return "a SHA or commit ID must be proved when updating a file"
 | 
						|
}
 | 
						|
 | 
						|
// ErrInvalidMergeStyle represents an error if merging with disabled merge strategy
 | 
						|
type ErrInvalidMergeStyle struct {
 | 
						|
	ID    int64
 | 
						|
	Style repo_model.MergeStyle
 | 
						|
}
 | 
						|
 | 
						|
// IsErrInvalidMergeStyle checks if an error is a ErrInvalidMergeStyle.
 | 
						|
func IsErrInvalidMergeStyle(err error) bool {
 | 
						|
	_, ok := err.(ErrInvalidMergeStyle)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrInvalidMergeStyle) Error() string {
 | 
						|
	return fmt.Sprintf("merge strategy is not allowed or is invalid [repo_id: %d, strategy: %s]",
 | 
						|
		err.ID, err.Style)
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrInvalidMergeStyle) Unwrap() error {
 | 
						|
	return util.ErrInvalidArgument
 | 
						|
}
 | 
						|
 | 
						|
// ErrMergeConflicts represents an error if merging fails with a conflict
 | 
						|
type ErrMergeConflicts struct {
 | 
						|
	Style  repo_model.MergeStyle
 | 
						|
	StdOut string
 | 
						|
	StdErr string
 | 
						|
	Err    error
 | 
						|
}
 | 
						|
 | 
						|
// IsErrMergeConflicts checks if an error is a ErrMergeConflicts.
 | 
						|
func IsErrMergeConflicts(err error) bool {
 | 
						|
	_, ok := err.(ErrMergeConflicts)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrMergeConflicts) Error() string {
 | 
						|
	return fmt.Sprintf("Merge Conflict Error: %v: %s\n%s", err.Err, err.StdErr, err.StdOut)
 | 
						|
}
 | 
						|
 | 
						|
// ErrMergeUnrelatedHistories represents an error if merging fails due to unrelated histories
 | 
						|
type ErrMergeUnrelatedHistories struct {
 | 
						|
	Style  repo_model.MergeStyle
 | 
						|
	StdOut string
 | 
						|
	StdErr string
 | 
						|
	Err    error
 | 
						|
}
 | 
						|
 | 
						|
// IsErrMergeUnrelatedHistories checks if an error is a ErrMergeUnrelatedHistories.
 | 
						|
func IsErrMergeUnrelatedHistories(err error) bool {
 | 
						|
	_, ok := err.(ErrMergeUnrelatedHistories)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrMergeUnrelatedHistories) Error() string {
 | 
						|
	return fmt.Sprintf("Merge UnrelatedHistories Error: %v: %s\n%s", err.Err, err.StdErr, err.StdOut)
 | 
						|
}
 | 
						|
 | 
						|
// ErrMergeDivergingFastForwardOnly represents an error if a fast-forward-only merge fails because the branches diverge
 | 
						|
type ErrMergeDivergingFastForwardOnly struct {
 | 
						|
	StdOut string
 | 
						|
	StdErr string
 | 
						|
	Err    error
 | 
						|
}
 | 
						|
 | 
						|
// IsErrMergeDivergingFastForwardOnly checks if an error is a ErrMergeDivergingFastForwardOnly.
 | 
						|
func IsErrMergeDivergingFastForwardOnly(err error) bool {
 | 
						|
	_, ok := err.(ErrMergeDivergingFastForwardOnly)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrMergeDivergingFastForwardOnly) Error() string {
 | 
						|
	return fmt.Sprintf("Merge DivergingFastForwardOnly Error: %v: %s\n%s", err.Err, err.StdErr, err.StdOut)
 | 
						|
}
 | 
						|
 | 
						|
// ErrRebaseConflicts represents an error if rebase fails with a conflict
 | 
						|
type ErrRebaseConflicts struct {
 | 
						|
	Style     repo_model.MergeStyle
 | 
						|
	CommitSHA string
 | 
						|
	StdOut    string
 | 
						|
	StdErr    string
 | 
						|
	Err       error
 | 
						|
}
 | 
						|
 | 
						|
// IsErrRebaseConflicts checks if an error is a ErrRebaseConflicts.
 | 
						|
func IsErrRebaseConflicts(err error) bool {
 | 
						|
	_, ok := err.(ErrRebaseConflicts)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrRebaseConflicts) Error() string {
 | 
						|
	return fmt.Sprintf("Rebase Error: %v: Whilst Rebasing: %s\n%s\n%s", err.Err, err.CommitSHA, err.StdErr, err.StdOut)
 | 
						|
}
 | 
						|
 | 
						|
// ErrPullRequestHasMerged represents a "PullRequestHasMerged"-error
 | 
						|
type ErrPullRequestHasMerged struct {
 | 
						|
	ID         int64
 | 
						|
	IssueID    int64
 | 
						|
	HeadRepoID int64
 | 
						|
	BaseRepoID int64
 | 
						|
	HeadBranch string
 | 
						|
	BaseBranch string
 | 
						|
}
 | 
						|
 | 
						|
// IsErrPullRequestHasMerged checks if an error is a ErrPullRequestHasMerged.
 | 
						|
func IsErrPullRequestHasMerged(err error) bool {
 | 
						|
	_, ok := err.(ErrPullRequestHasMerged)
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
// Error does pretty-printing :D
 | 
						|
func (err ErrPullRequestHasMerged) Error() string {
 | 
						|
	return fmt.Sprintf("pull request has merged [id: %d, issue_id: %d, head_repo_id: %d, base_repo_id: %d, head_branch: %s, base_branch: %s]",
 | 
						|
		err.ID, err.IssueID, err.HeadRepoID, err.BaseRepoID, err.HeadBranch, err.BaseBranch)
 | 
						|
}
 |