mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: techknowlogick <matti@mdranta.net>
This commit is contained in:
		@@ -152,12 +152,12 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *
 | 
			
		||||
			ctx.ServerError("OpenRepository", err)
 | 
			
		||||
			return nil, nil, nil, nil, "", ""
 | 
			
		||||
		}
 | 
			
		||||
		defer headGitRepo.Close()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// user should have permission to read baseRepo's codes and pulls, NOT headRepo's
 | 
			
		||||
	permBase, err := models.GetUserRepoPermission(baseRepo, ctx.User)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		headGitRepo.Close()
 | 
			
		||||
		ctx.ServerError("GetUserRepoPermission", err)
 | 
			
		||||
		return nil, nil, nil, nil, "", ""
 | 
			
		||||
	}
 | 
			
		||||
@@ -168,42 +168,40 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *
 | 
			
		||||
				baseRepo,
 | 
			
		||||
				permBase)
 | 
			
		||||
		}
 | 
			
		||||
		headGitRepo.Close()
 | 
			
		||||
		ctx.NotFound("ParseCompareInfo", nil)
 | 
			
		||||
		return nil, nil, nil, nil, "", ""
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// user should have permission to read headrepo's codes
 | 
			
		||||
	permHead, err := models.GetUserRepoPermission(headRepo, ctx.User)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		headGitRepo.Close()
 | 
			
		||||
		ctx.ServerError("GetUserRepoPermission", err)
 | 
			
		||||
		return nil, nil, nil, nil, "", ""
 | 
			
		||||
	}
 | 
			
		||||
	if !permHead.CanRead(models.UnitTypeCode) {
 | 
			
		||||
		if log.IsTrace() {
 | 
			
		||||
			log.Trace("Permission Denied: User: %-v cannot read code in Repo: %-v\nUser in headRepo has Permissions: %-+v",
 | 
			
		||||
				ctx.User,
 | 
			
		||||
				headRepo,
 | 
			
		||||
				permHead)
 | 
			
		||||
	if !isSameRepo {
 | 
			
		||||
		// user should have permission to read headrepo's codes
 | 
			
		||||
		permHead, err := models.GetUserRepoPermission(headRepo, ctx.User)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.ServerError("GetUserRepoPermission", err)
 | 
			
		||||
			return nil, nil, nil, nil, "", ""
 | 
			
		||||
		}
 | 
			
		||||
		if !permHead.CanRead(models.UnitTypeCode) {
 | 
			
		||||
			if log.IsTrace() {
 | 
			
		||||
				log.Trace("Permission Denied: User: %-v cannot read code in Repo: %-v\nUser in headRepo has Permissions: %-+v",
 | 
			
		||||
					ctx.User,
 | 
			
		||||
					headRepo,
 | 
			
		||||
					permHead)
 | 
			
		||||
			}
 | 
			
		||||
			ctx.NotFound("ParseCompareInfo", nil)
 | 
			
		||||
			return nil, nil, nil, nil, "", ""
 | 
			
		||||
		}
 | 
			
		||||
		headGitRepo.Close()
 | 
			
		||||
		ctx.NotFound("ParseCompareInfo", nil)
 | 
			
		||||
		return nil, nil, nil, nil, "", ""
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Check if head branch is valid.
 | 
			
		||||
	headIsCommit := ctx.Repo.GitRepo.IsCommitExist(headBranch)
 | 
			
		||||
	headIsCommit := headGitRepo.IsCommitExist(headBranch)
 | 
			
		||||
	headIsBranch := headGitRepo.IsBranchExist(headBranch)
 | 
			
		||||
	headIsTag := headGitRepo.IsTagExist(headBranch)
 | 
			
		||||
	if !headIsCommit && !headIsBranch && !headIsTag {
 | 
			
		||||
		// Check if headBranch is short sha commit hash
 | 
			
		||||
		if headCommit, _ := ctx.Repo.GitRepo.GetCommit(headBranch); headCommit != nil {
 | 
			
		||||
		if headCommit, _ := headGitRepo.GetCommit(headBranch); headCommit != nil {
 | 
			
		||||
			headBranch = headCommit.ID.String()
 | 
			
		||||
			ctx.Data["HeadBranch"] = headBranch
 | 
			
		||||
			headIsCommit = true
 | 
			
		||||
		} else {
 | 
			
		||||
			headGitRepo.Close()
 | 
			
		||||
			ctx.NotFound("IsRefExist", nil)
 | 
			
		||||
			return nil, nil, nil, nil, "", ""
 | 
			
		||||
		}
 | 
			
		||||
@@ -224,14 +222,12 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *
 | 
			
		||||
				baseRepo,
 | 
			
		||||
				permBase)
 | 
			
		||||
		}
 | 
			
		||||
		headGitRepo.Close()
 | 
			
		||||
		ctx.NotFound("ParseCompareInfo", nil)
 | 
			
		||||
		return nil, nil, nil, nil, "", ""
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	compareInfo, err := headGitRepo.GetCompareInfo(models.RepoPath(baseRepo.Owner.Name, baseRepo.Name), baseBranch, headBranch)
 | 
			
		||||
	compareInfo, err := headGitRepo.GetCompareInfo(baseRepo.RepoPath(), baseBranch, headBranch)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		headGitRepo.Close()
 | 
			
		||||
		ctx.ServerError("GetCompareInfo", err)
 | 
			
		||||
		return nil, nil, nil, nil, "", ""
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user