]> source.dussan.org Git - gitea.git/commitdiff
Change PR commits and diffs to use base repo rather than forked (#3648)
authorKeith Rutkowski <keith@analytech-solutions.com>
Wed, 18 Dec 2019 18:37:44 +0000 (13:37 -0500)
committertechknowlogick <techknowlogick@gitea.io>
Wed, 18 Dec 2019 18:37:44 +0000 (13:37 -0500)
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

index c1a2a25a38b3f8c8e049e74a6316b76e63ac124b..e4b4a5ac4987ee20eebe318ed4e1d7fac3b18265 100644 (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,