Skip to content

Commit f4b8f6f

Browse files
authored
Fix the logic of finding the latest pull review commit ID (#32139)
Fix #31423
1 parent 1328387 commit f4b8f6f

File tree

11 files changed

+88
-11
lines changed

11 files changed

+88
-11
lines changed

models/fixtures/comment.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,22 @@
8383
issue_id: 2 # in repo_id 1
8484
review_id: 20
8585
created_unix: 946684810
86+
87+
-
88+
id: 10
89+
type: 22 # review
90+
poster_id: 5
91+
issue_id: 3 # in repo_id 1
92+
content: "reviewed by user5"
93+
review_id: 21
94+
created_unix: 946684816
95+
96+
-
97+
id: 11
98+
type: 27 # review request
99+
poster_id: 2
100+
issue_id: 3 # in repo_id 1
101+
content: "review request for user5"
102+
review_id: 22
103+
assignee_id: 5
104+
created_unix: 946684817

models/fixtures/review.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,3 +179,22 @@
179179
content: "Review Comment"
180180
updated_unix: 946684810
181181
created_unix: 946684810
182+
183+
-
184+
id: 21
185+
type: 2
186+
reviewer_id: 5
187+
issue_id: 3
188+
content: "reviewed by user5"
189+
commit_id: 4a357436d925b5c974181ff12a994538ddc5a269
190+
updated_unix: 946684816
191+
created_unix: 946684816
192+
193+
-
194+
id: 22
195+
type: 4
196+
reviewer_id: 5
197+
issue_id: 3
198+
content: "review request for user5"
199+
updated_unix: 946684817
200+
created_unix: 946684817

models/issues/pull.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ func (pr *PullRequest) getReviewedByLines(ctx context.Context, writer io.Writer)
414414

415415
// Note: This doesn't page as we only expect a very limited number of reviews
416416
reviews, err := FindLatestReviews(ctx, FindReviewOptions{
417-
Type: ReviewTypeApprove,
417+
Types: []ReviewType{ReviewTypeApprove},
418418
IssueID: pr.IssueID,
419419
OfficialOnly: setting.Repository.PullRequest.DefaultMergeMessageOfficialApproversOnly,
420420
})

models/issues/review.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ func GetCurrentReview(ctx context.Context, reviewer *user_model.User, issue *Iss
389389
return nil, nil
390390
}
391391
reviews, err := FindReviews(ctx, FindReviewOptions{
392-
Type: ReviewTypePending,
392+
Types: []ReviewType{ReviewTypePending},
393393
IssueID: issue.ID,
394394
ReviewerID: reviewer.ID,
395395
})

models/issues/review_list.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func (reviews ReviewList) LoadIssues(ctx context.Context) error {
9292
// FindReviewOptions represent possible filters to find reviews
9393
type FindReviewOptions struct {
9494
db.ListOptions
95-
Type ReviewType
95+
Types []ReviewType
9696
IssueID int64
9797
ReviewerID int64
9898
OfficialOnly bool
@@ -107,8 +107,8 @@ func (opts *FindReviewOptions) toCond() builder.Cond {
107107
if opts.ReviewerID > 0 {
108108
cond = cond.And(builder.Eq{"reviewer_id": opts.ReviewerID})
109109
}
110-
if opts.Type != ReviewTypeUnknown {
111-
cond = cond.And(builder.Eq{"type": opts.Type})
110+
if len(opts.Types) > 0 {
111+
cond = cond.And(builder.In("type", opts.Types))
112112
}
113113
if opts.OfficialOnly {
114114
cond = cond.And(builder.Eq{"official": true})

models/issues/review_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func TestReviewType_Icon(t *testing.T) {
6363
func TestFindReviews(t *testing.T) {
6464
assert.NoError(t, unittest.PrepareTestDatabase())
6565
reviews, err := issues_model.FindReviews(db.DefaultContext, issues_model.FindReviewOptions{
66-
Type: issues_model.ReviewTypeApprove,
66+
Types: []issues_model.ReviewType{issues_model.ReviewTypeApprove},
6767
IssueID: 2,
6868
ReviewerID: 1,
6969
})
@@ -75,7 +75,7 @@ func TestFindReviews(t *testing.T) {
7575
func TestFindLatestReviews(t *testing.T) {
7676
assert.NoError(t, unittest.PrepareTestDatabase())
7777
reviews, err := issues_model.FindLatestReviews(db.DefaultContext, issues_model.FindReviewOptions{
78-
Type: issues_model.ReviewTypeApprove,
78+
Types: []issues_model.ReviewType{issues_model.ReviewTypeApprove},
7979
IssueID: 11,
8080
})
8181
assert.NoError(t, err)

routers/api/v1/repo/pull_review.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ func ListPullReviews(ctx *context.APIContext) {
8383

8484
opts := issues_model.FindReviewOptions{
8585
ListOptions: utils.GetListOptions(ctx),
86-
Type: issues_model.ReviewTypeUnknown,
8786
IssueID: pr.IssueID,
8887
}
8988

services/pull/pull.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -995,6 +995,8 @@ type CommitInfo struct {
995995
}
996996

997997
// GetPullCommits returns all commits on given pull request and the last review commit sha
998+
// Attention: The last review commit sha must be from the latest review whose commit id is not empty.
999+
// So the type of the latest review cannot be "ReviewTypeRequest".
9981000
func GetPullCommits(ctx *gitea_context.Context, issue *issues_model.Issue) ([]CommitInfo, string, error) {
9991001
pull := issue.PullRequest
10001002

@@ -1040,7 +1042,11 @@ func GetPullCommits(ctx *gitea_context.Context, issue *issues_model.Issue) ([]Co
10401042
lastreview, err := issues_model.FindLatestReviews(ctx, issues_model.FindReviewOptions{
10411043
IssueID: issue.ID,
10421044
ReviewerID: ctx.Doer.ID,
1043-
Type: issues_model.ReviewTypeUnknown,
1045+
Types: []issues_model.ReviewType{
1046+
issues_model.ReviewTypeApprove,
1047+
issues_model.ReviewTypeComment,
1048+
issues_model.ReviewTypeReject,
1049+
},
10441050
})
10451051

10461052
if err != nil && !issues_model.IsErrReviewNotExist(err) {

services/pull/review.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ func DismissApprovalReviews(ctx context.Context, doer *user_model.User, pull *is
348348
reviews, err := issues_model.FindReviews(ctx, issues_model.FindReviewOptions{
349349
ListOptions: db.ListOptionsAll,
350350
IssueID: pull.IssueID,
351-
Type: issues_model.ReviewTypeApprove,
351+
Types: []issues_model.ReviewType{issues_model.ReviewTypeApprove},
352352
Dismissed: optional.Some(false),
353353
})
354354
if err != nil {

tests/integration/api_pull_review_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func TestAPIPullReview(t *testing.T) {
3838

3939
var reviews []*api.PullReview
4040
DecodeJSON(t, resp, &reviews)
41-
if !assert.Len(t, reviews, 6) {
41+
if !assert.Len(t, reviews, 8) {
4242
return
4343
}
4444
for _, r := range reviews {

tests/integration/pull_commit_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright 2024 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package integration
5+
6+
import (
7+
"net/http"
8+
"net/url"
9+
"testing"
10+
11+
pull_service "code.gitea.io/gitea/services/pull"
12+
13+
"github.com/stretchr/testify/assert"
14+
)
15+
16+
func TestListPullCommits(t *testing.T) {
17+
onGiteaRun(t, func(t *testing.T, u *url.URL) {
18+
session := loginUser(t, "user5")
19+
req := NewRequest(t, "GET", "/user2/repo1/pulls/3/commits/list")
20+
resp := session.MakeRequest(t, req, http.StatusOK)
21+
22+
var pullCommitList struct {
23+
Commits []pull_service.CommitInfo `json:"commits"`
24+
LastReviewCommitSha string `json:"last_review_commit_sha"`
25+
}
26+
DecodeJSON(t, resp, &pullCommitList)
27+
28+
if assert.Len(t, pullCommitList.Commits, 2) {
29+
assert.Equal(t, "5f22f7d0d95d614d25a5b68592adb345a4b5c7fd", pullCommitList.Commits[0].ID)
30+
assert.Equal(t, "4a357436d925b5c974181ff12a994538ddc5a269", pullCommitList.Commits[1].ID)
31+
}
32+
assert.Equal(t, "4a357436d925b5c974181ff12a994538ddc5a269", pullCommitList.LastReviewCommitSha)
33+
})
34+
}

0 commit comments

Comments
 (0)