From 34102f788945b1c73a845f7916d01d216baa56ad Mon Sep 17 00:00:00 2001 From: Unknwon Date: Wed, 11 Mar 2015 09:21:05 -0400 Subject: remove unused scripts and simplify migrate form definition --- routers/repo/repo.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'routers/repo/repo.go') diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 6b84a389..37d07c56 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -181,7 +181,7 @@ func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) { } } - // Remote address can be HTTPS URL or local path. + // Remote address can be HTTP/HTTPS URL or local path. remoteAddr := form.CloneAddr if strings.HasPrefix(form.CloneAddr, "http") { u, err := url.Parse(form.CloneAddr) @@ -190,8 +190,8 @@ func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) { ctx.RenderWithErr(ctx.Tr("form.url_error"), MIGRATE, &form) return } - if len(form.AuthUserName) > 0 || len(form.AuthPasswd) > 0 { - u.User = url.UserPassword(form.AuthUserName, form.AuthPasswd) + if len(form.AuthUsername) > 0 || len(form.AuthPassword) > 0 { + u.User = url.UserPassword(form.AuthUsername, form.AuthPassword) } remoteAddr = u.String() } else if !com.IsDir(remoteAddr) { -- cgit v1.2.3 From 588f3215c6c4a82c7ad9cbd2cc6a5683d0ca3cc2 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Mon, 16 Mar 2015 04:04:27 -0400 Subject: #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 (limited to 'routers/repo/repo.go') diff --git a/cmd/serve.go b/cmd/serve.go index 1138317e..484060c4 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 fd303fa2..ab11b7e6 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 f353c39a..ea2f7f7b 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 00000000..6f1a366c --- /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 7abb793e..2718970f 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 3350c03d..a200d6d6 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 69f2734c..40345cf7 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 f5dc00b8..9165128a 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 37d07c56..a70f31e6 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 0a1d9dd2..d690b3a7 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 7bc05ce0..ce64b3a8 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 -- cgit v1.2.3 From fc6db829b2040227bb9dac6d243a9f94c5651154 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Mon, 16 Mar 2015 04:52:11 -0400 Subject: fix read access team visibility of private repo --- models/action.go | 2 +- models/repo.go | 44 ++++++++++++++++++++++++++++++++++++-------- routers/repo/repo.go | 2 +- routers/repo/setting.go | 3 ++- 4 files changed, 40 insertions(+), 11 deletions(-) (limited to 'routers/repo/repo.go') diff --git a/models/action.go b/models/action.go index f97ecfcd..46ce44e2 100644 --- a/models/action.go +++ b/models/action.go @@ -309,7 +309,7 @@ func CommitRepoAction(userId, repoUserId int64, userName, actEmail string, return errors.New("action.CommitRepoAction(GetRepositoryByName): " + err.Error()) } repo.IsBare = false - if err = UpdateRepository(repo); err != nil { + if err = UpdateRepository(repo, false); err != nil { return errors.New("action.CommitRepoAction(UpdateRepository): " + err.Error()) } diff --git a/models/repo.go b/models/repo.go index 2718970f..e5d63c03 100644 --- a/models/repo.go +++ b/models/repo.go @@ -347,7 +347,7 @@ func MigrateRepository(u *User, name, desc string, private, mirror bool, url str return repo, err } repo.IsMirror = true - return repo, UpdateRepository(repo) + return repo, UpdateRepository(repo, false) } else { os.RemoveAll(repoPath) } @@ -362,7 +362,7 @@ func MigrateRepository(u *User, name, desc string, private, mirror bool, url str return repo, fmt.Errorf("create update hook: %v", err) } - return repo, UpdateRepository(repo) + return repo, UpdateRepository(repo, false) } // extractGitBareZip extracts git-bare.zip to repository path. @@ -501,7 +501,7 @@ func initRepository(e Engine, f string, u *User, repo *Repository, initReadme bo } repo.IsBare = true repo.DefaultBranch = "master" - return updateRepository(e, repo) + return updateRepository(e, repo, false) } // Apply changes and commit. @@ -733,7 +733,7 @@ func ChangeRepositoryName(userName, oldRepoName, newRepoName string) (err error) return os.Rename(RepoPath(userName, oldRepoName), RepoPath(userName, newRepoName)) } -func updateRepository(e Engine, repo *Repository) error { +func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err error) { repo.LowerName = strings.ToLower(repo.Name) if len(repo.Description) > 255 { @@ -742,12 +742,40 @@ func updateRepository(e Engine, repo *Repository) error { if len(repo.Website) > 255 { repo.Website = repo.Website[:255] } - _, err := e.Id(repo.Id).AllCols().Update(repo) - return err + + if _, err = e.Id(repo.Id).AllCols().Update(repo); err != nil { + return fmt.Errorf("update: %v", err) + } + + if visibilityChanged { + if err = repo.getOwner(e); err != nil { + return fmt.Errorf("getOwner: %v", err) + } + if !repo.Owner.IsOrganization() { + return nil + } + + // Organization repository need to recalculate access table when visivility is changed. + if err = repo.recalculateTeamAccesses(e, 0); err != nil { + return fmt.Errorf("recalculateTeamAccesses: %v", err) + } + } + + return nil } -func UpdateRepository(repo *Repository) error { - return updateRepository(x, repo) +func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) { + sess := x.NewSession() + defer sessionRelease(sess) + if err = sess.Begin(); err != nil { + return err + } + + if err = updateRepository(x, repo, visibilityChanged); err != nil { + return fmt.Errorf("updateRepository: %v", err) + } + + return sess.Commit() } // DeleteRepository deletes a repository for a user or organization. diff --git a/routers/repo/repo.go b/routers/repo/repo.go index a70f31e6..8884bea3 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -356,7 +356,7 @@ func Action(ctx *middleware.Context) { ctx.Repo.Repository.Description = ctx.Query("desc") ctx.Repo.Repository.Website = ctx.Query("site") - err = models.UpdateRepository(ctx.Repo.Repository) + err = models.UpdateRepository(ctx.Repo.Repository, false) } if err != nil { diff --git a/routers/repo/setting.go b/routers/repo/setting.go index 5b9b672c..be21405b 100644 --- a/routers/repo/setting.go +++ b/routers/repo/setting.go @@ -78,8 +78,9 @@ func SettingsPost(ctx *middleware.Context, form auth.RepoSettingForm) { } ctx.Repo.Repository.Description = form.Description ctx.Repo.Repository.Website = form.Website + visibilityChanged := ctx.Repo.Repository.IsPrivate != form.Private ctx.Repo.Repository.IsPrivate = form.Private - if err := models.UpdateRepository(ctx.Repo.Repository); err != nil { + if err := models.UpdateRepository(ctx.Repo.Repository, visibilityChanged); err != nil { ctx.Handle(404, "UpdateRepository", err) return } -- cgit v1.2.3