From 4e5aca62ee76ac0651cf27c5fd21917eb884ea81 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 24 Apr 2025 18:28:02 -0700 Subject: [PATCH] Fix panic when comment is nil (#34257) (#34277) Fix #34254 Backport #34257 --- models/issues/review.go | 2 +- services/issue/pull.go | 6 ++++++ tests/integration/pull_review_test.go | 24 +++--------------------- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/models/issues/review.go b/models/issues/review.go index 3e787273be..d8dc539c3b 100644 --- a/models/issues/review.go +++ b/models/issues/review.go @@ -663,7 +663,7 @@ func AddReviewRequest(ctx context.Context, issue *Issue, reviewer, doer *user_mo } if review != nil { - // skip it when reviewer hase been request to review + // skip it when reviewer has been request to review if review.Type == ReviewTypeRequest { return nil, committer.Commit() // still commit the transaction, or committer.Close() will rollback it, even if it's a reused transaction. } diff --git a/services/issue/pull.go b/services/issue/pull.go index bd19c25436..c9d32000af 100644 --- a/services/issue/pull.go +++ b/services/issue/pull.go @@ -145,6 +145,9 @@ func PullRequestCodeOwnersReviewSpecialCommits(ctx context.Context, pr *issues_m log.Warn("Failed add assignee user: %s to PR review: %s#%d, error: %s", u.Name, pr.BaseRepo.Name, pr.ID, err) return nil, err } + if comment == nil { // comment maybe nil if review type is ReviewTypeRequest + continue + } notifiers = append(notifiers, &ReviewRequestNotifier{ Comment: comment, IsAdd: true, @@ -158,6 +161,9 @@ func PullRequestCodeOwnersReviewSpecialCommits(ctx context.Context, pr *issues_m log.Warn("Failed add assignee team: %s to PR review: %s#%d, error: %s", t.Name, pr.BaseRepo.Name, pr.ID, err) return nil, err } + if comment == nil { // comment maybe nil if review type is ReviewTypeRequest + continue + } notifiers = append(notifiers, &ReviewRequestNotifier{ Comment: comment, IsAdd: true, diff --git a/tests/integration/pull_review_test.go b/tests/integration/pull_review_test.go index 878020625b..fef11496e4 100644 --- a/tests/integration/pull_review_test.go +++ b/tests/integration/pull_review_test.go @@ -8,7 +8,6 @@ import ( "net/http/httptest" "net/url" "path" - "sort" "strings" "testing" @@ -76,7 +75,7 @@ func TestPullView_CodeOwner(t *testing.T) { t.Run("First Pull Request", func(t *testing.T) { // create a new branch to prepare for pull request - resp1, err := files_service.ChangeRepoFiles(db.DefaultContext, repo, user2, &files_service.ChangeRepoFilesOptions{ + _, err := files_service.ChangeRepoFiles(db.DefaultContext, repo, user2, &files_service.ChangeRepoFilesOptions{ NewBranch: "codeowner-basebranch", Files: []*files_service.ChangeRepoFile{ { @@ -96,13 +95,8 @@ func TestPullView_CodeOwner(t *testing.T) { unittest.AssertExistsIf(t, true, &issues_model.Review{IssueID: pr.IssueID, Type: issues_model.ReviewTypeRequest, ReviewerID: 5}) assert.NoError(t, pr.LoadIssue(db.DefaultContext)) - reviewNotifiers, err := issue_service.PullRequestCodeOwnersReview(db.DefaultContext, pr) - assert.NoError(t, err) - assert.Len(t, reviewNotifiers, 1) - assert.EqualValues(t, 5, reviewNotifiers[0].Reviewer.ID) - // update the file on the pr branch - resp2, err := files_service.ChangeRepoFiles(db.DefaultContext, repo, user2, &files_service.ChangeRepoFilesOptions{ + _, err = files_service.ChangeRepoFiles(db.DefaultContext, repo, user2, &files_service.ChangeRepoFilesOptions{ OldBranch: "codeowner-basebranch", Files: []*files_service.ChangeRepoFile{ { @@ -114,14 +108,7 @@ func TestPullView_CodeOwner(t *testing.T) { }) assert.NoError(t, err) - reviewNotifiers, err = issue_service.PullRequestCodeOwnersReview(db.DefaultContext, pr) - assert.NoError(t, err) - assert.Len(t, reviewNotifiers, 2) - reviewerIDs := []int64{reviewNotifiers[0].Reviewer.ID, reviewNotifiers[1].Reviewer.ID} - sort.Slice(reviewerIDs, func(i, j int) bool { return reviewerIDs[i] < reviewerIDs[j] }) - assert.EqualValues(t, []int64{5, 8}, reviewerIDs) - - reviewNotifiers, err = issue_service.PullRequestCodeOwnersReviewSpecialCommits(db.DefaultContext, pr, resp1.Commit.SHA, resp2.Commit.SHA) + reviewNotifiers, err := issue_service.PullRequestCodeOwnersReview(db.DefaultContext, pr) assert.NoError(t, err) assert.Len(t, reviewNotifiers, 1) assert.EqualValues(t, 8, reviewNotifiers[0].Reviewer.ID) @@ -171,11 +158,6 @@ func TestPullView_CodeOwner(t *testing.T) { pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{BaseRepoID: repo.ID, HeadBranch: "codeowner-basebranch2"}) unittest.AssertExistsAndLoadBean(t, &issues_model.Review{IssueID: pr.IssueID, Type: issues_model.ReviewTypeRequest, ReviewerID: 8}) - - reviewNotifiers, err := issue_service.PullRequestCodeOwnersReview(db.DefaultContext, pr) - assert.NoError(t, err) - assert.Len(t, reviewNotifiers, 1) - assert.EqualValues(t, 8, reviewNotifiers[0].Reviewer.ID) }) t.Run("Forked Repo Pull Request", func(t *testing.T) {