mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Refactor duplicated code in repo handlers (#2657)
* Refactor duplicated code in repo handlers * ctx.Handle
This commit is contained in:
		@@ -174,31 +174,7 @@ func RedirectToRepo(ctx *Context, redirectRepoID int64) {
 | 
			
		||||
	ctx.Redirect(redirectPath)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RepoIDAssignment returns an 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.
 | 
			
		||||
		repo, err := models.GetRepositoryByID(repoID)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if models.IsErrRepoNotExist(err) {
 | 
			
		||||
				ctx.Handle(404, "GetRepositoryByID", nil)
 | 
			
		||||
			} else {
 | 
			
		||||
				ctx.Handle(500, "GetRepositoryByID", err)
 | 
			
		||||
			}
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if err = repo.GetOwner(); err != nil {
 | 
			
		||||
			ctx.Handle(500, "GetOwner", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
func repoAssignment(ctx *Context, repo *models.Repository) {
 | 
			
		||||
	// Admin has super access.
 | 
			
		||||
	if ctx.IsSigned && ctx.User.IsAdmin {
 | 
			
		||||
		ctx.Repo.AccessMode = models.AccessModeOwner
 | 
			
		||||
@@ -221,12 +197,13 @@ func RepoIDAssignment() macaron.Handler {
 | 
			
		||||
			EarlyResponseForGoGetMeta(ctx)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
			ctx.Handle(404, "no access right", err)
 | 
			
		||||
		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)
 | 
			
		||||
@@ -240,6 +217,29 @@ func RepoIDAssignment() macaron.Handler {
 | 
			
		||||
	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) {
 | 
			
		||||
		repoID := ctx.ParamsInt64(":repoid")
 | 
			
		||||
 | 
			
		||||
		// Get repository.
 | 
			
		||||
		repo, err := models.GetRepositoryByID(repoID)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if models.IsErrRepoNotExist(err) {
 | 
			
		||||
				ctx.Handle(404, "GetRepositoryByID", nil)
 | 
			
		||||
			} else {
 | 
			
		||||
				ctx.Handle(500, "GetRepositoryByID", err)
 | 
			
		||||
			}
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if err = repo.GetOwner(); err != nil {
 | 
			
		||||
			ctx.Handle(500, "GetOwner", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		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)
 | 
			
		||||
		repoAssignment(ctx, repo)
 | 
			
		||||
		if ctx.Written() {
 | 
			
		||||
			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
 | 
			
		||||
 | 
			
		||||
		gitRepo, err := git.OpenRepository(models.RepoPath(userName, repoName))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user