mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Change PR commits and diffs to use base repo rather than forked (#3648)
Change the repository referenced when displaying commits or diffs in pull request to the base repository. The forked repository may not be readable by users who can read the base repository. See discussion for (#3356).
This commit is contained in:
		
				
					committed by
					
						
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							d66ae50fd5
						
					
				
				
					commit
					21f84a6315
				
			@@ -438,30 +438,23 @@ func ViewPullCommits(ctx *context.Context) {
 | 
			
		||||
	pull := issue.PullRequest
 | 
			
		||||
 | 
			
		||||
	var commits *list.List
 | 
			
		||||
	var prInfo *git.CompareInfo
 | 
			
		||||
	if pull.HasMerged {
 | 
			
		||||
		prInfo := PrepareMergedViewPullInfo(ctx, issue)
 | 
			
		||||
		prInfo = PrepareMergedViewPullInfo(ctx, issue)
 | 
			
		||||
	} else {
 | 
			
		||||
		prInfo = PrepareViewPullInfo(ctx, issue)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ctx.Written() {
 | 
			
		||||
		return
 | 
			
		||||
	} else if prInfo == nil {
 | 
			
		||||
		ctx.NotFound("ViewPullCommits", nil)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ctx.Data["Username"] = ctx.Repo.Owner.Name
 | 
			
		||||
	ctx.Data["Reponame"] = ctx.Repo.Repository.Name
 | 
			
		||||
	commits = prInfo.Commits
 | 
			
		||||
	} else {
 | 
			
		||||
		prInfo := PrepareViewPullInfo(ctx, issue)
 | 
			
		||||
		if ctx.Written() {
 | 
			
		||||
			return
 | 
			
		||||
		} else if prInfo == nil {
 | 
			
		||||
			ctx.NotFound("ViewPullCommits", nil)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		ctx.Data["Username"] = pull.MustHeadUserName()
 | 
			
		||||
		ctx.Data["Reponame"] = pull.HeadRepo.Name
 | 
			
		||||
		commits = prInfo.Commits
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	commits = models.ValidateCommitsWithEmails(commits)
 | 
			
		||||
	commits = models.ParseCommitsWithSignature(commits)
 | 
			
		||||
	commits = models.ParseCommitsWithStatus(commits, ctx.Repo.Repository)
 | 
			
		||||
@@ -497,8 +490,13 @@ func ViewPullFiles(ctx *context.Context) {
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	var headTarget string
 | 
			
		||||
	var prInfo *git.CompareInfo
 | 
			
		||||
	if pull.HasMerged {
 | 
			
		||||
		prInfo := PrepareMergedViewPullInfo(ctx, issue)
 | 
			
		||||
		prInfo = PrepareMergedViewPullInfo(ctx, issue)
 | 
			
		||||
	} else {
 | 
			
		||||
		prInfo = PrepareViewPullInfo(ctx, issue)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ctx.Written() {
 | 
			
		||||
		return
 | 
			
		||||
	} else if prInfo == nil {
 | 
			
		||||
@@ -521,39 +519,6 @@ func ViewPullFiles(ctx *context.Context) {
 | 
			
		||||
	headTarget = path.Join(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
 | 
			
		||||
	ctx.Data["Username"] = ctx.Repo.Owner.Name
 | 
			
		||||
	ctx.Data["Reponame"] = ctx.Repo.Repository.Name
 | 
			
		||||
	} else {
 | 
			
		||||
		prInfo := PrepareViewPullInfo(ctx, issue)
 | 
			
		||||
		if ctx.Written() {
 | 
			
		||||
			return
 | 
			
		||||
		} else if prInfo == nil {
 | 
			
		||||
			ctx.NotFound("ViewPullFiles", nil)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		headRepoPath := pull.HeadRepo.RepoPath()
 | 
			
		||||
 | 
			
		||||
		headGitRepo, err := git.OpenRepository(headRepoPath)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.ServerError("OpenRepository", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		defer headGitRepo.Close()
 | 
			
		||||
 | 
			
		||||
		headCommitID, err := headGitRepo.GetBranchCommitID(pull.HeadBranch)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.ServerError("GetBranchCommitID", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		diffRepoPath = headRepoPath
 | 
			
		||||
		startCommitID = prInfo.MergeBase
 | 
			
		||||
		endCommitID = headCommitID
 | 
			
		||||
		gitRepo = headGitRepo
 | 
			
		||||
 | 
			
		||||
		headTarget = path.Join(pull.MustHeadUserName(), pull.HeadRepo.Name)
 | 
			
		||||
		ctx.Data["Username"] = pull.MustHeadUserName()
 | 
			
		||||
		ctx.Data["Reponame"] = pull.HeadRepo.Name
 | 
			
		||||
	}
 | 
			
		||||
	ctx.Data["AfterCommitID"] = endCommitID
 | 
			
		||||
 | 
			
		||||
	diff, err := gitdiff.GetDiffRangeWithWhitespaceBehavior(diffRepoPath,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user