diff --git a/cmd/serv.go b/cmd/serv.go index 41ec7c7cc..763dc8646 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -162,7 +162,7 @@ func runServ(c *cli.Context) error { repo, err := models.GetRepositoryByName(owner.ID, repoName) if err != nil { - if models.IsErrRepoNotExist(err) { + if errors.IsRepoNotExist(err) { fail(_ACCESS_DENIED_MESSAGE, "Repository does not exist: %s/%s", owner.Name, repoName) } fail("Internal error", "Fail to get repository: %v", err) diff --git a/models/access.go b/models/access.go index 75af8485b..0d3259dea 100644 --- a/models/access.go +++ b/models/access.go @@ -8,6 +8,8 @@ import ( "fmt" log "gopkg.in/clog.v1" + + "github.com/gogits/gogs/models/errors" ) type AccessMode int @@ -109,7 +111,7 @@ func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) { for _, access := range accesses { repo, err := GetRepositoryByID(access.RepoID) if err != nil { - if IsErrRepoNotExist(err) { + if errors.IsRepoNotExist(err) { log.Error(4, "GetRepositoryByID: %v", err) continue } diff --git a/models/error.go b/models/error.go index 72edb560e..801a91f8b 100644 --- a/models/error.go +++ b/models/error.go @@ -305,21 +305,6 @@ func (err ErrLastOrgOwner) Error() string { // |____|_ /\___ > __/ \____/____ >__||__| \____/|__| / ____| // \/ \/|__| \/ \/ -type ErrRepoNotExist struct { - ID int64 - UID int64 - Name string -} - -func IsErrRepoNotExist(err error) bool { - _, ok := err.(ErrRepoNotExist) - return ok -} - -func (err ErrRepoNotExist) Error() string { - return fmt.Sprintf("repository does not exist [id: %d, uid: %d, name: %s]", err.ID, err.UID, err.Name) -} - type ErrRepoAlreadyExist struct { Uname string Name string diff --git a/models/errors/repo.go b/models/errors/repo.go index 9abcaaa93..1995a5b47 100644 --- a/models/errors/repo.go +++ b/models/errors/repo.go @@ -6,6 +6,21 @@ package errors import "fmt" +type RepoNotExist struct { + ID int64 + UserID int64 + Name string +} + +func IsRepoNotExist(err error) bool { + _, ok := err.(RepoNotExist) + return ok +} + +func (err RepoNotExist) Error() string { + return fmt.Sprintf("repository does not exist [id: %d, user_id: %d, name: %s]", err.ID, err.UserID, err.Name) +} + type InvalidRepoReference struct { Ref string } diff --git a/models/pull.go b/models/pull.go index 9db6791b6..d7a8e36fb 100644 --- a/models/pull.go +++ b/models/pull.go @@ -88,7 +88,7 @@ func (pr *PullRequest) AfterSet(colName string, _ xorm.Cell) { func (pr *PullRequest) loadAttributes(e Engine) (err error) { if pr.HeadRepo == nil { pr.HeadRepo, err = getRepositoryByID(e, pr.HeadRepoID) - if err != nil && !IsErrRepoNotExist(err) { + if err != nil && !errors.IsRepoNotExist(err) { return fmt.Errorf("getRepositoryByID.(HeadRepo) [%d]: %v", pr.HeadRepoID, err) } } diff --git a/models/repo.go b/models/repo.go index 751850d85..0f448ba67 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1366,7 +1366,7 @@ func DeleteRepository(uid, repoID int64) error { if err != nil { return err } else if !has { - return ErrRepoNotExist{repoID, uid, ""} + return errors.RepoNotExist{repoID, uid, ""} } // In case is a organization. @@ -1503,9 +1503,9 @@ func GetRepositoryByName(ownerID int64, name string) (*Repository, error) { if err != nil { return nil, err } else if !has { - return nil, ErrRepoNotExist{0, ownerID, name} + return nil, errors.RepoNotExist{0, ownerID, name} } - return repo, err + return repo, repo.LoadAttributes() } func getRepositoryByID(e Engine, id int64) (*Repository, error) { @@ -1514,9 +1514,9 @@ func getRepositoryByID(e Engine, id int64) (*Repository, error) { if err != nil { return nil, err } else if !has { - return nil, ErrRepoNotExist{id, 0, ""} + return nil, errors.RepoNotExist{id, 0, ""} } - return repo, nil + return repo, repo.loadAttributes(e) } // GetRepositoryByID returns the repository by given id if exists. diff --git a/modules/context/repo.go b/modules/context/repo.go index 4a3ccf977..d3475e436 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -111,7 +111,7 @@ func (r *Repository) PullRequestURL(baseBranch, headBranch string) string { func RetrieveBaseRepo(ctx *Context, repo *models.Repository) { // Non-fork repository will not return error in this method. if err := repo.GetBaseRepo(); err != nil { - if models.IsErrRepoNotExist(err) { + if errors.IsRepoNotExist(err) { repo.IsFork = false repo.ForkID = 0 return @@ -180,7 +180,7 @@ func RepoAssignment() macaron.Handler { // Get repository. repo, err := models.GetRepositoryByName(owner.ID, repoName) if err != nil { - if models.IsErrRepoNotExist(err) { + if errors.IsRepoNotExist(err) { if ctx.Query("go-get") == "1" { earlyResponseForGoGetMeta(ctx) return diff --git a/routers/api/v1/admin/org_repo.go b/routers/api/v1/admin/org_repo.go index 71c84ad0e..050f4577b 100644 --- a/routers/api/v1/admin/org_repo.go +++ b/routers/api/v1/admin/org_repo.go @@ -6,13 +6,14 @@ package admin import ( "github.com/gogits/gogs/models" + "github.com/gogits/gogs/models/errors" "github.com/gogits/gogs/modules/context" ) func GetRepositoryByParams(ctx *context.APIContext) *models.Repository { repo, err := models.GetRepositoryByName(ctx.Org.Team.OrgID, ctx.Params(":reponame")) if err != nil { - if models.IsErrRepoNotExist(err) { + if errors.IsRepoNotExist(err) { ctx.Status(404) } else { ctx.Error(500, "GetRepositoryByName", err) diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 6a9c5441d..ad2355409 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -52,7 +52,7 @@ func repoAssignment() macaron.Handler { // Get repository. repo, err := models.GetRepositoryByName(owner.ID, repoName) if err != nil { - if models.IsErrRepoNotExist(err) { + if errors.IsRepoNotExist(err) { ctx.Status(404) } else { ctx.Error(500, "GetRepositoryByName", err) diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 7ff47a2d5..99ae391db 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -291,7 +291,7 @@ func parseOwnerAndRepo(ctx *context.APIContext) (*models.User, *models.Repositor repo, err := models.GetRepositoryByName(owner.ID, ctx.Params(":reponame")) if err != nil { - if models.IsErrRepoNotExist(err) { + if errors.IsRepoNotExist(err) { ctx.Status(404) } else { ctx.Error(500, "GetRepositoryByName", err) diff --git a/routers/org/teams.go b/routers/org/teams.go index 503739de5..abd2fd9ec 100644 --- a/routers/org/teams.go +++ b/routers/org/teams.go @@ -121,7 +121,7 @@ func TeamsRepoAction(ctx *context.Context) { var repo *models.Repository repo, err = models.GetRepositoryByName(ctx.Org.Organization.ID, repoName) if err != nil { - if models.IsErrRepoNotExist(err) { + if errors.IsRepoNotExist(err) { ctx.Flash.Error(ctx.Tr("org.teams.add_nonexistent_repo")) ctx.Redirect(ctx.Org.OrgLink + "/teams/" + ctx.Org.Team.LowerName + "/repositories") return diff --git a/routers/repo/http.go b/routers/repo/http.go index b385a13a2..e1cc5f969 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -66,7 +66,7 @@ func HTTPContexter() macaron.Handler { repo, err := models.GetRepositoryByName(owner.ID, repoName) if err != nil { - ctx.NotFoundOrServerError("GetRepositoryByName", models.IsErrRepoNotExist, err) + ctx.NotFoundOrServerError("GetRepositoryByName", errors.IsRepoNotExist, err) return } diff --git a/routers/repo/pull.go b/routers/repo/pull.go index aa61dcd93..51d34877e 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -42,7 +42,7 @@ var ( func parseBaseRepository(ctx *context.Context) *models.Repository { baseRepo, err := models.GetRepositoryByID(ctx.ParamsInt64(":repoid")) if err != nil { - ctx.NotFoundOrServerError("GetRepositoryByID", models.IsErrRepoNotExist, err) + ctx.NotFoundOrServerError("GetRepositoryByID", errors.IsRepoNotExist, err) return nil } @@ -718,7 +718,7 @@ func parseOwnerAndRepo(ctx *context.Context) (*models.User, *models.Repository) repo, err := models.GetRepositoryByName(owner.ID, ctx.Params(":reponame")) if err != nil { - ctx.NotFoundOrServerError("GetRepositoryByName", models.IsErrRepoNotExist, err) + ctx.NotFoundOrServerError("GetRepositoryByName", errors.IsRepoNotExist, err) return nil, nil }