From: Ethan Koenig Date: Thu, 5 Oct 2017 07:32:25 +0000 (-0700) Subject: Refactor duplicated code in repo handlers (#2657) X-Git-Tag: v1.3.0-rc1~138 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=67e1c29dc5cc994448a7c383586e6271ae7a7533;p=gitea.git Refactor duplicated code in repo handlers (#2657) * Refactor duplicated code in repo handlers * ctx.Handle --- diff --git a/modules/context/repo.go b/modules/context/repo.go index ae38c25567..ce65bfd045 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -174,13 +174,54 @@ func RedirectToRepo(ctx *Context, redirectRepoID int64) { ctx.Redirect(redirectPath) } -// RepoIDAssignment returns an macaron handler which assigns the repo to the context. +func repoAssignment(ctx *Context, repo *models.Repository) { + // Admin has super access. + if ctx.IsSigned && ctx.User.IsAdmin { + ctx.Repo.AccessMode = models.AccessModeOwner + } else { + var userID int64 + if ctx.User != nil { + userID = ctx.User.ID + } + mode, err := models.AccessLevel(userID, repo) + if err != nil { + ctx.Handle(500, "AccessLevel", err) + return + } + ctx.Repo.AccessMode = mode + } + + // Check access. + if ctx.Repo.AccessMode == models.AccessModeNone { + if ctx.Query("go-get") == "1" { + EarlyResponseForGoGetMeta(ctx) + return + } + ctx.Handle(404, "no access right", nil) + return + } + ctx.Data["HasAccess"] = true + + if repo.IsMirror { + var err error + ctx.Repo.Mirror, err = models.GetMirrorByRepoID(repo.ID) + if err != nil { + ctx.Handle(500, "GetMirror", err) + return + } + ctx.Data["MirrorEnablePrune"] = ctx.Repo.Mirror.EnablePrune + ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval + ctx.Data["Mirror"] = ctx.Repo.Mirror + } + + ctx.Repo.Repository = repo + ctx.Data["RepoName"] = ctx.Repo.Repository.Name + ctx.Data["IsBareRepo"] = ctx.Repo.Repository.IsBare +} + +// RepoIDAssignment returns a macaron handler which assigns the repo to the context. func RepoIDAssignment() macaron.Handler { return func(ctx *Context) { - var ( - err error - ) - repoID := ctx.ParamsInt64(":repoid") // Get repository. @@ -198,48 +239,7 @@ func RepoIDAssignment() macaron.Handler { ctx.Handle(500, "GetOwner", err) return } - - // Admin has super access. - if ctx.IsSigned && ctx.User.IsAdmin { - ctx.Repo.AccessMode = models.AccessModeOwner - } else { - var userID int64 - if ctx.User != nil { - userID = ctx.User.ID - } - mode, err := models.AccessLevel(userID, repo) - if err != nil { - ctx.Handle(500, "AccessLevel", err) - return - } - ctx.Repo.AccessMode = mode - } - - // Check access. - if ctx.Repo.AccessMode == models.AccessModeNone { - if ctx.Query("go-get") == "1" { - EarlyResponseForGoGetMeta(ctx) - return - } - ctx.Handle(404, "no access right", err) - return - } - ctx.Data["HasAccess"] = true - - if repo.IsMirror { - ctx.Repo.Mirror, err = models.GetMirrorByRepoID(repo.ID) - if err != nil { - ctx.Handle(500, "GetMirror", err) - return - } - ctx.Data["MirrorEnablePrune"] = ctx.Repo.Mirror.EnablePrune - ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval - ctx.Data["Mirror"] = ctx.Repo.Mirror - } - - ctx.Repo.Repository = repo - ctx.Data["RepoName"] = ctx.Repo.Repository.Name - ctx.Data["IsBareRepo"] = ctx.Repo.Repository.IsBare + repoAssignment(ctx, repo) } } @@ -298,47 +298,10 @@ func RepoAssignment() macaron.Handler { } repo.Owner = owner - // Admin has super access. - if ctx.IsSigned && ctx.User.IsAdmin { - ctx.Repo.AccessMode = models.AccessModeOwner - } else { - var userID int64 - if ctx.User != nil { - userID = ctx.User.ID - } - mode, err := models.AccessLevel(userID, repo) - if err != nil { - ctx.Handle(500, "AccessLevel", err) - return - } - ctx.Repo.AccessMode = mode - } - - // Check access. - if ctx.Repo.AccessMode == models.AccessModeNone { - if ctx.Query("go-get") == "1" { - EarlyResponseForGoGetMeta(ctx) - return - } - ctx.Handle(404, "no access right", err) + repoAssignment(ctx, repo) + if ctx.Written() { return } - ctx.Data["HasAccess"] = true - - if repo.IsMirror { - ctx.Repo.Mirror, err = models.GetMirrorByRepoID(repo.ID) - if err != nil { - ctx.Handle(500, "GetMirror", err) - return - } - ctx.Data["MirrorEnablePrune"] = ctx.Repo.Mirror.EnablePrune - ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval - ctx.Data["Mirror"] = ctx.Repo.Mirror - } - - ctx.Repo.Repository = repo - ctx.Data["RepoName"] = ctx.Repo.Repository.Name - ctx.Data["IsBareRepo"] = ctx.Repo.Repository.IsBare gitRepo, err := git.OpenRepository(models.RepoPath(userName, repoName)) if err != nil {