From 588f3215c6c4a82c7ad9cbd2cc6a5683d0ca3cc2 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Mon, 16 Mar 2015 04:04:27 -0400 Subject: [PATCH] #1040: dashboard no longer accessible when repo is missing --- cmd/serve.go | 2 +- gogs.go | 2 +- models/access.go | 6 ++++++ models/error.go | 31 +++++++++++++++++++++++++++++++ models/repo.go | 9 ++++----- modules/middleware/repo.go | 4 ++-- routers/org/teams.go | 2 +- routers/repo/http.go | 2 +- routers/repo/repo.go | 4 ++-- routers/user/home.go | 2 +- templates/.VERSION | 2 +- 11 files changed, 51 insertions(+), 15 deletions(-) create mode 100644 models/error.go diff --git a/cmd/serve.go b/cmd/serve.go index 1138317e2..484060c4c 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -128,7 +128,7 @@ func runServ(c *cli.Context) { repo, err := models.GetRepositoryByName(repoUser.Id, repoName) if err != nil { - if err == models.ErrRepoNotExist { + if models.IsErrRepoNotExist(err) { if user.Id == repoUser.Id || repoUser.IsOwnedBy(user.Id) { fail("Repository does not exist", "Repository does not exist: %s/%s", repoUser.Name, repoName) } else { diff --git a/gogs.go b/gogs.go index fd303fa28..ab11b7e6f 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.5.16.0312 Beta" +const APP_VER = "0.5.16.0316 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/access.go b/models/access.go index f353c39a2..ea2f7f7b4 100644 --- a/models/access.go +++ b/models/access.go @@ -6,6 +6,8 @@ package models import ( "fmt" + + "github.com/gogits/gogs/modules/log" ) type AccessMode int @@ -77,6 +79,10 @@ func (u *User) GetAccessibleRepositories() (map[*Repository]AccessMode, error) { for _, access := range accesses { repo, err := GetRepositoryById(access.RepoID) if err != nil { + if IsErrRepoNotExist(err) { + log.Error(4, "%v", err) + continue + } return nil, err } if err = repo.GetOwner(); err != nil { diff --git a/models/error.go b/models/error.go new file mode 100644 index 000000000..6f1a366cb --- /dev/null +++ b/models/error.go @@ -0,0 +1,31 @@ +// Copyright 2015 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package models + +import ( + "fmt" +) + +// __________ .__ __ +// \______ \ ____ ______ ____ _____|__|/ |_ ___________ ___.__. +// | _// __ \\____ \ / _ \/ ___/ \ __\/ _ \_ __ < | | +// | | \ ___/| |_> > <_> )___ \| || | ( <_> ) | \/\___ | +// |____|_ /\___ > __/ \____/____ >__||__| \____/|__| / ____| +// \/ \/|__| \/ \/ + +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) +} diff --git a/models/repo.go b/models/repo.go index 7abb793e5..2718970f1 100644 --- a/models/repo.go +++ b/models/repo.go @@ -35,7 +35,6 @@ const ( var ( ErrRepoAlreadyExist = errors.New("Repository already exist") - ErrRepoNotExist = errors.New("Repository does not exist") ErrRepoFileNotExist = errors.New("Repository file does not exist") ErrRepoNameIllegal = errors.New("Repository name contains illegal characters") ErrRepoFileNotLoaded = errors.New("Repository file not loaded") @@ -758,7 +757,7 @@ func DeleteRepository(uid, repoID int64, userName string) error { if err != nil { return err } else if !has { - return ErrRepoNotExist + return ErrRepoNotExist{repoID, uid, ""} } // In case is a organization. @@ -875,18 +874,18 @@ func GetRepositoryByName(uid int64, repoName string) (*Repository, error) { if err != nil { return nil, err } else if !has { - return nil, ErrRepoNotExist + return nil, ErrRepoNotExist{0, uid, repoName} } return repo, err } func getRepositoryById(e Engine, id int64) (*Repository, error) { - repo := &Repository{} + repo := new(Repository) has, err := e.Id(id).Get(repo) if err != nil { return nil, err } else if !has { - return nil, ErrRepoNotExist + return nil, ErrRepoNotExist{id, 0, ""} } return repo, nil } diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go index 3350c03d2..a200d6d66 100644 --- a/modules/middleware/repo.go +++ b/modules/middleware/repo.go @@ -47,7 +47,7 @@ func ApiRepoAssignment() macaron.Handler { // Get repository. repo, err := models.GetRepositoryByName(u.Id, repoName) if err != nil { - if err == models.ErrRepoNotExist { + if models.IsErrRepoNotExist(err) { ctx.Error(404) } else { ctx.JSON(500, &base.ApiJsonErr{"GetRepositoryByName: " + err.Error(), base.DOC_URL}) @@ -223,7 +223,7 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { // Get repository. repo, err := models.GetRepositoryByName(u.Id, repoName) if err != nil { - if err == models.ErrRepoNotExist { + if models.IsErrRepoNotExist(err) { ctx.Handle(404, "GetRepositoryByName", err) } else { ctx.Handle(500, "GetRepositoryByName", err) diff --git a/routers/org/teams.go b/routers/org/teams.go index 69f2734c6..40345cf7c 100644 --- a/routers/org/teams.go +++ b/routers/org/teams.go @@ -124,7 +124,7 @@ func TeamsRepoAction(ctx *middleware.Context) { var repo *models.Repository repo, err = models.GetRepositoryByName(ctx.Org.Organization.Id, repoName) if err != nil { - if err == models.ErrRepoNotExist { + if models.IsErrRepoNotExist(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 f5dc00b8d..9165128a3 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -65,7 +65,7 @@ func Http(ctx *middleware.Context) { repo, err := models.GetRepositoryByName(repoUser.Id, reponame) if err != nil { - if err == models.ErrRepoNotExist { + if models.IsErrRepoNotExist(err) { ctx.Handle(404, "GetRepositoryByName", nil) } else { ctx.Handle(500, "GetRepositoryByName", err) diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 37d07c563..a70f31e61 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -251,7 +251,7 @@ func Fork(ctx *middleware.Context) { ctx.Data["Title"] = ctx.Tr("new_fork") if _, err := getForkRepository(ctx); err != nil { - if err == models.ErrRepoNotExist { + if models.IsErrRepoNotExist(err) { ctx.Redirect(setting.AppSubUrl + "/") } else { ctx.Handle(500, "getForkRepository", err) @@ -275,7 +275,7 @@ func ForkPost(ctx *middleware.Context, form auth.CreateRepoForm) { forkRepo, err := getForkRepository(ctx) if err != nil { - if err == models.ErrRepoNotExist { + if models.IsErrRepoNotExist(err) { ctx.Redirect(setting.AppSubUrl + "/") } else { ctx.Handle(500, "getForkRepository", err) diff --git a/routers/user/home.go b/routers/user/home.go index 0a1d9dd21..d690b3a7c 100644 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -354,7 +354,7 @@ func Issues(ctx *middleware.Context) { issues[i].Repo, err = models.GetRepositoryById(issues[i].RepoId) if err != nil { - if err == models.ErrRepoNotExist { + if models.IsErrRepoNotExist(err) { log.Warn("user.Issues(GetRepositoryById #%d): repository not exist", issues[i].RepoId) continue } else { diff --git a/templates/.VERSION b/templates/.VERSION index 7bc05ce05..ce64b3a8b 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.5.16.0312 Beta \ No newline at end of file +0.5.16.0316 Beta \ No newline at end of file