Browse Source

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).
tags/v1.21.12.1
Keith Rutkowski techknowlogick 5 years ago
parent
commit
21f84a6315
1 changed files with 35 additions and 70 deletions
  1. +35
    -70
      routers/repo/pull.go

+ 35
- 70
routers/repo/pull.go View File

@@ -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)
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.MustHeadUserName()
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)
@@ -497,63 +490,35 @@ func ViewPullFiles(ctx *context.Context) {
)

var headTarget string
var prInfo *git.CompareInfo
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
}
prInfo = PrepareViewPullInfo(ctx, issue)
}

headRepoPath := pull.HeadRepo.RepoPath()
if ctx.Written() {
return
} else if prInfo == nil {
ctx.NotFound("ViewPullFiles", nil)
return
}

headGitRepo, err := git.OpenRepository(headRepoPath)
if err != nil {
ctx.ServerError("OpenRepository", err)
return
}
defer headGitRepo.Close()
diffRepoPath = ctx.Repo.GitRepo.Path
gitRepo = ctx.Repo.GitRepo

headCommitID, err := headGitRepo.GetBranchCommitID(pull.HeadBranch)
if err != nil {
ctx.ServerError("GetBranchCommitID", err)
return
}
headCommitID, err := gitRepo.GetRefCommitID(pull.GetGitRefName())
if err != nil {
ctx.ServerError("GetRefCommitID", err)
return
}

diffRepoPath = headRepoPath
startCommitID = prInfo.MergeBase
endCommitID = headCommitID
gitRepo = headGitRepo
startCommitID = prInfo.MergeBase
endCommitID = headCommitID

headTarget = path.Join(pull.MustHeadUserName(), pull.HeadRepo.Name)
ctx.Data["Username"] = pull.MustHeadUserName()
ctx.Data["Reponame"] = pull.HeadRepo.Name
}
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
ctx.Data["AfterCommitID"] = endCommitID

diff, err := gitdiff.GetDiffRangeWithWhitespaceBehavior(diffRepoPath,


Loading…
Cancel
Save