mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Make every not exist error unwrappable to a fs.ErrNotExist (#20891)
A lot of our code is repeatedly testing if individual errors are specific types of Not Exist errors. This is repetitative and unnecesary. `Unwrap() error` provides a common way of labelling an error as a NotExist error and we can/should use this. This PR has chosen to use the common `io/fs` errors e.g. `fs.ErrNotExist` for our errors. This is in some ways not completely correct as these are not filesystem errors but it seems like a reasonable thing to do and would allow us to simplify a lot of our code to `errors.Is(err, fs.ErrNotExist)` instead of `package.IsErr...NotExist(err)` I am open to suggestions to use a different base error - perhaps `models/db.ErrNotExist` if that would be felt to be better. Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: delvh <dev.lh@web.de>
This commit is contained in:
		@@ -6,7 +6,6 @@ package git
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/models/db"
 | 
			
		||||
@@ -17,6 +16,7 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/lfs"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
 | 
			
		||||
	"xorm.io/builder"
 | 
			
		||||
)
 | 
			
		||||
@@ -38,6 +38,10 @@ func (err ErrLFSLockNotExist) Error() string {
 | 
			
		||||
	return fmt.Sprintf("lfs lock does not exist [id: %d, rid: %d, path: %s]", err.ID, err.RepoID, err.Path)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (err ErrLFSLockNotExist) Unwrap() error {
 | 
			
		||||
	return util.ErrNotExist
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ErrLFSUnauthorizedAction represents a "LFSUnauthorizedAction" kind of error.
 | 
			
		||||
type ErrLFSUnauthorizedAction struct {
 | 
			
		||||
	RepoID   int64
 | 
			
		||||
@@ -58,6 +62,10 @@ func (err ErrLFSUnauthorizedAction) Error() string {
 | 
			
		||||
	return fmt.Sprintf("User %s doesn't have read access for lfs lock [rid: %d]", err.UserName, err.RepoID)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (err ErrLFSUnauthorizedAction) Unwrap() error {
 | 
			
		||||
	return util.ErrPermissionDenied
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ErrLFSLockAlreadyExist represents a "LFSLockAlreadyExist" kind of error.
 | 
			
		||||
type ErrLFSLockAlreadyExist struct {
 | 
			
		||||
	RepoID int64
 | 
			
		||||
@@ -74,6 +82,10 @@ func (err ErrLFSLockAlreadyExist) Error() string {
 | 
			
		||||
	return fmt.Sprintf("lfs lock already exists [rid: %d, path: %s]", err.RepoID, err.Path)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (err ErrLFSLockAlreadyExist) Unwrap() error {
 | 
			
		||||
	return util.ErrAlreadyExist
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ErrLFSFileLocked represents a "LFSFileLocked" kind of error.
 | 
			
		||||
type ErrLFSFileLocked struct {
 | 
			
		||||
	RepoID   int64
 | 
			
		||||
@@ -91,6 +103,10 @@ func (err ErrLFSFileLocked) Error() string {
 | 
			
		||||
	return fmt.Sprintf("File is lfs locked [repo: %d, locked by: %s, path: %s]", err.RepoID, err.UserName, err.Path)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (err ErrLFSFileLocked) Unwrap() error {
 | 
			
		||||
	return util.ErrPermissionDenied
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LFSMetaObject stores metadata for LFS tracked files.
 | 
			
		||||
type LFSMetaObject struct {
 | 
			
		||||
	ID           int64 `xorm:"pk autoincr"`
 | 
			
		||||
@@ -114,7 +130,7 @@ type LFSTokenResponse struct {
 | 
			
		||||
 | 
			
		||||
// ErrLFSObjectNotExist is returned from lfs models functions in order
 | 
			
		||||
// to differentiate between database and missing object errors.
 | 
			
		||||
var ErrLFSObjectNotExist = errors.New("LFS Meta object does not exist")
 | 
			
		||||
var ErrLFSObjectNotExist = db.ErrNotExist{Resource: "LFS Meta object"}
 | 
			
		||||
 | 
			
		||||
// NewLFSMetaObject stores a given populated LFSMetaObject structure in the database
 | 
			
		||||
// if it is not already present.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user