From 3906649be7b6c6ee6eaedb0451878e2bc2e33917 Mon Sep 17 00:00:00 2001 From: Keith Rutkowski Date: Thu, 8 Mar 2018 13:36:34 -0500 Subject: [PATCH] Change PR commits and diffs to use base repo rather than forked 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). --- routers/repo/pull.go | 112 +++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 73 deletions(-) diff --git a/routers/repo/pull.go b/routers/repo/pull.go index dfe07ca44..df8dd99a9 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -340,30 +340,23 @@ func ViewPullCommits(ctx *context.Context) { pull := issue.PullRequest var commits *list.List + var prInfo *git.PullRequestInfo if pull.HasMerged { - prInfo := PrepareMergedViewPullInfo(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 + 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"] = pull.HeadUserName - ctx.Data["Reponame"] = pull.HeadRepo.Name - commits = prInfo.Commits + 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 commits = models.ValidateCommitsWithEmails(commits) commits = models.ParseCommitsWithSignature(commits) commits = models.ParseCommitsWithStatus(commits, ctx.Repo.Repository) @@ -392,63 +385,36 @@ func ViewPullFiles(ctx *context.Context) { ) var headTarget string + var prInfo *git.PullRequestInfo if pull.HasMerged { - prInfo := PrepareMergedViewPullInfo(ctx, issue) - if ctx.Written() { - return - } else if prInfo == nil { - ctx.NotFound("ViewPullFiles", nil) - return - } - - diffRepoPath = ctx.Repo.GitRepo.Path - gitRepo = ctx.Repo.GitRepo - - headCommitID, err := gitRepo.GetRefCommitID(pull.GetGitRefName()) - if err != nil { - ctx.ServerError("GetRefCommitID", err) - return - } - - startCommitID = prInfo.MergeBase - endCommitID = headCommitID - - 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 + prInfo = PrepareMergedViewPullInfo(ctx, issue) } else { - prInfo := PrepareViewPullInfo(ctx, issue) - if ctx.Written() { - return - } else if prInfo == nil { - ctx.NotFound("ViewPullFiles", nil) - return - } - - headRepoPath := models.RepoPath(pull.HeadUserName, pull.HeadRepo.Name) - - headGitRepo, err := git.OpenRepository(headRepoPath) - if err != nil { - ctx.ServerError("OpenRepository", err) - return - } - - 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.HeadUserName, pull.HeadRepo.Name) - ctx.Data["Username"] = pull.HeadUserName - ctx.Data["Reponame"] = pull.HeadRepo.Name + prInfo = PrepareViewPullInfo(ctx, issue) } + if ctx.Written() { + return + } else if prInfo == nil { + ctx.NotFound("ViewPullFiles", nil) + return + } + + diffRepoPath = ctx.Repo.GitRepo.Path + gitRepo = ctx.Repo.GitRepo + + headCommitID, err := gitRepo.GetRefCommitID(pull.GetGitRefName()) + if err != nil { + ctx.ServerError("GetRefCommitID", err) + return + } + + startCommitID = prInfo.MergeBase + endCommitID = headCommitID + + 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 + diff, err := models.GetDiffRange(diffRepoPath, startCommitID, endCommitID, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles)