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,13 +174,54 @@ func RedirectToRepo(ctx *Context, redirectRepoID int64) {
 | 
				
			|||||||
	ctx.Redirect(redirectPath)
 | 
						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 {
 | 
					func RepoIDAssignment() macaron.Handler {
 | 
				
			||||||
	return func(ctx *Context) {
 | 
						return func(ctx *Context) {
 | 
				
			||||||
		var (
 | 
					 | 
				
			||||||
			err error
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		repoID := ctx.ParamsInt64(":repoid")
 | 
							repoID := ctx.ParamsInt64(":repoid")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Get repository.
 | 
							// Get repository.
 | 
				
			||||||
@@ -198,48 +239,7 @@ func RepoIDAssignment() macaron.Handler {
 | 
				
			|||||||
			ctx.Handle(500, "GetOwner", err)
 | 
								ctx.Handle(500, "GetOwner", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							repoAssignment(ctx, repo)
 | 
				
			||||||
		// 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
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -298,47 +298,10 @@ func RepoAssignment() macaron.Handler {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		repo.Owner = owner
 | 
							repo.Owner = owner
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Admin has super access.
 | 
							repoAssignment(ctx, repo)
 | 
				
			||||||
		if ctx.IsSigned && ctx.User.IsAdmin {
 | 
							if ctx.Written() {
 | 
				
			||||||
			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
 | 
								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))
 | 
							gitRepo, err := git.OpenRepository(models.RepoPath(userName, repoName))
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user