aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/issues/pull_list.go15
-rw-r--r--models/issues/pull_test.go2
-rw-r--r--routers/web/repo/issue.go17
-rw-r--r--routers/web/repo/pull.go2
-rw-r--r--services/pull/pull.go6
-rw-r--r--templates/repo/issue/view_content/comments.tmpl4
6 files changed, 30 insertions, 16 deletions
diff --git a/models/issues/pull_list.go b/models/issues/pull_list.go
index 2bdcdacc4e..e82ebf6096 100644
--- a/models/issues/pull_list.go
+++ b/models/issues/pull_list.go
@@ -52,13 +52,16 @@ func listPullRequestStatement(baseRepoID int64, opts *PullRequestsOptions) (*xor
// GetUnmergedPullRequestsByHeadInfo returns all pull requests that are open and has not been merged
// by given head information (repo and branch).
-func GetUnmergedPullRequestsByHeadInfo(repoID int64, branch string) ([]*PullRequest, error) {
+// arg `includeClosed` controls whether the SQL returns closed PRs
+func GetUnmergedPullRequestsByHeadInfo(repoID int64, branch string, includeClosed bool) ([]*PullRequest, error) {
prs := make([]*PullRequest, 0, 2)
- return prs, db.GetEngine(db.DefaultContext).
- Where("head_repo_id = ? AND head_branch = ? AND has_merged = ? AND issue.is_closed = ? AND flow = ?",
- repoID, branch, false, false, PullRequestFlowGithub).
+ sess := db.GetEngine(db.DefaultContext).
Join("INNER", "issue", "issue.id = pull_request.issue_id").
- Find(&prs)
+ Where("head_repo_id = ? AND head_branch = ? AND has_merged = ? AND flow = ?", repoID, branch, false, PullRequestFlowGithub)
+ if !includeClosed {
+ sess.Where("issue.is_closed = ?", false)
+ }
+ return prs, sess.Find(&prs)
}
// CanMaintainerWriteToBranch check whether user is a maintainer and could write to the branch
@@ -71,7 +74,7 @@ func CanMaintainerWriteToBranch(p access_model.Permission, branch string, user *
return false
}
- prs, err := GetUnmergedPullRequestsByHeadInfo(p.Units[0].RepoID, branch)
+ prs, err := GetUnmergedPullRequestsByHeadInfo(p.Units[0].RepoID, branch, false)
if err != nil {
return false
}
diff --git a/models/issues/pull_test.go b/models/issues/pull_test.go
index fb46e3071e..2cfaabdb3b 100644
--- a/models/issues/pull_test.go
+++ b/models/issues/pull_test.go
@@ -119,7 +119,7 @@ func TestHasUnmergedPullRequestsByHeadInfo(t *testing.T) {
func TestGetUnmergedPullRequestsByHeadInfo(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
- prs, err := issues_model.GetUnmergedPullRequestsByHeadInfo(1, "branch2")
+ prs, err := issues_model.GetUnmergedPullRequestsByHeadInfo(1, "branch2", false)
assert.NoError(t, err)
assert.Len(t, prs, 1)
for _, pr := range prs {
diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go
index a64d8425df..f7bdbdbe18 100644
--- a/routers/web/repo/issue.go
+++ b/routers/web/repo/issue.go
@@ -1375,11 +1375,12 @@ func ViewIssue(ctx *context.Context) {
}
var (
- role issues_model.RoleDescriptor
- ok bool
- marked = make(map[int64]issues_model.RoleDescriptor)
- comment *issues_model.Comment
- participants = make([]*user_model.User, 1, 10)
+ role issues_model.RoleDescriptor
+ ok bool
+ marked = make(map[int64]issues_model.RoleDescriptor)
+ comment *issues_model.Comment
+ participants = make([]*user_model.User, 1, 10)
+ latestCloseCommentID int64
)
if ctx.Repo.Repository.IsTimetrackerEnabled() {
if ctx.IsSigned {
@@ -1586,9 +1587,15 @@ func ViewIssue(ctx *context.Context) {
comment.Type == issues_model.CommentTypeStopTracking {
// drop error since times could be pruned from DB..
_ = comment.LoadTime()
+ } else if comment.Type == issues_model.CommentTypeClose {
+ // record ID of latest closed comment.
+ // if PR is closed, the comments whose type is CommentTypePullRequestPush(29) after latestCloseCommentID won't be rendered.
+ latestCloseCommentID = comment.ID
}
}
+ ctx.Data["LatestCloseCommentID"] = latestCloseCommentID
+
// Combine multiple label assignments into a single comment
combineLabelComments(issue)
diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go
index b2566eaaab..b8d3c6cdfd 100644
--- a/routers/web/repo/pull.go
+++ b/routers/web/repo/pull.go
@@ -574,7 +574,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
ctx.Data["HeadBranchCommitID"] = headBranchSha
ctx.Data["PullHeadCommitID"] = sha
- if pull.HeadRepo == nil || !headBranchExist || headBranchSha != sha {
+ if pull.HeadRepo == nil || !headBranchExist || (!pull.Issue.IsClosed && (headBranchSha != sha)) {
ctx.Data["IsPullRequestBroken"] = true
if pull.IsSameRepo() {
ctx.Data["HeadTarget"] = pull.HeadBranch
diff --git a/services/pull/pull.go b/services/pull/pull.go
index 3ec7ec92b7..f4c4202260 100644
--- a/services/pull/pull.go
+++ b/services/pull/pull.go
@@ -258,7 +258,7 @@ func AddTestPullRequestTask(doer *user_model.User, repoID int64, branch string,
// If you don't let it run all the way then you will lose data
// TODO: graceful: AddTestPullRequestTask needs to become a queue!
- prs, err := issues_model.GetUnmergedPullRequestsByHeadInfo(repoID, branch)
+ prs, err := issues_model.GetUnmergedPullRequestsByHeadInfo(repoID, branch, true)
if err != nil {
log.Error("Find pull requests [head_repo_id: %d, head_branch: %s]: %v", repoID, branch, err)
return
@@ -502,7 +502,7 @@ func (errs errlist) Error() string {
// CloseBranchPulls close all the pull requests who's head branch is the branch
func CloseBranchPulls(doer *user_model.User, repoID int64, branch string) error {
- prs, err := issues_model.GetUnmergedPullRequestsByHeadInfo(repoID, branch)
+ prs, err := issues_model.GetUnmergedPullRequestsByHeadInfo(repoID, branch, false)
if err != nil {
return err
}
@@ -538,7 +538,7 @@ func CloseRepoBranchesPulls(ctx context.Context, doer *user_model.User, repo *re
var errs errlist
for _, branch := range branches {
- prs, err := issues_model.GetUnmergedPullRequestsByHeadInfo(repo.ID, branch.Name)
+ prs, err := issues_model.GetUnmergedPullRequestsByHeadInfo(repo.ID, branch.Name, false)
if err != nil {
return err
}
diff --git a/templates/repo/issue/view_content/comments.tmpl b/templates/repo/issue/view_content/comments.tmpl
index 8371427039..99efd5b9ca 100644
--- a/templates/repo/issue/view_content/comments.tmpl
+++ b/templates/repo/issue/view_content/comments.tmpl
@@ -697,6 +697,10 @@
</span>
</div>
{{else if and (eq .Type 29) (or (gt .CommitsNum 0) .IsForcePush)}}
+ <!-- If PR is closed, the comments whose type is CommentTypePullRequestPush(29) after latestCloseCommentID won't be rendered. //-->
+ {{if and .Issue.IsClosed (gt .ID $.LatestCloseCommentID)}}
+ {{continue}}
+ {{end}}
<div class="timeline-item event" id="{{.HashTag}}">
<span class="badge">{{svg "octicon-repo-push"}}</span>
<span class="text grey muted-links">