loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request '[Port] gitea#29999: Fix Add/Remove WIP on pull request title failure' (#2873) from gusted/forgejo-port-gitea-prs into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2873
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>

+42 -21
+17 -14
services/issue/issue.go
··· 17 17 system_model "code.gitea.io/gitea/models/system" 18 18 user_model "code.gitea.io/gitea/models/user" 19 19 "code.gitea.io/gitea/modules/git" 20 + "code.gitea.io/gitea/modules/log" 20 21 "code.gitea.io/gitea/modules/storage" 21 22 "code.gitea.io/gitea/modules/timeutil" 22 23 notify_service "code.gitea.io/gitea/services/notify" ··· 64 65 return nil 65 66 } 66 67 67 - var reviewNotifers []*ReviewRequestNotifier 68 + if err := issue.LoadRepo(ctx); err != nil { 69 + return err 70 + } 68 71 69 - if err := db.WithTx(ctx, func(ctx context.Context) error { 70 - if err := issues_model.ChangeIssueTitle(ctx, issue, doer, oldTitle); err != nil { 71 - return err 72 - } 72 + if user_model.IsBlockedMultiple(ctx, []int64{issue.PosterID, issue.Repo.OwnerID}, doer.ID) { 73 + return user_model.ErrBlockedByUser 74 + } 73 75 74 - if issue.IsPull && issues_model.HasWorkInProgressPrefix(oldTitle) && !issues_model.HasWorkInProgressPrefix(title) { 75 - var err error 76 - reviewNotifers, err = PullRequestCodeOwnersReview(ctx, issue, issue.PullRequest) 77 - if err != nil { 78 - return err 79 - } 76 + if err := issues_model.ChangeIssueTitle(ctx, issue, doer, oldTitle); err != nil { 77 + return err 78 + } 79 + 80 + var reviewNotifers []*ReviewRequestNotifier 81 + if issue.IsPull && issues_model.HasWorkInProgressPrefix(oldTitle) && !issues_model.HasWorkInProgressPrefix(title) { 82 + var err error 83 + reviewNotifers, err = PullRequestCodeOwnersReview(ctx, issue, issue.PullRequest) 84 + if err != nil { 85 + log.Error("PullRequestCodeOwnersReview: %v", err) 80 86 } 81 - return nil 82 - }); err != nil { 83 - return err 84 87 } 85 88 86 89 notify_service.IssueChangeTitle(ctx, doer, issue, oldTitle)
+10 -6
services/issue/pull.go
··· 40 40 ReviewTeam *org_model.Team 41 41 } 42 42 43 - func PullRequestCodeOwnersReview(ctx context.Context, pull *issues_model.Issue, pr *issues_model.PullRequest) ([]*ReviewRequestNotifier, error) { 43 + func PullRequestCodeOwnersReview(ctx context.Context, issue *issues_model.Issue, pr *issues_model.PullRequest) ([]*ReviewRequestNotifier, error) { 44 44 files := []string{"CODEOWNERS", "docs/CODEOWNERS", ".gitea/CODEOWNERS"} 45 45 46 46 if pr.IsWorkInProgress(ctx) { ··· 90 90 91 91 // https://github.com/go-gitea/gitea/issues/29763, we need to get the files changed 92 92 // between the merge base and the head commit but not the base branch and the head commit 93 - changedFiles, err := repo.GetFilesChangedBetween(mergeBase, pr.HeadCommitID) 93 + changedFiles, err := repo.GetFilesChangedBetween(mergeBase, pr.GetGitRefName()) 94 94 if err != nil { 95 95 return nil, err 96 96 } ··· 112 112 113 113 notifiers := make([]*ReviewRequestNotifier, 0, len(uniqUsers)+len(uniqTeams)) 114 114 115 + if err := issue.LoadPoster(ctx); err != nil { 116 + return nil, err 117 + } 118 + 115 119 for _, u := range uniqUsers { 116 - if u.ID != pull.Poster.ID { 117 - comment, err := issues_model.AddReviewRequest(ctx, pull, u, pull.Poster) 120 + if u.ID != issue.Poster.ID { 121 + comment, err := issues_model.AddReviewRequest(ctx, issue, u, issue.Poster) 118 122 if err != nil { 119 123 log.Warn("Failed add assignee user: %s to PR review: %s#%d, error: %s", u.Name, pr.BaseRepo.Name, pr.ID, err) 120 124 return nil, err ··· 122 126 notifiers = append(notifiers, &ReviewRequestNotifier{ 123 127 Comment: comment, 124 128 IsAdd: true, 125 - Reviwer: pull.Poster, 129 + Reviwer: u, 126 130 }) 127 131 } 128 132 } 129 133 for _, t := range uniqTeams { 130 - comment, err := issues_model.AddTeamReviewRequest(ctx, pull, t, pull.Poster) 134 + comment, err := issues_model.AddTeamReviewRequest(ctx, issue, t, issue.Poster) 131 135 if err != nil { 132 136 log.Warn("Failed add assignee team: %s to PR review: %s#%d, error: %s", t.Name, pr.BaseRepo.Name, pr.ID, err) 133 137 return nil, err
+15 -1
tests/integration/pull_review_test.go
··· 16 16 "code.gitea.io/gitea/models/unittest" 17 17 user_model "code.gitea.io/gitea/models/user" 18 18 "code.gitea.io/gitea/modules/git" 19 + issue_service "code.gitea.io/gitea/services/issue" 19 20 repo_service "code.gitea.io/gitea/services/repository" 20 21 files_service "code.gitea.io/gitea/services/repository/files" 21 22 "code.gitea.io/gitea/tests" ··· 303 304 session := loginUser(t, "user2") 304 305 testPullCreate(t, session, "user2", "test_codeowner", false, repo.DefaultBranch, "codeowner-basebranch", "Test Pull Request") 305 306 306 - pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{BaseRepoID: repo.ID, HeadBranch: "codeowner-basebranch"}) 307 + pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{BaseRepoID: repo.ID, HeadRepoID: repo.ID, HeadBranch: "codeowner-basebranch"}) 307 308 unittest.AssertExistsIf(t, true, &issues_model.Review{IssueID: pr.IssueID, Type: issues_model.ReviewTypeRequest, ReviewerID: 5}) 309 + assert.NoError(t, pr.LoadIssue(db.DefaultContext)) 310 + 311 + err := issue_service.ChangeTitle(db.DefaultContext, pr.Issue, user2, "[WIP] Test Pull Request") 312 + assert.NoError(t, err) 313 + prUpdated1 := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: pr.ID}) 314 + assert.NoError(t, prUpdated1.LoadIssue(db.DefaultContext)) 315 + assert.EqualValues(t, "[WIP] Test Pull Request", prUpdated1.Issue.Title) 316 + 317 + err = issue_service.ChangeTitle(db.DefaultContext, prUpdated1.Issue, user2, "Test Pull Request2") 318 + assert.NoError(t, err) 319 + prUpdated2 := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: pr.ID}) 320 + assert.NoError(t, prUpdated2.LoadIssue(db.DefaultContext)) 321 + assert.EqualValues(t, "Test Pull Request2", prUpdated2.Issue.Title) 308 322 }) 309 323 310 324 // change the default branch CODEOWNERS file to change README.md's codeowner