summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorLauris BH <lauris@nix.lv>2018-01-19 08:18:51 +0200
committerGitHub <noreply@github.com>2018-01-19 08:18:51 +0200
commitca306985d35f295fb2a2f8a54661731462426281 (patch)
treec63ec4474aecd21a39fd0b7aeac34df602f92311 /routers
parentb0d5bb909b2e558bee5d4d58f201012d5f8b4c1c (diff)
downloadgitea-ca306985d35f295fb2a2f8a54661731462426281.tar.gz
gitea-ca306985d35f295fb2a2f8a54661731462426281.zip
Change how merged PR commit info are prepared (#3368)
* Change how merged PR commits and diff are made * Update code.gitea.io/git dependency * Fix typo * Remove unneeded local variable
Diffstat (limited to 'routers')
-rw-r--r--routers/repo/pull.go86
1 files changed, 32 insertions, 54 deletions
diff --git a/routers/repo/pull.go b/routers/repo/pull.go
index c06c67552f..1db1e6327a 100644
--- a/routers/repo/pull.go
+++ b/routers/repo/pull.go
@@ -253,40 +253,30 @@ func setMergeTarget(ctx *context.Context, pull *models.PullRequest) {
}
// PrepareMergedViewPullInfo show meta information for a merged pull request view page
-func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) {
+func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullRequestInfo {
pull := issue.PullRequest
- var err error
- if err = pull.GetHeadRepo(); err != nil {
- ctx.ServerError("GetHeadRepo", err)
- return
- }
-
setMergeTarget(ctx, pull)
ctx.Data["HasMerged"] = true
- mergedCommit, err := ctx.Repo.GitRepo.GetCommit(pull.MergedCommitID)
- if err != nil {
- ctx.ServerError("GetCommit", err)
- return
- }
- // the ID of the last commit in the PR (not including the merge commit)
- endCommitID, err := mergedCommit.ParentID(mergedCommit.ParentCount() - 1)
- if err != nil {
- ctx.ServerError("ParentID", err)
- return
- }
+ prInfo, err := ctx.Repo.GitRepo.GetPullRequestInfo(ctx.Repo.Repository.RepoPath(),
+ pull.MergeBase, pull.GetGitRefName())
- ctx.Data["NumCommits"], err = ctx.Repo.GitRepo.CommitsCountBetween(pull.MergeBase, endCommitID.String())
- if err != nil {
- ctx.ServerError("Repo.GitRepo.CommitsCountBetween", err)
- return
- }
- ctx.Data["NumFiles"], err = ctx.Repo.GitRepo.FilesCountBetween(pull.MergeBase, endCommitID.String())
if err != nil {
- ctx.ServerError("Repo.GitRepo.FilesCountBetween", err)
- return
+ if strings.Contains(err.Error(), "fatal: Not a valid object name") {
+ ctx.Data["IsPullReuqestBroken"] = true
+ ctx.Data["BaseTarget"] = "deleted"
+ ctx.Data["NumCommits"] = 0
+ ctx.Data["NumFiles"] = 0
+ return nil
+ }
+
+ ctx.ServerError("GetPullRequestInfo", err)
+ return nil
}
+ ctx.Data["NumCommits"] = prInfo.Commits.Len()
+ ctx.Data["NumFiles"] = prInfo.NumFiles
+ return prInfo
}
// PrepareViewPullInfo show meta information for a pull request preview page
@@ -351,28 +341,16 @@ func ViewPullCommits(ctx *context.Context) {
var commits *list.List
if pull.HasMerged {
- PrepareMergedViewPullInfo(ctx, issue)
+ 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
-
- mergedCommit, err := ctx.Repo.GitRepo.GetCommit(pull.MergedCommitID)
- if err != nil {
- ctx.ServerError("Repo.GitRepo.GetCommit", err)
- return
- }
- endCommitID, err := mergedCommit.ParentID(mergedCommit.ParentCount() - 1)
- if err != nil {
- ctx.ServerError("ParentID", err)
- return
- }
- commits, err = ctx.Repo.GitRepo.CommitsBetweenIDs(endCommitID.String(), pull.MergeBase)
- if err != nil {
- ctx.ServerError("Repo.GitRepo.CommitsBetweenIDs", err)
- return
- }
+ commits = prInfo.Commits
} else {
prInfo := PrepareViewPullInfo(ctx, issue)
if ctx.Written() {
@@ -415,25 +393,25 @@ func ViewPullFiles(ctx *context.Context) {
var headTarget string
if pull.HasMerged {
- PrepareMergedViewPullInfo(ctx, issue)
+ prInfo := PrepareMergedViewPullInfo(ctx, issue)
if ctx.Written() {
return
+ } else if prInfo == nil {
+ ctx.NotFound("ViewPullFiles", nil)
+ return
}
diffRepoPath = ctx.Repo.GitRepo.Path
- startCommitID = pull.MergeBase
- mergedCommit, err := ctx.Repo.GitRepo.GetCommit(pull.MergedCommitID)
- if err != nil {
- ctx.ServerError("GetCommit", err)
- return
- }
- endCommitSha, err := mergedCommit.ParentID(mergedCommit.ParentCount() - 1)
+ gitRepo = ctx.Repo.GitRepo
+
+ headCommitID, err := gitRepo.GetRefCommitID(pull.GetGitRefName())
if err != nil {
- ctx.ServerError("ParentID", err)
+ ctx.ServerError("GetRefCommitID", err)
return
}
- endCommitID = endCommitSha.String()
- gitRepo = ctx.Repo.GitRepo
+
+ startCommitID = prInfo.MergeBase
+ endCommitID = headCommitID
headTarget = path.Join(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
ctx.Data["Username"] = ctx.Repo.Owner.Name